Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Suche im Unterformular

Begonnen von TomTom2903, April 05, 2012, 11:19:17

⏪ vorheriges - nächstes ⏩

TomTom2903

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?!

DF6GL

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.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

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,"") = "" Then
Obwohl ich es meistens auch per Len mache; -
wegen NULL aber so:
If Len(Control & "") > 0 Then
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

#3
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 Then
funktioniert 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
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

TomTom2903

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

DF6GL

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...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

Hallo Franz,
Danke für Deine Erläuterungen bezügl. Nz.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

TomTom2903

Hallo Franz,
werde ich morgen gleich probieren. Danke mal so weit.
Noch einen schönen abend...
Tom

TomTom2903

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

DF6GL

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

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

TomTom2903

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

DF6GL

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.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access