Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Suche mit Kombifeld

Begonnen von sagrael, Juni 18, 2018, 16:55:53

⏪ vorheriges - nächstes ⏩

sagrael

Hallo ,vielleicht kann mir jemand helfen,in meine DB habe ich einen Endlosformular und  4 Kombifelder für die schnell suche.Es sollen aus dem Formular Daten herausgefiltert werden ,zuerst Werte aus erstem Kombi dann sollen die herausgesuchte Daten nach und nach durch andere Kombi Felder herausgefiltert werden.Alle Kombi Felder funktionieren aber das Problem ist wenn ich 2 ,3 und 4 Kombi Feld benutze werden die Daten erneut neu aus dem komplettem Endlosformular herausgesucht und nicht aus der ersten Kombi Feld suche.
strText = Me.cbaHalle.Value
strsearch = "SELECT * from tblMTG_komplett where ((Halle like ""*" & strText & "*""))"
Me.RecordSource = strsearch
Me.cbaHalle.Requery
'Me.cbaHalle.RowSource
DoCmd.SetOrderBy "NameMTG" 'geordnet aufsteigend"
SetOrderBy = True


Private Sub cboWindows_AfterUpdate() 'combo
Dim tblMTGsuche As String
Dim strText As String

strText = Me.cboWindows.Value
strsearch = "SELECT * from tblMTG_komplett where ((Betriebssystem like ""*" & strText & "*""))"
Me.RecordSource = strsearch
Me.cboWindows.Requery
DoCmd.SetOrderBy "NameMTG" 'geordnet aufsteigend
SetOrderBy = True
Me!cbaHalle = Null
Me!cboStatus = Null


Private Sub cmbHersteller_AfterUpdate() 'combo
Dim tblMTGsuche As String
Dim strText As String

strText = Me.cmbHersteller.Value
strsearch = "SELECT * from tblMTG_komplett where ((Hersteller like ""*" & strText & "*""))"
Me.RecordSource = strsearch
Me.cmbHersteller.Requery
DoCmd.SetOrderBy "NameMTG" 'geordnet aufsteigend
SetOrderBy = True
Me!cboWindows = Null
Me!cbaHalle = Null
Me!cboStatus = Null

Private Sub cbaHalle_AfterUpdate() 'combo
Dim tblMTGsuche As String
Dim strText As String



Private Sub cboStatus_AfterUpdate() 'combo
Dim tblMTGsuche As String
Dim strText As String
strText = Me.cboStatus.Value
strsearch = "SELECT * from tblMTG_komplett where ((Status like ""*" & strText & "*""))"
Me.RecordSource = strsearch
Me.cboStatus.Requery
DoCmd.SetOrderBy "NameMTG" 'geordnet aufsteigend
SetOrderBy = True

Erste Feld(Halle), zweite Feld (Betriebssystem), dritter (Hersteller) und vierte (Status).Leider komme ich nicht weiter ,könnte mir vielleicht jemand helfen wie ich die vorherigen Filter einschließen kann ,VBA ist zur zeit noch Schwarze Magie für mich.Danke

DF6GL

Hallo,
wenn das genau nach deiner Beschreibung funktionieren soll und die Felder (Daten) nicht voneinander abhängig sind, dann sollte die Filter-Prozedur mit einem Button ausgelöst werden, in der alle Kombifeld-Werte in der Where-Condition zusammengefasst sind. 

.... where Betriebssystem like '*" & Me!cbaHalle & "*'   and Betriebssystem like '*" & Me!cbaBetriebssystem & "*' and Hersteller like...................................



Ich zweifle hier aber stark am korrekten Tabellen-Aufbau und vermisse die  Umsetzung der Normalisierungsregeln. 


Wenn die Daten voneinander abhängig und normalisiert sind, dann hilft
http://www.donkarl.com/?FAQ4.36
weiter.

Beaker s.a.

Hallo Franz,
Bei der ersten Lösung würde ich evtl. Fehler wegen NULL-Werten
erwarten. Die FAQ hilft nur bedingt bzw. hat er die, nehme ich an,
sogar schon umgesetzt.
Ich würde auch den Button zum Auslösen vorschlagen, in der
Ereignisprozedur den Filter aber Kombi für Kombi zusammensetzten.
Wobei ich die Kombis vorher nummerieren würde (Kombi1, Kombi2, usw.)
Luftcode:

Private Sub btnFiltern_OnClick()

    Dim strF As String
    Dim z As Integer

    For z = 1 To 4
        If Not IsNull(Me.Controls("Kombi" & z)) Then
            strF = strF & " AND TabellenFeld = " & Me.Controls("Kombi" & z)
        End If
    Next z
    '1. AND abschneiden
    strF = Mid(strF, 7)
    Me.Filter = strF
    Me.FilterOn = True

End Sub


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)

Beaker s.a.

und übrigens, noch was ...
LIKE macht bei richtig eingerichteten Kombifeldern IMO keinen Sinn, da
diese eine ID zurückgeben sollten, und die ist =.
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

Hallo,

einen NULL-Check habe ich weggelassen, weil es bei den offensichtlich als TEXT deklarierten Feldern und mit dem Like-Operator keine Rolle spielt.

Auf den separaten Auslösebutton hab ich auch hingewiesen.

Ansonsten ist bei normalisierten Tabellenaufbau der Donkarl-Tipp  (Schlüsselfeld-Benutzung) anzuwenden.

;) ;) ;)

sagrael

#5
Hallo,
also nach langem hin und her habe ich es geschafft . Es ist nicht von mir. Ich musste es ein bisschen überarbeiten damit es richtig funktioniert.Ohne auslöse Button.
Function searchCriteria() ' Combo  Funktion
Dim Halle, strHersteller, strStatusTyp, strBetriebssystem  As String
Dim task, strCriteria As String 'If IsNull(Me.cboHalle) Then
   
    If IsNull(Me.cboHalle) Then
    Halle = "[Halle] like '*'"
    Else
    Halle = "[Halle] = '" & Me.cboHalle & "'"
    End If
   
    If IsNull(Me.cboHersteller) Then
    strHersteller = "[Hersteller] like '*'"
    Else
    strHersteller = "[Hersteller] = '" & Me.cboHersteller & "'"
    End If
   
    If IsNull(Me.cboStatusTyp) Then
    strStatusTyp = "[Status] like '*'"
    Else
    strStatusTyp = "[Status] = '" & Me.cboStatusTyp & "'"
   
    End If
   
    If IsNull(Me.cboBetriebssystem) Then
    strBetriebssystem = "[Betriebssystem] like '*'"
    Else
    strBetriebssystem = "[Betriebssystem] = '" & Me.cboBetriebssystem & "'"
    End If
   
    strCriteria = Halle & "AND" & strHersteller & "AND" & strStatusTyp & "AND" & strBetriebssystem
   
      task = "Select * from tblMTG_komplett where " & strCriteria
      Me.RecordSource = task
      Forms![tblMTGsuche].Requery
      End Funktion


Trotzdem, nochmals Danke !!