Neuigkeiten:

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

Mobiles Hauptmenü

Problem mit Suchmaske

Begonnen von Carlos_C, Juni 10, 2015, 16:50:18

⏪ vorheriges - nächstes ⏩

Carlos_C

Hallo Maggie! Es hat geklappt! Sowohl mit den 5 weiteren Feldern als auch mit den Feldern DatumVon und DatumBis (anhand dem Beispiels deines Links).

Jetzt kommt ein letztes Feld "Kommentare". In der Tabelle tblBerichte gibt es ein Feld "Kommentare" mit dem Typ "kurzer Text" und kommt aus keinem Kombinationsfeld oder so. Da werden einfach kurze Kommentare eingeben. Ich möchte im Suchformular auch das Feld Kommentar einfügen, und zwar so, dass der Benutzer mit Schlagwörter und dem Wildcard * sucht. Zum Beispiel gibt der Benutzer in dieses Feld "*Typ*" ein, dann kommen als Ergebnisse Datensätze wo unter "Kommentare" z.B. "Test mit TypA" steht.

Geht so was?

Ich habe es versucht mit


If Not IsNull(Me.txt_Kommentare) Then
        strFilter = strFilter & "AND Kommentare LIKE '" & Me!txt_Kommentare & "'"
    End If


Geht aber nicht =(
Gruß,

Carlos

MzKlMu

Hallo,
wenn Du mit dem Wildcard suchen willst musst Du diesen auch verwenden, hinten und vorn. Außerdem dürfte ein Leerzeichen vor AND fehlen.
strFilter = strFilter & " AND Kommentare LIKE '*" & Me!txt_Kommentare & "*'"
Gruß Klaus

Carlos_C

Super! Hat´s funktioniert! Danke, Klaus!
Gruß,

Carlos

MaggieMay

Hi,

wobei ich mich frage, wie du den Vorschlag von Klaus wohl umgesetzt haben magst,
denn in meiner zuletzt hochgeladenen Lösung gibt es keinen "strFilter" mehr.

So wie es aussieht hast du das noch gar nicht angesehen, oder?
Freundliche Grüße
MaggieMay

Carlos_C

Hallo Maggie,

doch, es klappt. Ich habe es umgesetzt und es funktioniert wunderbar!

Anbei der Code. Ich habe aber den hier Code (also die Zeilen, die Felder betreffen, die genau wie die Felder ,,Tests", ,,Material" und und ,,Kuplungsart" sind) gekürzt, weil es sonst viel zu lang ist.

Die Felder ,,Tests", ,,Material" und und ,,Kuplungsart" sind Mehrwertfelder in der Tabelle tblBerichte, aber Kombinationsfelder im Suchformular (also man kann nur einen Wert im Suchformular eingeben).



Private Sub btn_FilterAnwenden_Click()
On Error GoTo Err_Befehl8_Click
    Dim strFilter As String, strKrit As String
    Dim rs As DAO.Recordset
   
    ' Filter zusammensetzen
   
    'Feld Bericht
    If Not IsNull(Me.cbo_Bericht) Then
        strFilter = " AND IDBericht=" & Me.cbo_Bericht
    Else
   
    'Feld LetzteVersion
    If Not IsNull(Me.cbo_LetzteVersion) Then
        strFilter = " AND lngLetzteVersion=" & Me.cbo_LetzteVersion
    Else
   
        'Feld Prüfer
        If Not IsNull(Me.cbo_Pruefer) Then
            strFilter = strFilter & " AND lngMitarbeiter=" & Me.cbo_Pruefer
        End If
       
            'Feld Test
            If Not IsNull(Me.cbo_Test) Then
                Set rs = CurrentDb.OpenRecordset("Select IDBericht From qryBerichteTests Where lngtest.value = " & Me.cbo_Test & "")
                Do While Not rs.EOF
                strKrit = strKrit & "," & rs!IDBericht
                rs.MoveNext
                Loop
                If Len(strKrit) > 0 Then _
                strFilter = strFilter & " AND IDBericht IN (" & Mid(strKrit, 2) & ")"
                'Wenn Tests gewählt werden, die nicht in tblBerichte existieren, soll als Ergebnis NULL rauskommen.
                If Len(strKrit) > 0 Then
                strFilter = strFilter & " AND IDBericht IN (" & Mid(strKrit, 2) & ")"
                Else
                strFilter = " AND False"
                End If
                '*********
            End If
           
                       
            'Feld Material
            If Not IsNull(Me.cbo_ Material) Then
                Set rs = CurrentDb.OpenRecordset("Select IDBericht From qryBerichteTests Where lngMaterial.value = " & Me.cbo_Material & "")
                Do While Not rs.EOF
                strKrit = strKrit & "," & rs!IDBericht
                rs.MoveNext
                Loop
                If Len(strKrit) > 0 Then _
                strFilter = strFilter & " AND IDBericht IN (" & Mid(strKrit, 2) & ")"
                'Wenn Materialen gewählt werden, die nicht in tblBerichte existieren, soll als Ergebnis NULL rauskommen.
                If Len(strKrit) > 0 Then
                strFilter = strFilter & " AND IDBericht IN (" & Mid(strKrit, 2) & ")"
                Else
                strFilter = " AND False"
                End If
                '*********
            End If
           
   
           
            'Feld Kupplungsart
            If Not IsNull(Me.cbo_Kupplungsart) Then
                Set rs = CurrentDb.OpenRecordset("Select IDBericht From qryBerichteTests Where lngKupplungsart.value = " & Me.cbo_Kupplungsart & "")
                Do While Not rs.EOF
                strKrit = strKrit & "," & rs!IDBericht
                rs.MoveNext
                Loop
                If Len(strKrit) > 0 Then _
                strFilter = strFilter & " AND IDBericht IN (" & Mid(strKrit, 2) & ")"
                'Wenn eine Kupplungsart gewählt wird, die nicht in tblBerichte existiert, soll als Ergebnis NULL rauskommen.
                If Len(strKrit) > 0 Then
                strFilter = strFilter & " AND IDBericht IN (" & Mid(strKrit, 2) & ")"
                Else
                strFilter = " AND False"
                End If
                '*********
            End If
           
    '---- neu ----------------------------------------------------------------------------
    If Nz(Me![txt_DatumVon], "") <> "" Then
        If Nz(Me![txt_DatumBis], "") <> "" Then
            strFilter = strFilter & " AND [Datum] Between " & Format(Me!txt_DatumVon, "\#yyyy\/mm\/dd\#") & _
                                            " AND " & Format(Me!txt_DatumBis, "\#yyyy\/mm\/dd\#")
        Else
            strFilter = strFilter & " AND [Datum] >= " & Format(Me!txt_DatumVon, "\#yyyy\/mm\/dd\#")
        End If
    ElseIf Nz(Me![txt_DatumBis], "") <> "" Then
        strFilter = strFilter & " AND [Datum] <= " & Format(Me!txt_DatumBis, "\#yyyy\/mm\/dd\#")
    End If
    '-------------------------------------------------------------------------------------
       
       
    'Kommentare
    If Not IsNull(Me.txt_Kommentare) Then
        strFilter = strFilter & " AND Kommentare LIKE '*" & Me!txt_Kommentare & "*'"
    End If
   
               
    End If
   
    End If
   
       
    ' Filter zuweisen
    If Len(strFilter) > 0 Then
        Me.ufrmBerichtSuche.Form.Filter = Mid(strFilter, 6)
        Me.ufrmBerichtSuche.Form.FilterOn = True
    Else
        Me.ufrmBerichtSuche.Form.Filter = ""
        Me.ufrmBerichtSuche.Form.FilterOn = False
    End If

Exit_Befehl8_Click:
    Exit Sub
Err_Befehl8_Click:
    MsgBox Err.Description
    Resume Exit_Befehl8_Click
End Sub

Gruß,

Carlos

MaggieMay

Wie gesagt, der ganze Code ist durch die neue Lösung mit der Hilfstabelle überflüssig geworden.
Irgendwie scheint das immer noch nicht bei dir angekommen zu sein.

Und wie verträgt sich das miteinander:
Zitates funktioniert wunderbar!
Zitatalso man kann nur einen Wert im Suchformular eingeben
???
Freundliche Grüße
MaggieMay

Carlos_C

Ja, es funktioniert sehr gut. Ich weiß, dass ich Dir letzte Woche geschrieben habe, dass ich im Suchformular die Möglichkeit haben wollte, z.B. bei ,,Tests" mehrere Tests eingeben zu können. Ich habe aber jetzt meine Meinung geändert und möchte jetzt im Suchformular NUR 1 Test als Suchkriterium eingeben könne. Das Gleiche für Material, Kupplungsart u.s.w.

Nein, das mit der Hilfstabelle ist bei mir nicht angekommen. =( Entschuldige die Ignoranz, aber welche Hilfstabelle meinst Du?
Gruß,

Carlos

MaggieMay

Zitat von: MaggieMay am Juni 12, 2015, 16:09:23
Schau dir einfach mal die am 12. Juni 16:09h von mir hochgeladene Datei an.
Freundliche Grüße
MaggieMay

Josef P.

Hallo!

Hab das aus Interesse einmal ausprobiert.
Man kommt an die ausgewählten Werte einer "MultiValue"-Combobox über die Value-Eigenschaft um einen Filterausdruck zu erstellen. Die Value-Eigenschaft gibt in so einem Fall ein Array mit Werten zurück.

Auszug aus dem Code (mehr siehe Anhang):
Private Function GetTestFilterString() As String
   
   Dim TestFilterString As String

   Dim SelectedValues As Variant
   Dim i As Long
       
   SelectedValues = Me.cbo_Tests.Value
   If IsArray(SelectedValues) Then
      If CheckValueArrayIsInitialized(SelectedValues) Then
         For i = LBound(SelectedValues) To UBound(SelectedValues)
            TestFilterString = TestFilterString & ", " & SelectedValues(i)
         Next
         TestFilterString = "lngTest.Value IN (" & Mid(TestFilterString, 3) & ")"
      End If
   ElseIf SelectedValues <> 0 Then
      TestFilterString = "lngTest.Value = " & SelectedValues
   End If
   
   GetTestFilterString = TestFilterString
   
End Function


Im Anhang sind auch noch 2 andere Varianten, bei denen ich Hilfsklassen für die Filterung verwende.

mfg
Josef

Carlos_C

Danke, Maggie! Deine Lösung vom 12.06 16h09 hatte ich schon gesehen.
Gruß,

Carlos

Carlos_C

Hallo Maggie,

könntest Du bitte einen Blick auf die Datenbank im Anhang werfen?

Die habe ich von Dir bekommen. Im Formular "frmBerichtSuche" gibt es ein Kombinationsfeld "Tests". In diesem Kombinationsfeld ist es möglich, mehrere Tests auszuwählen, also ein Kombibox mit Mehrfahauswahl.

Kannst Du mir bitte sagen, wie Du dieses Kombinationsfeld gemacht hast???? Ich bin Stundenland dabei zu versuchen, so ein Kombifeld in meiner Datenbank zu erstellen, klappt es aber überhaupt nicht =((((

Ich programmiere gerade ein Formular, wo man neue Berichte anlegen kann. Mit den Feldern z.B. Prüfer und Datum ist es überhaupt kein Problem. Nur mit den Feldern, bei dem man mehrere Werte wählen kann, klappt es gar nicht.

Ich bedanke mich im Voraus für Deine Antwort. Bin gespannt...

LG

Carlos
Gruß,

Carlos

MaggieMay

Hallo Carlos,

das Steuerelement ist auf Basis eines Tabellen-Kombifeldes mit Mehrfachauswahl entstanden.
(siehe Datenquelle des Formulars)

PS:
Zitatwo man neue Berichte anlegen kann
Das meinst du nicht wörtlich, oder? Willst du tatsächlich per VBA Berichte erstellen, also über den Entwurf und mit allen Steuerelementen?
Freundliche Grüße
MaggieMay

Carlos_C

Hallo Maggie,

vielen Dank!

Zu Deiner Frage: Nein, die Berichte (also die pdf_Dateien) werden nicht vom System erstellt, sondern von den Benutzern separat. Im Formular werden die Stammdaten des Berichts (Datum, Prüfer, Test, usw) eingetragen und diese Daten per Knopfdruck in die entsprechende Tabelle eingetragen.

Die pdf-Datei dazu (also der Bericht als pdf, was vorher vom erstellt wurde) wird per VBA auf dem File Server abgelegt.

Ich habe geschafft, ein Kombibox mit Mehrfachauswahl in die Eingabemaske zu erstellen. Die Übertragung der in diese Kombibox eingegebenen Daten in die entsprechende Tabelle funktioniert aber nicht =((((

Ich werde eine Musterdatenbank (300 KB, damit es als Anhang passt) vorbereiten. Könntest Du es Dir angucken? Vielleicht hast Du eine Idee, wie ich dieses Problem lösen kann.

LG

Carlos
Gruß,

Carlos

Carlos_C

Hallo Maggie, anbei die Datenbank. Habe alle anderen Formularen gelöscht, weil sie sonst zu groß ist, um sie als Anhang zu schicken.

Kannst Du Dir das Formular frmNeuerBericht-02 anschauen? Wenn ich das Feld ,,Tests" nicht habe, funktioniert es wunderbar. Aber mit dem Feld ,,Tests" geht es nicht mehr, wenn man auf die Diskette klicke.
Hast Du eine Idee, wie ich dieses Problem lösen kann? Auf jeden Fall brauche ich eine Mehrfachauswahl Kombibox, um Daten einzugeben.

LG

Carlos
Gruß,

Carlos

MaggieMay

Sorry, aber ich dachte das Thema "Mehrwertfeld" wäre inzwischen hinreichend ausdiskutiert.

Du kannst einem Mehrwertfeld keinen String zuweisen, du musst schon die Elemente einzeln zuweisen.

ZitatAuf jeden Fall brauche ich eine Mehrfachauswahl Kombibox, um Daten einzugeben.
Dann solltest du ein gebundenes Formular einsetzen. Da brauchst du keinen VBA-Code zur Datenspeicherung.
Freundliche Grüße
MaggieMay