ERLANDSEN DATA CONSULTING Excel & VBA Tips   Information in English / Informasjon på engelsk

Disse websidene oppdateres ikke lengre og er kun tilgjengelig for historikken sin skyld.

Klikk her for å gå til den oppdaterte informasjonen.

Tilfeldig filtilgang (random access)

Tilfeldig tilgang benyttes for å lese og skrive informasjon til en fil uten at man er nødt til å lukke filen mellom hver av  operasjonene. Filer for tilfeldig tilgang lagrer informasjonen i poster, noe som gjør det enkelt og raskt å lokalisere informasjon. En post inneholder informasjon som er lagret i en brukerdefinert datatype. Brukerdefinerte datatyper defineres i modulens deklarasjonsdel (på toppen av modulen) på denne måten:

Type MyRecordInfo
    LastName As String * 30
    FirstName As String * 30
    BirthDate As Date
End Type

Når man definerer en brukerdefinert datatype som skal benyttes i en fil for tilfeldig tilgang, er det viktig at man benytter variabler med en fast lengde. Variabeltypen String kan inneholde tekster av forskjellig lengde, derfor er det viktig at man angir hvor mange tegn variabelen skal lagre, for eksempel betyr LastName as String * 30 at variablen LastName kan inneholde 30 tegn.

For å åpne en fil for tilfeldig tilgang fra VBA benyttes følgende syntaks:
Open filename For Random As filenumber Len=buffersize
Buffersize settes vanligvis lik postens lengde, Len = Len(MyRecord).
Du må lukke alle filer som åpnes før du åpner filen på nytt med en annen tilgangstype.

Her er en eksempelmakro som lager en ny fil for tilfeldig tilgang ved hjelp av den egendefinerte datatypen som er vist ovenfor:

Sub WriteRandomFile()
Dim MyRecord As MyRecordInfo, FileNum As Integer, i As Integer
    If Dir("C:\FOLDERNAME\RANDFILE.DAT") <> "" Then
        ' slett filen dersom den finnes fra før
        Kill "C:\FOLDERNAME\RANDFILE.DAT"
    End If
    FileNum = FreeFile ' neste ledige filnummer
    Open "C:\FOLDERNAME\RANDFILE.DAT" For Random As #FileNum Len = Len(MyRecord) 
    ' opprett en ny fil
    ' skriv til filen
    For i = 1 To 100
        With MyRecord
            .LastName = "Etternavn" & i
            .FirstName = "Fornavn" & i
            .BirthDate = Date
        End With
        Put #FileNum, , MyRecord ' legger til en ny post på slutten av filen
    Next i
    Close #FileNum ' lukker filen
End Sub

Informasjonen fra filen for tilfeldig tilgang kan leses på denne måten:

Sub ReadRandomFile()
Dim MyRecord As MyRecordInfo, FileNum As Integer, i As Integer
    FileNum = FreeFile ' neste ledige filnummer
    Open "C:\FOLDERNAME\RANDFILE.DAT" For Random As #FileNum Len = Len(MyRecord) 
    ' åpner den eksisterende filen
    ' les informasjon fra filen
    For i = 1 To 100
        Get #FileNum, , MyRecord ' leser den neste posten
        ' gjør noe med informasjonen
        With MyRecord
            'Debug.Print .LastName & ", " & .FirstName & " " & .BirthDate
            Debug.Print Trim(.LastName) & ", " & _
                Trim(.FirstName) & " " & .BirthDate
        End With
    Next i
    Close #FileNum ' lukk filen
End Sub

Som tidligere nevnt er det enkelt å gjenfinne informasjon fra en angitt post i en fil for tilfeldig tilgang. Makroen nedenfor viser et eksempel på hvordan dette kan gjøres:

Sub ReadRandomFileRecord()
Dim MyRecord As MyRecordInfo, FileNum As Integer, i As Integer, RecordsCount As Long
    FileNum = FreeFile ' neste ledige filnummer
    Open "C:\FOLDERNAME\RANDFILE.DAT" For Random As #FileNum Len = Len(MyRecord) 
    ' åpner filen
    RecordsCount = LOF(FileNum) / Len(MyRecord) ' totalt antall poster
    i = InputBox("Velg en post (1-" & RecordsCount & ")", "Vis en post", 1)
    If i > 0 And i <= RecordsCount Then
        Get #FileNum, i, MyRecord ' les posten
        ' gjør noe med informasjonen
        With MyRecord
            Debug.Print Trim(.LastName) & ", " & _
                Trim(.FirstName) & " " & .BirthDate
        End With
    End If
    Close #FileNum ' lukk filen
End Sub

Det er like lett å redigere innholdet i en angitt post i en fil for tilfeldig tilgang. Denne makroen viser hvordan:

Sub WriteRandomFileRecord()
Dim MyRecord As MyRecordInfo, FileNum As Integer, i As Integer, RecordsCount As Long
    FileNum = FreeFile ' neste ledige filnummer
    Open "C:\FOLDERNAME\RANDFILE.DAT" For Random As #FileNum Len = Len(MyRecord) 
    ' åpner filen
    RecordsCount = LOF(FileNum) / Len(MyRecord) ' totalt antall poster
    i = InputBox("Velg en post (1-" & RecordsCount & ")", "Oppdater en post", 1)
    If i > 0 And i <= RecordsCount Then
        ' rediger den valgte posten
        With MyRecord
            .LastName = "NyttEtternavn"
            .FirstName = "NyttFornavn"
            .BirthDate = Date + 1
        End With
        Put #FileNum, i, MyRecord ' lagrer posten med ny informasjon
    End If
    Close #FileNum ' lukker filen
End Sub

 

Dokumentet er sist oppdatert 1999-12-17 12:33:11      Utskriftsvennlig versjon

 

Erlandsen Data Consulting     http://www.erlandsendata.no/   
Excel & VBA Tips   Copyright ©1999-2017    Ole P. Erlandsen   All rights reserved
E-post kontaktadresse