Hallo zusammen!
Ich habe ein Problem und bisher leider keine Idee, was ich falsch mache.
Mit einem Programm möchte ich eine Mitgliederdatenbank führen. Dazu möchte ich zu Programmbegin die Mitgliederdaten aus einer externen Datei (Data.frb) laden und zu Programmende wieder abspeichern.
Dazu habe ich in einem anderen Forum Funktionen gefunden, welche die im Namespace Microsoft.VisualBasic befindlichen Funktionen Fileopen, Fileput, Fileget ... verwenden. Meine Mitgliederdaten möchte ich in einem benutzerdefinierten Typ zur Laufzeit speichern. Dieser ist sehr komplex und besteht auch in sich aus benutzerdefinierten Typen (meist in arrays):
Public Structure Bundesbruder_Dat
Dim ID As Integer
Dim Anrede As String
Dim Name As String
Dim GebName As String
Dim Vorname As String
Dim GebDat As Date
Dim GebOrt As String
Dim Lebenswerk() As String
...
End Structure Meine Speichervariable ist global:
Public Bundesbrüder() As Bundesbruder_Dat[/Code]
Hier der Speicheraufruf, der funktioniert:
' Funktion um das Bundesbrüder Array in Datei zu speichern
<pre><code> Public Sub SaveBundesbrüder(ByVal vArray As Object)
Dim F As Integer
Dim nCount As Long
' Falls Datei vorhanden, zunächst löschen
If Dir$(sFile) <> "" Then Kill(sFile)
' Datei im Binary-Mode öffnen
F = FreeFile()
FileOpen(F, sFile, OpenMode.Binary)
' Anzahl Elemente speichern
nCount = UBound(vArray)
FilePut(F, nCount)
' Array-Elemente speichern
FilePutObject(F, vArray)
FileClose(F)
End Sub Hier der Code zum Laden der Daten(wird mit einem Menüpunkt ausgelöst), der mein Problem erzeugt (Programmzeile habe ich mit * markiert:
Public Sub ReadBundesbrüder()
Dim F As Integer
Dim nCount As Long
' Datei im BinaryMode öffnen
If Len(Dir$(sFile)) > 0 Then
F = FreeFile()
FileOpen(F, sFile, OpenMode.Binary)
' Anzahl Elemente lesen
FileGet(F, nCount)
' Array dimensionieren und einlesen
ReDim Bundesbrüder(nCount)
FileGetObject(F, Bundesbrüder)*
FileClose(F)
End If
End Sub Und hier der Funktionsaufruf:
Private Sub DatensatzLadenToolStripMenuItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) Handles _
DatensatzLadenToolStripMenuItem.Click
ReDim Bundesbrüder(0)
Call Funktionen.ReadBundesbrüder()
End Sub Und zwar erhalte ich zur Laufzeit folgenden Fehler:
"Die Variable verwendet einen Automatisierungstyp, der von Visual Basic nicht unterstützt wird."
Liegt es daran, daß evtl. mein Typ zu komplex ist? Der Code, den ich gefunden habe, verwendet eine einfache Array. Aber eigentlich sollte das ja kein Problem sein. Ich habe auch versucht die Array, die ich speichern will zuerst in einer Variable vom Typ object zwischenzuspeichern und beim Laden in eine Variable vom Typ object zu laden. Funktioniert aber leider auch nicht (gleiche Fehlermeldung!)
Wie könnte ich das Abspeichern denn sonst alternativ realisieren? Ich bin "Programmieramateur" und habe mir VB selbst gelernt (Habe nur ADA gelernt). Vielen Dank im Voraus!!! |