Hallo zusammen,
zuerst ein herzliches Dankeschön an Peacemaker und AndySafe
Und so sieht das aus was ich die ganze Zeit gesucht hab, naja oder fast. Habe in der Datenbank die Kombinationsfelder entfernt und nur mit Text (also String) weitergearbeitet).
Die Tabelle Eigentümer Spalte Anrede wird zuerst mit dem vorhandenen Text eingelesen und in der Combo1 reingeschrieben. Bei einem Klick auf Combo1 ist auch der ausgelesene Text markiert (z. B. Familie, bei mir befindet er sich in der 3. Zeile der ComboBox.
Das ist der Code (hat aber noch Verbesserungsbedarf)
Private Sub Form_Load()
'Datenbank connect
Set ADOcn = New ADODB.Connection
' Setzen eines neuen Recordsets
Set ADOrs = New ADODB.Recordset
Set rstEigentuemer = New ADODB.Recordset
Set rstAnrede = New ADODB.Recordset
' Setzen einer neuen BindingCollection
Set oBC = New BindingCollection
Dim DBPfad As String
' Für SQL-Abfrage
Dim sSqlEigentuemer As String
Dim sSqlAnrede As String
' Datenbankpfad
DBPfad = App.Path & "\Haus.mdb"
' Provider auswählen + Datenbankpfad
With ADOcn
.CursorLocation = adUseClient
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
DBPfad
.Open
End With
'Recordset für die Tabelle Eigentümer
With ADOrs
.ActiveConnection = ADOcn
.Source = "Eigentuemer"
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open
End With
' BindingCollection der Textboxen
With oBC
Set .DataSource = ADOrs
.Add text1(0), "text", "Vorname"
.Add text1(1), "text", "Nachname"
.Add text1(2), "text", "Strasse"
.Add text1(3), "text", "Haus-Nr"
.Add text1(4), "text", "PLZ"
.Add text1(5), "text", "Ort"
' und hier die anderen Felder, wenn noch welche vorhanden
End With
' Anrede aus Tabelle Eigentuemer auslesen
sSqlEigentuemer = "SELECT Anrede FROM Eigentuemer"
With rstEigentuemer
' Recordset-Objekt vom Typ sSqlEigentuemer öffnen.
.Open Source:=sSqlEigentuemer, _
ActiveConnection:=ADOcn, _
CursorType:=adOpenKeyset, _
LockType:=adLockOptimistic, _
Options:=adCmdText
' Kombinationsfeld: 1. Zeile wird mit Anredetext gefüttert (Tabelle
' Eigentümer) bevor draufgeklickt wird
Combo1.Text = rstEigentuemer.Fields(0)
End With
' Spalte Anrede aus Tabelle Anrede
sSqlAnrede = "SELECT Anrede FROM Anrede"
With rstAnrede
' Recordset-Objekt vom Typ sSqlAnrede öffnen.
.Open Source:=sSqlAnrede, _
ActiveConnection:=ADOcn, _
CursorType:=adOpenKeyset, _
LockType:=adLockOptimistic, _
Options:=adCmdText
' Schleife über alle Datensätze
Do Until .EOF
'1-spaltige Combobox füllen
With Combo1
' Eintrag hinzufügen
.AddItem rstAnrede.Fields(0).Value
End With
' Ab zum nächsten Datensatz
.MoveNext
Loop
End With
' Speicher freigeben
If Not rstAnrede Is Nothing Then rstAnrede.Close: Set rstAnrede = Nothing
If Not rstEigentuemer Is Nothing Then rstEigentuemer.Close: Set _
rstEigentuemer = Nothing
End Sub Muss noch rausfinden wie ich dieses Formular als schreibgeschützt öffnen kann und bei einem klick auf "Bearbeiten" sich ein anderes Formular öffnet und erst da kann der Benutzer alles ändern. Einen neuen Datensatz hinfügen muss ich auch noch, aber erst eins nach dem anderem.
Speichern gehört ja auch noch dazu. Wie sende ich diese Informationen an den veränderten Datensatz weiter? => Steht einiges glücklicherweise hier im Workshop oder Forum
Da habe ich noch einiges vor mir.
Danke nochmal und weiter so vb@archiv
Gruss Agnes
Gruss
Agnes
------------------------------------
Wenn wir heut gemeinsam starten
und wir alle viel erwarten,
denken wir an jedem Tag daran,
dass man es nur schaffen kann,
wenn wir fest zusammen stehen
und den Weg gemeinsam gehen. |