Hallo,
habe ein Problem mit einer Suche im Unterformular. In meinem Hauptformular habe ich 4 Textfelder in die ich Suchbegriffe eingeben kann und ich bekomme mein gewünschtes Ergebnis.
Allerdings ist mir gestern aufgefallen, dass das nicht stimmt. Das Listenfeld (Datensatzherkunft ist eine Querry) zeigt mir augenscheinlich am Anfang alle Datensätze an, allerdings nach der ersten Eingabe verschwinden bestimmte Datensätze.
Das Listenfeld hat 6 Spalten. die ersten 2 Spalten haben teilweise aber auch keine Daten enthalten und diese Datensätze in denen keine Daten enthalten sind machen mir bei der Eingabe Probleme. Sie verschwinden. Zur Info, nicht jeder Kunde gehört einem Verband oder Konzern an.
Bsp.:
Verband Konzern Kunde Ort
1 mali bali zorn hamburg
2 muru baku doro camelot
3 hier Verschwindet
4 maco polo Atlas Welt
So wenn ich jetzt nach Kunde filter: Eingabe: "h" ist mein komplettes Listenfeld leer. Lösche ich "h" sind wieder die Datensätze 1, 2 und 4 da. Datensatz 3 ist erst nach neuem Öffnen des Formulars wieder im Listenfeld vorhanden.
Mein Code lautet:
Private Sub Form_Load()
strVerband = ""
strKonzern = ""
strSuchbegriff = ""
strOrtsuche = ""
End Sub
Private Sub txtVerband_Change()
If Nz(Me!txtVerband.Text) <> 0 Then
strVerband = Me!txtVerband.Text
End If
Call FktLstKunde
End Sub
Private Sub txtKonzern_Change()
If Nz(Me!txtKonzern.Text) <> 0 Then
strKonzern = Me!txtKonzern.Text
End If
Call FktLstKunde
End Sub
Private Sub txtSuchbegriff_Change()
If Nz(Me!txtSuchbegriff.Text) <> 0 Then
strSuchbegriff = Me!txtSuchbegriff.Text
End If
Call FktLstKunde
End Sub
Private Sub txtOrtsuche_Change()
If Nz(Me!txtOrtSuche.Text) <> 0 Then
strOrtsuche = Me!txtOrtSuche.Text
End If
Call FktLstKunde
End Sub
Private Function FktLstKunde()
Me!lstKunden.RowSource = "Select *" & _
"FROM qry_Sys_Kundensuche " & _
"WHERE Verban like '" & strVerband & "*' and Konzer like '" & strKonzern & "*' " _
& "and Name1 LIKE '" & strSuchbegriff & "*' and Ort like '" & strOrtsuche & "*'"
Me!lstKunden.Requery
End Function
Danke schon jetzt für eure Tipps.
Grüße
Tom
Nachtrag:
Wenn ich beim Datensatz 3 z.B. Null Null in die leeren Felder eintrage, funktioniert das. Aber warum funktioniert es nicht wenn die Felder leer sind?!
Hallo,
die Nz-Funktion greift logisch nicht bei der Text-Eigenschaft eines Steuerelementes. Diese Eigenschaft hat den Datentyp String . Besser:
If Len(Me!txtVerband.Text) <> 0 Then
wobei diese IF-Bedingungen eh überflüssig sind.
Hallo Franz,
Zitatdie Nz-Funktion greift logisch nicht bei der Text-Eigenschaft eines Steuerelementes
Ich glaube doch. Man muss nur dem FalsePart einen Leerstring zuweisen:
Nz(Me!txtVerband.Text,"")und darauf abfragen:
If Nz(Me!txtVerband.Text,"") = "" ThenObwohl ich es meistens auch per Len mache; -
wegen NULL aber so:
If Len(Control & "") > 0 Thengruss ekkehard
Hallo,
nun, ich habe mich nicht auf den Vergleich mit 0 oder mit "" bezogen, sondern auf das Greifen der NZ-Funktion auf die Text-Eigenschaft des Steuerelementes.
If Nz(Me!txtVerband.Text) <> 0 Thenfunktioniert aus zwei Gründen nicht richtig:
die NZ-Funktion kann
Me!txtVerband.Text nicht "bearbeiten" weil kein Variant.
die NZ-Funktion liefert aus o. g. Grund keinen Ersatzwert, auch wenn einer als 2. Parameter angegeben ist, sondern den Wert des Parameters selber, hier also einen NullString (""). Insofern würde z. B.
If Nz(Me!txtVerband.Text,0) <> 0 Then nicht (erwartungsgemäß) funktionieren.
If Nz(Me!txtVerband.Text,"") = "" Then ist hier im Endeffekt identisch mit
If Me!txtVerband.Text = "" Then Aus dem Objektkatalog (Klasse: Textbox, Element: Text):
Zitat
Property Text As String
Element von Access.TextBox
Hallo Franz,
Hallo Ekkehard,
Aber die Lösung des Problems, warum immer die Datensätze mit den "leeren" Feldern verschwinden ist das ja nicht?!
Gruß
Tom
Hallo,
hast Du den Code wie vorgeschlagen schon geändert?
Das Problem sollte mit diesem Rowsource-SQL-String und der Änderung nicht auftreten...
Ansonsten lad die DB komprimiert/repariert und gezippt hie hoch...
Hallo Franz,
Danke für Deine Erläuterungen bezügl. Nz.
gruss ekkehard
Hallo Franz,
werde ich morgen gleich probieren. Danke mal so weit.
Noch einen schönen abend...
Tom
Hallo Franz,
funktioniert einwandfrei! Vielen Dank
Noch eine Frage: Wie funktioniert es den auch ohne If-Clause? Möchte meinen Code natürlich verbessern.
Und da ich ja nur unter einer erfüllten Bedingung meine String Datentypen mit Daten füllen möchte, weiß ich gearde nicht wie das ohne eine If Anweisung gehen soll...
Zitat von: DF6GL am April 05, 2012, 19:06:57
Hallo,
die Nz-Funktion greift logisch nicht bei der Text-Eigenschaft eines Steuerelementes. Diese Eigenschaft hat den Datentyp String . Besser:
If Len(Me!txtVerband.Text) <> 0 Then
wobei diese IF-Bedingungen eh überflüssig sind.
Grüße
Tom
Hallo,
verstehe die Frage nicht ganz...
Der Code könnte so vereinfacht werden:
Option Explicit
Private strVerband As String, strKonzern As String, strSuchbegriff As String, strOrtsuche As String
Private Sub Form_Load()
strVerband = ""
strKonzern = ""
strSuchbegriff = ""
strOrtsuche = ""
End Sub
Private Sub txtVerband_Change()
Call FktLstKunde
End Sub
Private Sub txtKonzern_Change()
Call FktLstKunde
End Sub
Private Sub txtSuchbegriff_Change()
Call FktLstKunde
End Sub
Private Sub txtOrtsuche_Change()
Call FktLstKunde
End Sub
Private Function FktLstKunde()
Me!lstKunden.RowSource = "Select *" & _
"FROM qry_Sys_Kundensuche " & _
"WHERE Verban like '" & Me!txtVerband & "*' and Konzer like '" & Me!txtKonzern & "*' " _
& "and Name1 LIKE '" & Me!txtSuchbegriff & "*' and Ort like '" & Me!txtOrtsuche & "*'"
Me!lstKunden.Requery 'vermutlich auch überflüssig
End Function
Hallo Franz,
hab das auch so schon ausprobiert. Allerdings funktioniert das nicht.
Alle Me!txt... (ohne .Text am ende) lasse ich im Direktbereich ausgeben. Sie sind immer mit dem Wert "Null" belegt.
Die Querry wird daher auch nur mit Null Datensätzen bestückt und die Ergebnisse nicht gefiltert.
Nehme ich jetzt in die Querry alle Me!txt....Text (.Text am Ende) bekomme ich die Fehlermeldung "Laufzeitfehler 2185" Sie können auf die Eigenschaft oder Methode eines Steuerelement nur verweisen, wenn das Steuerelement den Fokus hat.
Ich bräuchte ja wenn aber die Text Felder, damit ich die Querry mit den entsprechenden Daten füttern kann.
Gruß
Thomas
Hallo,
ja, Du hast Recht, habe die Geschichte mit dem Change-Ereignis und der Text-Eigenschaft nicht mehr "bedacht" ....
Insforn mußt Du Zuweisung an die Variablen weiter verwenden, diese If-Bedingungen sind aber weiterhin überflüssig.