PDA

Vollständige Version anzeigen : Listefeld mit Mehrfachauswahl als Eingabefeld


joyce
08.07.2001, 18:36
Hallo Ihr,
ich wollte ein Formular erstellen, wo ich mit zwei Listenfelder mit Mehrfachauswahl Eingaben machen kann. Konkret: ich wollte meine Aufsätze und Bücher katalogisieren. Jetzt gibt es Bücher mit mehreren Autoren und die Aufsätze gehören sowohl thematisch in die Kategorie a, als auch b, c.... Ich habe eine Werteliste erstellt für das Feld Kategorie. Wenn ich dann aber auswähle, wird entweder gar nichts oder nur ein Element aufgenommen. Wer weiß da weiter? *verzweifel*

Kurt aus Kienitz
09.07.2001, 10:03
Hallo,

Da hast Du dir aber was ausgesucht :)

Sieh Dir mal folgenden Code an:

Public Sub LbFromTable(LbCtrl As Control, stTableName As String, stColName As String, stBedingung As String)
'
Dim rs As Recordset
Dim stSQL As String
Dim i As Integer

' Listboxeinträge deselektieren
For i = 0 To LbCtrl.ListCount - 1
LbCtrl.Selected(i) = False
Next i

' SQL-Statement für die Ermittlung der gesetzen Einträge ermitteln
stSQL = "SELECT * FROM " & stTableName & " WHERE " & stBedingung & ";"
Set rs = CurrentDb.OpenRecordset(stSQL)

If rs.RecordCount > 0 Then
rs.MoveFirst
'
' Schleife über die Ergebnismenge
'
While Not rs.EOF

For i = 0 To LbCtrl.ListCount - 1
'
' Wert aus Ergebnismenge in Listbox suchen
'
If Val(LbCtrl.Column(0, i)) = rs(stColName) Then
'
' Wert gefunden, SELECTED-Kennzeichen setzen
'
LbCtrl.Selected(i) = True
End If
Next i
rs.MoveNext
Wend

End If
rs.Close
Set rs = Nothing
End Sub

Public Sub LbToTable(LbCtrl As Control, stTableName As String, stColName As String, _
stDefCol As String, stDefValue As String, stDelBedingung As String)

Dim i As Integer
Dim stSQL As String

'
' zuerst alle "alten" Einträge löschen
'
stSQL = "DELETE FROM " & stTableName & " WHERE " & stDelBedingung & ";"
CurrentDb.Execute stSQL

'
' Schleife über alle selektierten Einträge der Listbox
'
For i = 0 To LbCtrl.ListCount - 1
If LbCtrl.Selected(i) Then

'
' Die selektierten Einträge neu in die Tabelle schreiben
'
stSQL = "INSERT INTO " & stTableName & "(" & stDefCol & "," & stColName & _
") VALUES ( " & stDefValue & "," & Str$(LbCtrl.Column(0, i)) & ");"

CurrentDb.Execute stSQL

End If
Next i

End Sub

Das sind zwei Prozeduren, mit denen ich dieses Thema abhandle.

Bei dem Ereignis Beim Anzeigen des Formulares rufe ich die Prozedur LbFromTable auf.

LbFromTable Me.LbAutoren, "Rel_AufsaetzeAutoren", "AtID", "AfID = " & Me.AfID

Me.LbAutoren ist die Listbox.
Rel_AufsaetzeAutoren" ist die Tabelle in der ich die n:m Beziehung von Aufsätzen und Autoren abbilde.
AtID ist die AutorenID aus der Relation.
AfID ist die AufsatzID aus der Ralation.

In der Listbox muß die 1. Spalte die AutorenID sein.

HTH

P.S.
Bei Bedarf schicke ich Dir meine Beispeil-DB.