En av hovedårsakene til at folk går fra å bruke et regneark til en database, er fordi mengden informasjon de lagrer har vokst ut av det Excel er komfortabelt i stand til å håndtere. Men å flytte til en database blir ikke helt kvitt det problemet, da databasetabeller har grenser for antall poster de også kan holde. Men hvordan kan du vite når et bord nærmer seg den grensen? Eller når det rett og slett blir for stort og det trengs litt arkivering av data? Denne artikkelen vil vise deg.
Størrelsesgrense for tilgangstabeller
Enten du er klar over det eller ikke, har Microsoft Access en grense for hvor stor et gitt bord kan bli (du kan finne den grensen ved å sjekke den offisielle Microsoft-siden ettersom den endres basert på versjonen du bruker). For eksempel kan et bord i Access 2000 bare inneholde opptil 1 GB med informasjon. Selv om det kan virke som mye, er det overraskende lett å nå det nivået hvis du ikke er forsiktig (eller hvis felttypene i tabellen ikke er riktig valgt/størrelse).
Så spørsmålet du bør stille deg selv er ikke "vil jeg noen gang nå den grensen", men i stedet bør du spørre deg selv "hvordan skal jeg sørge for at jeg vet at jeg nærmer meg det godt før det blir et problem" - tross alt, det er bedre å unngå en ødelagt Access-database heller enn å prøve å fikse det.
VBA-kode for å forhindre overdimensjonerte tilgangstabeller
En måte å oppnå dette på er å holde øye med antall poster i tabellen, og det er akkurat det vi skal gjøre med vår VBA-kode.
Først, la oss definere hva vi vil at koden vår skal gjøre:
"Gi et bordnavn, vis en melding når bordet når en gitt 'advarselsgrense'"
Ved å bruke koden nedenfor, vil du kunne vise en advarselsmelding som forteller deg når tabellen spesifisert (ved å bruke "Tabellnavn") inneholder x antall rader eller flere (sett med "WarningLevel").
NB: Jeg har tatt med grunnleggende feilhåndtering for å ta hensyn til tidspunkter når du for eksempel kan stave tabellnavnet feil når du ringer sub-en.
Offentlig funksjon GetTableSize (TabellName Som String, WarningLevel As Long) Dim errCode As Long Dim dbs As Database Dim tdf As TableDef On Error Resume Next Set dbs = CurrentDb ' Følgende linje velger tabelldefinisjonen ved å bruke navnet som er oppgitt - hvis det er en feil (mer sannsynlig på grunn av feilstavet tabellnavn, vil koden hoppe til feilbehandleren på slutten av sub) Sett tdf = dbs.TableDefs(TableName) errCode = err.Number On Error GoTo BadTable If tdf.RecordCount >= WarningLevel Then MsgBox TableName & " har " & tdf.RecordCount & " rader, vurder å arkivere noen av disse dataene", vbExclamation, "Tabell Size Warning" End If BadTable: If errCode <> 0 Then MsgBox "En feil oppstod - brukte du rett TableName?", vbCritical, "Kan ikke laste tabelldetaljer" Sett tdf = Ingenting Sett dbs = Ingenting End Sub
Kode Forklaring
Most av koden er selvforklarende. Først start ved å få en referanse til gjeldende database (dbs), og deretter forsøker vi å åpne definisjonen for den aktuelle tabellen (tdf). Hvis det oppstår en feil ved valg av tabellen, er det mer enn sannsynlig fordi tabellen ikke eksisterer fordi navnet som ble oppgitt ble feilstavet. Nå som vi har en referanse til tabelldefinisjonen, kan vi sjekke hvor mange rader det er i tabellen ved å bruke egenskapen "RecordCount" som vi sammenligner med vår "Advarselsgrense" og handle deretter.
Bruke koden
Du kan naturligvis kalle denne koden fra hvor som helst i databasen din – hvis du bruker Access 2000 eller høyere kan du bruke følgende løsning, ellers må du opprette en AutoExec-makro for å kjøre denne koden hver gang du åpner databasen eller legger til hendelsesanropet til en skjemahendelse.
Kun tilgang til 2000 og høyere
Microsoft introduserte muligheten til å kjøre spesifikke handlinger mot en tabell når for eksempel poster ble satt inn eller slettet. Dessverre er ikke det å kjøre VBA-kode en av disse handlingene, men du vil være glad for å vite at det er en relativt enkel løsning.
- Med den relevante tabellen åpen, klikk på "Tabell"-menylinjen.
- Ettersom vi overvåker tabeller for vekst, er det best å bruke «Etter innsetting»-hendelsen, så klikk på den
- Siden vi ikke kan bruke den vanlige "RunCode"-handlingen, bruker vi "SetLocalVar"-handlingen i stedet, så klikk på det alternativet fra rullegardinlisten over handlinger
- Navnet du gir dette er ikke viktig, så kall det hva du vil – dvs. dummyVariable
- I uttrykket kan du skrive inn navnet på funksjonen ovenfor, sammen med parameterne – så for eksempel – hvis jeg overvåket en “salg”-tabell, ville jeg skrevet inn følgende i uttrykksfeltet: GetTableSize(“sales”,100000 )
- Lagre handlingen og lukk den.
Nå vil koden kjøre hver gang du legger til nye poster i tabellen, og du vil bli advart når tabellen når det angitte antallet poster – akkurat det vi ønsker!
Forfatterintroduksjon:
Mitchell Pond er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparasjon SQL Server feil og excel-programvareprodukter for gjenoppretting. For mer informasjon besøk www.datanumen. Med
HVA HVIS DU VIL STILLE AT ANTALL RECORDS IKKE SKAL VÆRE MINDRE ENN 5?