Januar 26, 2021, 12:48:41

Neuigkeiten:

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


4 Suchfelder ein Listenfeld per Suchbutton filtern

Begonnen von katharina_eckert, November 12, 2020, 13:07:22

⏪ vorheriges - nächstes ⏩

katharina_eckert

Hallo ihr lieben,
Ich bin leider ein ANFÄNGER was Programmierung angeht und ich bedanke mich herzlich im voraus bei JEDEM der mir ein wenig dabei hilft.

Ich möchte ein Suchfilter für die 4 Felder erstellen. Das soll eine verknüpfte Suche sein, dh. wenn ich etwas in den 3 Feldern suche, dann soll er mir den Datensatz mit den gewünschten 3 Daten herraussuchen. Anhand eines Suchbuttons soll die Suche gestartet werden. Die Suche soll auch Leerzeichen erlauben, dh. wenn ich 99 17 eingebe oder 9917 ist beides gleich. Außerdem möchte ich wenn ich zum Beispiel in ein Suchfeld 99 eingebe, dann soll er mir alles was nach 99 kommt suchen und nicht 0,99.

Ich hab anhand der OR Funktion alle miteinander verbunden, aber es klappt irgendwie nicht. Manchmal sucht jedes Feld nur ihre eigenen Datensätze ab. Eine gemeinsame Suche findet bei mir gar nicht statt. Außerdem bricht manchmal die Suche ab. Könnte mir jemand bitte behilflich sein. Danke im voraus <3

Mein SQL:




Option Compare Database
Option Explicit


Private Sub ButtonReset_Click()
Me!txtPakethöhe_5 = " "
Me!txtBohrungøBlech = " "
Me!txtNutzahl = " "
Me!txtNutschlitz_im_Blech = " "
End Sub

Private Sub Filter_Click()
Me.Filter = "[Pakethöhe_5] Like '*" & Me!txtPakethöhe_5 & "*' OR [BohrungøBlech] Like '*" & Me!txtBohrungøBlech & "*' OR [Nutschlitz_im_Blech] Like '*" & Me!txtNutschlitz_im_Blech & "*' OR [Nutzahl] Like '*" & Me!txtNutzahl & "*' "

Me.FilterOn = True
End Sub




Private Sub txtBohrungøBlech_AfterUpdate()
ctlTabelle.RowSource = "SELECT ID, Kunde, Projektnummer, Seriennummer , Werkzeug_Typ, Werkzeugschlitz_Y, Maschinen_Typ, Blechschnitt, BohrungøBlech, Nutzahl, Blechdicke, Nutschlitz_im_Blech, Stator_Paket, BohrungøPaket, AußenøPaket, Nutschlitz_Paket, Pakethöhe_1, Pakethöhe_2, Pakethöhe_3, Pakethöhe_4, Pakethöhe_5, PH_Toleranz, Cover, Nutisolation, Material_Nutisolation, Dicke_der_Nutisolation, Abwicklung_der_Nutisolation, Kragenhöhe_der_Nutisolation, Überstand_der_Nutisolation, Zwischenschieber, Material_Zwischenschieber, Dicke_Zwischenschieber, Abwicklung_Zwischenschieber, Deckschieber, Material_Deckschieber, Dicke_Deckschieber, Abwicklung_Deckschieber, Wickelkopf, AußenøWickelkopf, InnenøWickelkopf, N_K_Seite, K_Seite, Bandage, Jede_Nut, Jede_2te_Nut, Doppelstich, Wickel_Schema_Kunde, Wickel_Schema_Intern, Datum_der_Erstellung, Datum_der_letzten_Änderung, Datum_der_Löschung FROM tbl_Statoren WHERE  [BohrungøBlech] LIKE '*" & txtBohrungøBlech.Text & "*'"
End Sub

Private Sub txtNutschlitz_im_Blech_AfterUpdate()
ctlTabelle.RowSource = "SELECT ID, Kunde, Projektnummer, Seriennummer , Werkzeug_Typ, Werkzeugschlitz_Y, Maschinen_Typ, Blechschnitt, BohrungøBlech, Nutzahl, Blechdicke, Nutschlitz_im_Blech, Stator_Paket, BohrungøPaket, AußenøPaket, Nutschlitz_Paket, Pakethöhe_1, Pakethöhe_2, Pakethöhe_3, Pakethöhe_4, Pakethöhe_5, PH_Toleranz, Cover, Nutisolation, Material_Nutisolation, Dicke_der_Nutisolation, Abwicklung_der_Nutisolation, Kragenhöhe_der_Nutisolation, Überstand_der_Nutisolation, Zwischenschieber, Material_Zwischenschieber, Dicke_Zwischenschieber, Abwicklung_Zwischenschieber, Deckschieber, Material_Deckschieber, Dicke_Deckschieber, Abwicklung_Deckschieber, Wickelkopf, AußenøWickelkopf, InnenøWickelkopf, N_K_Seite, K_Seite, Bandage, Jede_Nut, Jede_2te_Nut, Doppelstich, Wickel_Schema_Kunde, Wickel_Schema_Intern, Datum_der_Erstellung, Datum_der_letzten_Änderung, Datum_der_Löschung FROM tbl_Statoren WHERE  [Nutschlitz_im_Blech] LIKE '*" & txtNutschlitz_im_Blech.Text & "*'"
End Sub

Private Sub txtNutzahl_AfterUpdate()
ctlTabelle.RowSource = "SELECT ID, Kunde, Projektnummer, Seriennummer , Werkzeug_Typ, Werkzeugschlitz_Y, Maschinen_Typ, Blechschnitt, BohrungøBlech, Nutzahl, Blechdicke, Nutschlitz_im_Blech, Stator_Paket, BohrungøPaket, AußenøPaket, Nutschlitz_Paket, Pakethöhe_1, Pakethöhe_2, Pakethöhe_3, Pakethöhe_4, Pakethöhe_5, PH_Toleranz, Cover, Nutisolation, Material_Nutisolation, Dicke_der_Nutisolation, Abwicklung_der_Nutisolation, Kragenhöhe_der_Nutisolation, Überstand_der_Nutisolation, Zwischenschieber, Material_Zwischenschieber, Dicke_Zwischenschieber, Abwicklung_Zwischenschieber, Deckschieber, Material_Deckschieber, Dicke_Deckschieber, Abwicklung_Deckschieber, Wickelkopf, AußenøWickelkopf, InnenøWickelkopf, N_K_Seite, K_Seite, Bandage, Jede_Nut, Jede_2te_Nut, Doppelstich, Wickel_Schema_Kunde, Wickel_Schema_Intern, Datum_der_Erstellung, Datum_der_letzten_Änderung, Datum_der_Löschung FROM tbl_Statoren WHERE  [Nutzahl] LIKE '*" & txtNutzahl.Text & "*'"
End Sub

Private Sub txtPakethöhe_5_AfterUpdate()
ctlTabelle.RowSource = "SELECT ID, Kunde, Projektnummer, Seriennummer , Werkzeug_Typ, Werkzeugschlitz_Y, Maschinen_Typ, Blechschnitt, BohrungøBlech, Nutzahl, Blechdicke, Nutschlitz_im_Blech, Stator_Paket, BohrungøPaket, AußenøPaket, Nutschlitz_Paket, Pakethöhe_1, Pakethöhe_2, Pakethöhe_3, Pakethöhe_4, Pakethöhe_5, PH_Toleranz, Cover, Nutisolation, Material_Nutisolation, Dicke_der_Nutisolation, Abwicklung_der_Nutisolation, Kragenhöhe_der_Nutisolation, Überstand_der_Nutisolation, Zwischenschieber, Material_Zwischenschieber, Dicke_Zwischenschieber, Abwicklung_Zwischenschieber, Deckschieber, Material_Deckschieber, Dicke_Deckschieber, Abwicklung_Deckschieber, Wickelkopf, AußenøWickelkopf, InnenøWickelkopf, N_K_Seite, K_Seite, Bandage, Jede_Nut, Jede_2te_Nut, Doppelstich, Wickel_Schema_Kunde, Wickel_Schema_Intern, Datum_der_Erstellung, Datum_der_letzten_Änderung, Datum_der_Löschung FROM tbl_Statoren WHERE [Pakethöhe_5] LIKE '*" & txtPakethöhe_5.Text & "*'"
End Sub

DF6GL

November 12, 2020, 14:07:32 #1 Letzte Bearbeitung: November 12, 2020, 14:20:56 von DF6GL
Hallo,


entferne die Sonderzeichen  (ø) !

Ich befürchte, dass die Daten nicht normalisiert sind und Datentypen eher als lästig empfunden werden.

ZitatDie Suche soll auch Leerzeichen erlauben, dh. wenn ich 99 17 eingebe oder 9917 ist beides gleich

versteh ich nicht, wie Du das meinst.  Soll bei Eingabe von 9917 sowohl 9799 als auch 99 17 gefunden werden?

Dann müssen die Tabellendaten zunächst vom Leerzeichen "befreit" werden.
Ersetze dazu die 3 weiter unten stehenden IF-Bedingungen etwa durch
If not IsNull(Me!txtPakethöhe) Then strKrit = strKrit & " and Replace([Pakethöhe_5],' ','') Like '" & Me!txtPakethöhe & "*'"enstprechend.




Private Sub ButtonReset_Click()
  Me!txtPakethöhe_5 = Null    'Was sollten hier Leerzeichen?
  Me!txtBohrungBlech = Null
  Me!txtNutzahl = Null
  Me!txtNutschlitz_im_Blech = Null
End Sub

(Luftcode)

Private Sub Filter_Click()

Dim strKrit as String


If not IsNull(Me!txtPakethöhe) Then strKrit = strKrit & " and [Pakethöhe_5] Like '" & Me!txtPakethöhe & "*'"
If not IsNull(Me!txtBohrungBlech) Then strKrit = strKrit & " and [BohrungBlech] Like '" & Me!txtBohrungBlech & "*'"
If not IsNull(Me!txtNutschlitz_im_Blech) Then strKrit = strKrit & " and [Nutschlitz_im_Blech] Like '" & Me!txtNutschlitz_im_Blech & "*'"

If len(strKrit) > 0 Then
  strKrit = mid(strKrit,5)
  Me.Filter = strKrit
  Me.FilterOn = True
End If
End Sub


btw: Crossposting ist unerwünscht!!

katharina_eckert

Hallo DF6GL,
Ich bedanke mich erstmals bei dir. Ich hab deine Tipps beachtet und diese in meine Datenbank hinzugefügt, bzw. teilweise ersetzt. Aber das Hauptproblem lag bei mir, dass jedes Feld ihr eigenes Datensatz gesucht hat.

Aber ich möchte dass ich die 4 Felder zusammen verknüpfe anhand einer OR Funktion, sodass ich eine vereinfachte Suche erstellen kann.


Danke :)

MzKlMu

Hallo,
es ist keine gute Idee 2 Foren gleichzeitig zu beschäftigen. Auch für Dich nicht.
Jeder schreibt irgendwo irgendwas und keiner kennt die Zusammenhänge.
Es ist auch gemäß den Regeln unerwünscht, auch im anderen Forum.

https://www.ms-office-forum.net/forum/showthread.php?t=371072
Gruß
Klaus

katharina_eckert

Hi Klaus
Da hast du Recht. Jedoch wusste ich das leider nicht. Jetzt wo ich das weiß werde ich in Zukunft drauf aufpassen !
Ich arbeite zum ersten mal mit Forums. Nehmt es mir bitte nicht übel :/.

DF6GL

Hallo,


4 Felder zusammen verknüpfe anhand einer OR Funktion,
dann nimm hat "OR" anstelle "And"...


katharina_eckert

Hi DF6GL,

Stimmt das?
Private Sub Filter_Click()

Dim strKrit As String

If Not IsNull(Me!txtNutzahl) Then strKrit = strKrit & " OR [Nutzahl] Like '" & Me!txtNutzahl & "*'"
If Not IsNull(Me!txtPakethöhe_5) Then strKrit = strKrit & " OR [Pakethöhe_5] Like '" & Me!txtPakethöhe & "*'"
If Not IsNull(Me!txtBohrungøBlech) Then strKrit = strKrit & " OR [BohrungøBlech] Like '" & Me!txtBohrungøBlech & "*'"
If Not IsNull(Me!txtNutschlitz_im_Blech) Then strKrit = strKrit & " OR [Nutschlitz_im_Blech] Like '" & Me!txtNutschlitz_im_Blech & "*'"

If Len(strKrit) > 0 Then
  strKrit = Mid(strKrit, 5)
  Me.Filter = strKrit
  Me.FilterOn = True
End If
End Sub[code]


Oder Stimmt das hier


Private Sub Filter_Click()

Dim strKrit As String

If Not IsNull(Me!txtNutzahl) Then strKrit = strKrit & " and [Nutzahl] Like '" & Me!txtNutzahl & "*'"
& " OR If Not IsNull(Me!txtPakethöhe_5) Then strKrit = strKrit & " and [Pakethöhe_5] Like '" & Me!txtPakethöhe & "*'" "
& " OR If Not IsNull(Me!txtBohrungøBlech) Then strKrit = strKrit & " and [BohrungøBlech] Like '" & Me!txtBohrungøBlech & "*'" "
& " OR If Not IsNull(Me!txtNutschlitz_im_Blech) Then strKrit = strKrit & " and [Nutschlitz_im_Blech] Like '" & Me!txtNutschlitz_im_Blech & "*'" "

If Len(strKrit) > 0 Then
  strKrit = Mid(strKrit, 5)
  Me.Filter = strKrit
  Me.FilterOn = True
End If
End Sub[/code]


Ich danke dir im vorraus :)

DF6GL

Hallo,


ZitatStimmt das ... oder stimmt das hier?

ZitatIf Not IsNull(Me!txtNutzahl) Then strKrit = strKrit & " and [Nutzahl] Like '" & Me!txtNutzahl & "*'"
& " OR If Not IsNull(Me!txtPakethöhe_5) Then strKrit = strKrit & " and [Pakethöhe_5] Like '" & Me!txtPakethöhe & "*'" "
& " OR If Not IsNull(Me!txtBohrungøBlech) Then strKrit = strKrit & " and [BohrungøBlech] Like '" & Me!txtBohrungøBlech & "*'" "
& " OR If Not IsNull(Me!txtNutschlitz_im_Blech) Then strKrit = strKrit & " and [Nutschlitz_im_Blech] Like '" & Me!txtNutschlitz_im_Blech & "*'" "

Das ist syntaktisch und logisch Quatsch.

Ob die Bedingungs-Logik stimmt, kannst nur Du wissen.
Das Replace hast Du unter den Tisch fallen lassen.
Evtl. Syntax-Fehler meldet der VBA-Editor.


Zudem hast Du das Sonderzeichen nicht entfernt...(Ist möglicherweise hier nicht zwingend, aber trotzdem könnte es unerklärliche Fehlersituation heraufbeschwören.)