Ok,
dann füg mal in eine Form folgende Controls ein:
- 1 Listbox (List1)
- 5 Textboxen (Text1 - Text5)
Damit das Bsp. funktionier musst Du noch den vollständigen Dateinamen der
Datenbank und den Namen der Tabelle mit den Buchdaten ändern.
(bei Konstanten DatenbankName und TabellenName)
Anschließend folgenden Code in das Form-Modul einfügen:Option Explicit
' vollständiger Datenbank-Dateiname
Const DatenbankName = "C:\Daten\Bibliothek.mdb"
' Namer der Tabelle, die die Daten enthält
Const TabellenName = "Buecher"
' Index oder Name des Field (Spalte),
' dessen Wert in der Listbox erscheinen soll
Const HauptFeldIndex = 0
' Index oder Namen der übrigen Fields (Spalte),
' deren Werte in den Textboxen erscheinen sollen
Const FeldIndexTB1 = 1
Const FeldIndexTB2 = 2
Const FeldIndexTB3 = 3
Const FeldIndexTB4 = 4
Const FeldIndexTB5 = 5
' automatisches Füllen der Listbox bei Laden der Form
Private Sub Form_Load()
Dim DB As Database, Recdat As Recordset, Text As String
' Textboxen löschen
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
' Listbox löschen
List1.Clear
On Error Resume Next
' Datenbank öffnen
Set DB = DBEngine.OpenDatabase(DatenbankName)
' Bei Fehlern --> Meldung
If Error <> "" Then
MsgBox "Nix mit DB --> FEHLT!"
Else
' Tabelle öffnen
Set Recdat = DB.TableDefs(TabellenName).OpenRecordset
' Bei Fehlern --> Meldung
If Error <> "" Then
MsgBox "DB zwar da, aber Tabelle fehlt!"
Else
' zum ersten Datensatz springen
Recdat.MoveFirst
On Error Resume Next
' Datensätze solange durchlaufen bis Fehler auftritt
' (z.B. Ende erreicht)
While Error = ""
' Text aus der Hauptspalte auslesen
Text = Recdat.Fields(HauptFeldIndex)
If Error = "" Then
' wenn kein Fehelr aufgetreten ist, diesen Wert in
' die Liste einfügen
List1.AddItem Text
' zum nächsten Datensatz springen
Recdat.MoveNext
End If
Wend
' bei jedem Fehler (außer bei "Ende erreicht")
' Fehlermeldung zeigen
' #3021 = Datensatzzeiger ist hinter dem letzten Datensatz
If Err.Number <> 3021 Then MsgBox Error, , Err.Number
' Tabelle schließen
Recdat.Close
End If
' Datenbank schließen
DB.Close
End If
' Verweise aufheben (Speicher freigeben)
Set Recdat = Nothing
Set DB = Nothing
' wenn möglich, ersten listeneintrag markieren
If List1.ListCount > 0 Then List1.ListIndex = 0
End Sub
Private Sub List1_Click()
Dim DB As Database, Recdat As Recordset, D As String
On Error Resume Next
' Daten nur suchen, wenn ein Listeneintrag markiert wurde
If List1.ListIndex < 0 Then Exit Sub
' Textboxen löschen
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
' Datenbank öffnen
Set DB = DBEngine.OpenDatabase(DatenbankName)
' Bei Fehlern --> Meldung
If Error <> "" Then
MsgBox "Nix mit DB --> FEHLT!"
Else
' Tabelle öffnen
Set Recdat = DB.TableDefs(TabellenName).OpenRecordset
' Bei Fehlern --> Meldung
If Error <> "" Then
MsgBox "DB zwar da, aber Tabelle fehlt!"
Else
' zum ersten Datensatz springen
Recdat.MoveFirst
On Error Resume Next
' alle Datensätze durchlaufen, bis Fehler auftritt
Do
' Wert des aktuellen Datensatzes mit dem des markierten Eintrages
' vergleichen, wenns übereinstimmt, Textboxen füllen und beenden
If Recdat.Fields(HauptFeldIndex) = List1.List(List1.ListIndex) Then
Text1.Text = Recdat.Fields(FeldIndexTB1)
Text2.Text = Recdat.Fields(FeldIndexTB2)
Text3.Text = Recdat.Fields(FeldIndexTB3)
Text4.Text = Recdat.Fields(FeldIndexTB4)
Text5.Text = Recdat.Fields(FeldIndexTB5)
' Schleife beenden
Exit Do
End If
' zum nächsten Datensatz
Recdat.MoveNext
Loop Until Error <> ""
' bei jedem Fehler (außer bei "Ende erreicht" / "Feld leer")
' Fehlermeldung zeigen
' #3021 = Datensatzzeiger ist hinter dem letzten Datensatz
' #94 = Datensatz enthält eine leere Zelle
If Err.Number <> 3021 And Err.Number <> 94 And Error <> "" Then _
MsgBox Error, , Err.Number
' Tabelle schließen
Recdat.Close
End If
' Datenbank schließen
DB.Close
End If
' Verweise aufheben (Speicher freigeben)
Set Recdat = Nothing
Set DB = Nothing
End Sub Viel Spass,
R@lf |