PDA

Vollständige Version anzeigen : Suchen in 2 Schritten


miko.graf
22.01.2008, 12:20
Access 2000 –DB soll auf Access 2007 konvertierbar sein

Problem: Viele Kunden ganz schnell löschen mit Suchen in zwei Schritten

Ich habe die CreaKombi97 von Anette Becker als Vorlage und es klappt immer noch nicht.
Kann mir bitte jemand helfen?

Tabelle = Kunden
Formular = frmKundensuche, Datengrundlage Tabelle Kunden
Feld KundenNr = Textfeld
erstes Suchfeld = cmb_Kundensuche
Erster Schritt:
Name eingeben und alle mit diesem Namen erscheinen im Endlosformular, Detailbereich.
Ergebnis: eingegebener Name existiert nur einmal, also kann ich ihn in der Liste sehen und sofort löschen.
Zweiter Schritt:
Sind mehrere Kunden mit demselben Namen vorhanden, möchte ich im zweiten Suchfeld die PLZ wählen.
zweites Suchfeld = cmb_Plz
Ergebnis: Nur die Schmids mit der im Feld cmb_PLZ ausgewählten PLZ sollen angezeigt werden.

Und so sieht mein Code aus. (Nach hundert Variationen, die alle nicht funktionierten).

Private Sub Form_Open(Cancel As Integer)
Me!cmb_Kundensuche.SetFocus
Me.cmb_Kundensuche = ""
'Me.cmb_PLZ = ""
End Sub

Private Sub cmb_Kundensuche_AfterUpdate()
On Error GoTo myError

Me!cmb_PLZ.Requery ' Datenherkunft aus Kombifeld "PLZ" neu einlesen
Me.RecordSource = " SELECT Kunden.*, Kunden.KundenNr " _
& " FROM Kunden " _
& " WHERE (((Kunden.KundenNr)=[forms]![frmKundensuche].[cmb_Kundensuche]));"

Me!cmb_PLZ.SetFocus
Me!cmb_PLZ.Dropdown

myErrExit:
Exit Sub

myError:
MsgBox Err.Number & " " & Err.Description
Resume myErrExit
End Sub

Private Sub cmb_PLZ_AfterUpdate()
On Error GoTo myError

' Datenherkunft für das Formular neu bestimmen
Me.RecordSource = "SELECT * FROM Kunden WHERE ([KundenNr] = Forms![frmKundensuche]![cmb_Kundensuche])"

myErrExit:
Exit Sub

myError:
MsgBox Err.Number & " " & Err.Description
Resume myErrExit
End Sub

Auch jetzt: Nach Eingabe des Namens erscheint keine Auflistung der Kunden. Erst nach Wahl der PLZ erscheint diese und bleibt.
Danke an alle, die sich darum bemühen.
miko.graf
:upps: :(

hcscherzer
22.01.2008, 13:35
Moin,
ein paar Anmerkungen:
Private Sub cmb_Kundensuche_AfterUpdate()

' zuerst prüfen, ob etwas ausgewählt wurde:

if isnull(me!cmb_kundensuche) then
msgbox "Etwas auswählen!"
me!cmb_kundensuche.setfocus
exit sub
endif

' die Datenquelle für cmb_PLZ muss alle PLZ aller Kunden mit dem Namen finden

me!cmb_plz.rowsource = "select KPLZ from kunden where kname = '" _
& me![cmb_kundensuche].column(1) & "';"
Me!cmb_PLZ.Requery ' Datenherkunft aus Kombifeld "PLZ" neu einlesen

' hier genauso: die Kundennummer bringt nur den einen Satz
'aber es sollen doch alle mit dem gewählten Namen angezeigt werden:

Me.RecordSource = "SELECT Kunden.* FROM Kunden " _
& " WHERE Kunden.KName = '" & Me![cmb_Kundensuche].column(1) & "';"
me.requery
Me!cmb_PLZ.SetFocus
Me!cmb_PLZ.Dropdown
End SubUnd in der anderen Prozedur muss es dann lauten:
Private Sub cmb_PLZ_AfterUpdate()
' Datenherkunft für das Formular neu bestimmen
Me.RecordSource = "SELECT * FROM Kunden WHERE [KName] = '" & _
Me![cmb_Kundensuche].column(1) & "' and KPLZ = " & me!cmb_PLZ &";"
End Sub

miko.graf
22.01.2008, 15:05
Vielen Dank, Hans-Chrisitan,
natürlich, ich habe wie gebannt auf die KundenNr geschaut, aber ich muß die Suche an dem NNamen festmachen. Heute abend will ich es gleich prüfen. Danke für die Anregung und natürlich für den Code.
miko.graf
:)

hcscherzer
22.01.2008, 16:26
Moin,
noch eins: wenn Du die ComboBox mit den Namen nur mit diesen versorgst (also keine Nr in der ersten ausgeblendeten Spalte) dann kannst Du auch das 'Column(0)' weglassen und direkt auf Me!cmb_Kundensuche referenzieren.

miko.graf
22.01.2008, 21:58
Das funkt noch nicht!
Bei nachfolgendem Code verschwindet nach der Aktualisierung des Feldes der Detailbereich und die Datengrundlage für das Formular lautet
SELECT Kunden.* FROM Kunden WHERE Kunden.Nachname = '';
Eine Auflistung der gewählten Namen einschl. PLZ ist im cbm_PLZ sichtbar, aber ich kann nichts auswählen

Private Sub cmb_Kundensuche_AfterUpdate()
If IsNull(Me!cmb_Kundensuche) Then
MsgBox "Geben Sie den Nachnamen des gesuchten Kunden ein!"
Me!cmb_Kundensuche.SetFocus
End If

' Datenherkunft aus Kombifeld "PLZ" neu einlesen
Me!cmb_PLZ.Requery


Me.RecordSource = " SELECT Kunden.* FROM Kunden" _
& " WHERE Kunden.Nachname = '" & Me![cmb_Kundensuche].Column(1) & "';"
Me.Requery
Me!cmb_PLZ.SetFocus
Me!cmb_PLZ.Dropdown
End Sub

Private Sub cmb_PLZ_AfterUpdate()


' Datenherkunft für das Formular neu bestimmen

Me.RecordSource = "SELECT * FROM Kunden WHERE [Nachname] = '" & _
Me![cmb_Kundensuche] & "' and [PLZ] = " & Me!cmb_PLZ & ";"


Exit Sub



Kann mir dabei nochmals jemand helfen?
Danke
Miko