Hej ! Här är et tiltet exempel: Hej Andreas! Ändra Private till Public om du placerat din datatyp i en modul. Hej Andreas! Se mitt första inlägg. Andra open satsen är för att läsa, Do-loopen läser alla poster från filen. Hej Andreas, Hej! Tack Andreas & Henrik!Spara och hämta i Visual Basic 6.0
Jag undrar om det är någon som vet hur man sparar till fil, och hämtar från fil när det gäller en egen definierad datatyp? Det är frågan om Medlem (1).namn, Medlem (1).idnummer o.s.v. Är det någon som har en bra kodsnutt?
Mvh
/JanSv: Spara och hämta i Visual Basic 6.0
Private Type Record ' Define user-defined type.
ID As Integer
Name As String * 20
End Type
Private Sub Form_Load()
Dim FileNumber As Long
Dim MyRecord As Record
Const pathname = "text.dat"
FileNumber = FreeFile()
Open pathname For Binary Access Write Lock Write As #FileNumber Len = Len(MyRecord)
MyRecord.ID = 1001
MyRecord.Name = "Adam"
Put #FileNumber, , MyRecord
MyRecord.ID = 1002
MyRecord.Name = "Beatric"
Put #FileNumber, , MyRecord
MyRecord.ID = 1003
MyRecord.Name = "Carl"
Put #FileNumber, , MyRecord
Close #FileNumber
Open pathname For Binary Access Read Lock Write As #FileNumber Len = Len(MyRecord)
Do Until EOF(FileNumber)
Get #FileNumber, , MyRecord
Debug.Print MyRecord.ID, MyRecord.Name
Loop
Close #FileNumber
End Sub
Sv:Spara och hämta i Visual Basic 6.0
Kul att du hade någon ide om hur det ska vara, jag testade det, men jag vet inte om jag fattat det när jag gjorde som följande. Datatypen är PersonData och fältet heter Person.
Variabler required får jag som svar när jag kör koden. Vad är det som jag missat?
Mvh /Jan
Private Sub CmdSpara_Click()
'Datatypen är PersonData (är deklarerad i en .bas fil).
'Public Person(1 To 500) As PersonData (är deklarerad i en .bas fil).
Dim FileNumber As Long
Dim inta As Integer
inta = 1
Const pathname = "text.dat"
FileNumber = FreeFile()
Open pathname For Binary Access Write Lock Write As #FileNumber Len = Len(Person)
For inta = 1 To intIndex
Person.Efternamn = Person(inta).Efternamn
Person.Fornamn = Person(inta).Fornamn
Person.Adress = Person(inta).Adress
Person.Postnummer = Person(inta).Postnummer
Person.Ort = Person(inta).Ort
Person.Telefon = Person(inta).Telefon
Person.Email = Person(inta).Email
Person.Yrke = Person(inta).Yrke
Person.Kommentar = Person(inta).Kommentar
Put #FileNumber, , Person
Close #FileNumber
Next inta
End SubSv: Spara och hämta i Visual Basic 6.0
Koden kan du förenkla till:
Private Sub CmdSpara_Click()
Dim inta As Long
Dim FileNumber As Long
Const pathname = "text.dat"
FileNumber = FreeFile()
Open pathname For Binary Access Write Lock Write As #FileNumber Len = Len(Person(1))
For inta = 1 To intIndex
Put #FileNumber, , Person(inta)
Next
Close #FileNumber
MsgBox "Posterna är nu sparade!", vbInfromation
End Sub
Eller:
Private Sub CmdSpara_Click()
Dim inta As Long
Dim FileNumber As Long
Dim P as PersonData
Const pathname = "text.dat"
FileNumber = FreeFile()
Open pathname For Binary Access Write Lock Write As #FileNumber Len = Len(P)
For inta = 1 To intIndex
P = Person(inta)
Put #FileNumber, , P
Next
Close #FileNumber
MsgBox "Posterna är nu sparade!", vbInfromation
End Sub
Du bör använda yrtest få globala variabler.
Låt bara Person var en global variabel. Om intIndex talar om hur många personer det finns bör du döpa om den till PersonCount eller PersonAntal för intIndex är inte så talande.
Sv:Spara och hämta i Visual Basic 6.0
Tack.
Det funkade jättebra med att spara till fil i det exemplet som du visar.
Hur kan det se ut när man hämtar från fil, det var också lite knepigt, har du något exempel på det också?
Ja visst, globala ska man undvika där har du helt rätt!
Mvh/JanSv: Spara och hämta i Visual Basic 6.0
Sv:Spara och hämta i Visual Basic 6.0
Tack för kommentaren.
Nu är det nära, men tyvärr så funkar inte det riktigt... trots din fina beskrivning, ser inte vad som felar.
Kan du se vad som jag gör fel?
/Mvh Jan
'******* Detta är koden *****
Dim inta As Long
'Dim FileNumber As Long
'Const pathname = "text.dat"
inta = 1
'FileNumber = FreeFile()
Open "text.dat" For Binary Access Read Lock Write As #2 Len = Len(Person(1))
Do Until EOF(2)
Get #2, , Person(inta)
Debug.Print Person(inta).Efternamn, Person(inta).Fornamn, Person(inta).Adress, Person(inta).Postnummer, Person(inta).Ort, Person(inta).Telefon, Person(inta).Email, Person(inta).Yrke, Person(inta).Kommentar
inta = inta + 1
Loop
Close #2Sv:Spara och hämta i Visual Basic 6.0
Jo, det sker aldrig någon inläsning från fil.
/Mvh JanSv: Spara och hämta i Visual Basic 6.0
Jag tror att det funkar nu, men det var lite trixit ett tag..
Tack.
Mvh
/Jan