Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: Carlos_C am Juni 10, 2015, 16:50:18

Titel: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 10, 2015, 16:50:18
Guten Tag liebes Forum,

Ich bin dabei, ein Suchformular in meiner Datenbank einzurichten und stoße gerade mit einem Problem.

Also, vom Anfang:

Ich habe eine Tabelle Namens tblBerichte, wo die Stammdaten meiner Testberichten eingetragen werden. Unter anderen Felder gibt es in dieser Tabelle die Felder BerichtNummer, lngPruefer und lngTest. Das Feld BerichtNummer ist nicht der Primärschlüssel, sondern ein Feld Namens IDBericht.

Ins Feld BerichtNummer kommt eine laufende Nummer von 1001 bis 9999.

Die Tabelle tblPruefer (bestehend aus Feldern IDPruefer, Vorname und Nachname) ist die Basis für die Abfrage qryPruefer (bestehend aus Feldern IDPruefer und GanzerName (GanzerName: [Vorname] & " " & [Nachname])).

In der Entwurfsansicht der Tabelle tblBerichte, bei Felddatentyp des Felds lngPruefer, in die Registerkarte Nachschlagen, habe ich folgendes eingegeben (u.a.):

Steuerelement anzeigen: Kombinationsfeld
Herkunfstyp: Tabelle/Abfrage
Datensatzherkunft: qryPruefer
Gebundene Spalte: 1
Spaltenanzahl: 2
Spaltenbreiten: 0; 3
Nur Listeneinträge: Ja
Mehrere Werte zulassen: Nein (da ein Bericht von NUR EINEM PRUEFER gemacht werden kann).

Die Tabelle tblPTests (bestehend Feldern IDTest, TestNummer, Testname) ist die Basis für die Abfrage qryTests (bestehend aus Feldern IDTest und TestNummerUndName (TestNummerUndName: [TestNummer] & " " & [TestName])).

In der Entwurfsansicht der Tabelle tblBerichte, bei Felddatentyp des Felds lngTest, in die Registerkarte Nachschlagen, habe ich folgendes eingegeben (u.a.):

Steuerelement anzeigen: Kombinationsfeld
Herkunfstyp: Tabelle/Abfrage
Datensatzherkunft: qryTests
Gebundene Spalte: 1
Spaltenanzahl: 2
Spaltenbreiten: 0; 3
Nur Listeneinträge: Ja
Mehrere Werte zulassen: Ja (da in einem Bericht mehrere Tests gemacht werden können).

Der Unterschied zwischen den Feldern Prüfer und Test ist dann nur, dass bei Prüfer nur ein Wert eingegeben werden kann (da pro Bericht NUR 1 PRÜFER) und bei Tests mehrere Werte eingegeben werden können (da pro Bericht mehrere Tests möglich).

Jetzt bin ich dabei ein Suchformular einzurichten, und zwar mit Haupt- und Unterformular.

Im Hauptformular habe ich (u.a.) 3 Felder: BerichtNummer., Pruefer und Tests. Das Hauptformular hat als Datenquelle die Tabelle tblBerichte. Das Feld BerichtNummer ist ein Kombinationsfeld und basiert auf die Abfrage qryBerichtNummer, die auf die Tabelle tblBerichte basiert (Feld Berichtnummer). Das Feld Pruefer ist ein Kombinationsfeld und basiert auf die Abfrage qryPruefer. Das Feld Tests basiert auf das Feld lngTest der Tabelle tblBerichte (hier habe ich unter ,,Entwurf/Vorhandene Felder hinzufügen" das Feld lngTest ins Formular geschoben.

Im Unterformular sollen die Ergebnisse angezeigt werden von was ich in die 3 Felder im Hauptformular eingegeben habe. Das Unterformular basiert auf die Abfrage qryBerichte. qryBerichte basiert auf die Tabelle tblBerichte und zeigt (u.a.) die Felder BerichtNummer, lngPruefer und lngTest.

In der Abfrage qryBerichte (das Unterformular basiert auf diese Abfrage), unter BerichtNummer / Kriterien, habe ich folgendes eingegeben:

Wie Nz([forms]![frmHauptformular]![Kombinationsfeld53];"*")

Das Kombinationsfeld 53 ist das Feld BerichtNummer. Diese NZ-Funktion macht (wenn ich es richtig verstanden habe), dass, wenn ins Feld BerichtNummer im Hauptformular nichts eingegeben wird, alle Berichte gezeigt werden, egal ob unter BerichtNummer nichts oder irgendwas eingegeben wurde.

Wenn man das Suchformular öffnet, werden im Unterformular erstmal alle Berichte gezeigt. So ist es richtig.

Nachdem ich in ein, zwei oder alle drei Felder des Hauptformulars (BerichtNummer, Pruefer, Tests) Suchkriterien eingebe, soll nach Knopfdruck auf eine Schaltfläche die Ergebnisse im Unterformular angezeigt werden, die zu meinen Suchkriterien passen.

Ich habe eine Schaltfläche eingerichtet und folgendes Code eingegeben (Ereignis beim Klicken):

Private Sub Befehl55_Click()

On Error GoTo Err_Befehl55_Click


    DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

Exit_Befehl55_Click:
    Exit Sub

Err_Befehl55_Click:
    MsgBox Err.Description
    Resume Exit_Befehl55_Click


End Sub

Für das Feld BerichtNUmmer habe ich das Problem mit dem Suchformular gelöst. Aber für die Felder Pruefer und Tests weiß ich nicht, wie ich das lösen kann.

Wenn ich die NZ-Funktion in der Abfrage qryBerichte unter lngPruefer / Kriterien eingebe, passiert folgendes:

Wenn ich unter Pruefer (im Hauptformular) nichts eingebe, kommen im Unterformular als Ergebnis alle Berichte, wo unter Prüfer nichts eingetragen wurde. Also die NZ-Funktion funktioniert hier nicht, was logisch ist, da das Feld Pruefer mit dem ID des Prüfers verbunden ist, nicht mit dem Namen des Prüfers. Wenn ich im Eigenschaftblatt des Felds Pruefer unter ,,Daten / Nur Listeneinträge" das Wert ,,Nein" eingeben möchte, meckert das System, also es geht nicht.

Wie kann ich dieses Problem am besten lösen? Und zwar für das Feld Pruefer und für das Feld Tests.

Ich freue mich auf jeden Vorschlag!

LG

Carlos
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 10, 2015, 19:28:34
Hallo Carlos,

es wäre wohl einfacher, wenn du eine kleine Beispiel-DB mit ein paar Testdaten hochladen würdest, an der man sich das alles mal mit eigenen Augen ansehen kann.
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 11, 2015, 12:37:00
Hallo MaggieMay,

anbei eine Beispiel Datenbank. Im Formular frmBerichtsuche hast Du die Felder ,,Bericht Nr.", ,,Prüfer" und ,,Tests". Wenn Du das Formular öffnest, siehst Du, dass das Unterformular alle Daten anzeigt. Wenn Du eine Bericht Nr. wählst und auf ,,Berichte suchen!" klickst, zeigt das Unterformular nur den gewählten Bericht. Wenn Du das Feld ,,Bericht Nr." wieder leer machst und wieder auf ,,Berichte suchen!" klickst, zeigt das Unterformular alle Berichte.

Also mit dem Thema ,,Bericht Nr." ist das Problem gelöst. Jetzt habe ich das Problem mit den Feldern ,,Prüfer" und ,,Tests". Das Feld ,,Prüfer" ist ein Kombifeld, dass auf die Abfrage qryMitarbeiterNamenSortiert basiert. Das Feld ,,Tests" basiert auf das Feld ,,lngTest" der Tabelle tblBerichte.

Mit den Feldern ,,Prüfer" ,,Berichte" möchte ich das Selbe wie mit dem Feld ,,Bericht Nr." verwirklichen. Also wenn ich was eingebe und auf ,,Berichte suchen!" klicke, sollen die Ergebnisse des U-Formulars nach den Suchkriterien im Hauptformular gezeigt weden. Wenn ich z.B. das Feld ,,Prüfer" wieder leer mache und wieder auf ,,Berichte suchen!" klicke, soll das Unterformular Berichte u.a. nach dem Kriterium ,,Prüfer = *" suchen. Das gleiche mit dem Feld Tests.

Ich freue mich auf jeden Vorschlag!

LG

Carlos
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 11, 2015, 13:56:55
Hallo,

wie willst du die Suche nach den Tests gestalten, genügt es nach einem Test zu suchen oder soll auch eine Kombination (=Und-Verknüpfung) möglich sein oder eine Mehrfachauswahl mit Oder-Verknüpfung?

Der einfachste Fall ist natürlich der erste. Du kannst dir das vorläufige Ergebnis schon mal anschauen, das ist jetzt erstmal nur ein Schubs in die richtige Richtung. Das Unterformular wird nun nach Änderung eines der Felder gefiltert, eine Kombination der Suchfelder wird (noch) nicht unterstützt. Der Such-Button ist jetzt ohne Funktion und daher ausgeblendet.
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 11, 2015, 14:10:43
Hallo Maggie,

vielen Dank für Deine Antwort! Ich habe mir die von Dir geänderte DB noch nicht angeschaut, weil ich erstmal Deine Frage beantworten möchte.

Die Suche nach den Tests möchte ich so gestalten, dass wenn ich z.B. im Suchfeld ,,Test01" eingebe, im Unterformular alle Berichte angezeigt werden, wo im Feld ,,Tests" unter anderen ,,Tests01" ist. Also, wo nur Test01 ist oder wo z.B. Test01; Test04 und Test10 sind.

Wenn ich z.B. Test01 und Tes02 ins Suchfeld eingebe, soll mir der Unterformular alle Ergebnisse zeigen, wo unter anderen Test01 und Test02 sind.

Ist das möglich???

Bei ,,Prüfer" ist das einfacher. In jedem Bericht ist NUR ein Prüfer eingetragen, dann kann man nur nach Berichten suchen, wo nur ein Prüfer eingetragen wurde.

Gruß,

Carlos
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 11, 2015, 16:53:40
Wenn du mehrere Tests auswählen willst, musst du ein Listenfeld mit Mehrfachauswahl einsetzen, mit einem ungebundenen Kombifeld bekommst du das nicht hin. Und das Kombifeld (sowie das Hauptformular) muss ungebunden sein, sonst überschreibst du dir ja die Datensätze mit den Suchkriterien.
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 11, 2015, 17:11:58
Alles klar! Danke, Maggie! Dann versuche ich eine Lösung nach Deinen Anweisungen zu implementieren. LG, Carlos.
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 11, 2015, 18:36:51
Hallo Maggie,
ich komme irgendwie nicht weiter.

Vereinfachen wir das Ganze und sagen wir, dass man nur einen Test sucht, nicht mehrere. So, wir haben dann 3 Kombolisten: BerichtNr, Pruefer und Tests.

Der Code, den Du in dem NachAktualisierungsEreignis für jedes Feld geschrieben hast, hilft mir leider nicht, weil die Abfrage im Unterformular jedes Mal aktualisiert wird, nachdem man jedes einzelnes Feld aktualisiert.

Was ich haben möchte ich folgendes:

Ich gebe 1 Wert, oder keinen Wert in jedes der 3 Felder ein, dann klicke ich auf ,,Berichte suchen" und erst da aktualisiert sich das Unterformular, erst beim Knopfdruck, nicht nach der Aktualisierung jedes Felds.

Ist das möglich? Ich meine einen Code für das BeimKlickenEreignis zu schreiben, um das zu verwirklichen?

Danke und Gruß,

Carlos
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 11, 2015, 19:19:39
Hallo Carlos,

ja, das habe ich schon erwartet, dass du mehr Flexibilität erreichen möchtest, aber ich habe dir erstmal ein einfaches Beispiel gemacht, damit du siehst wie das prinzipiell mit dem Filtern funktioniert. Wenn du die Auswahl kombinieren willst, so kannst du den Code aus den AfterUpdate-Ereignissen im Button-Klick zusammenführen.
Wie sieht es aus mit deinen Programmier- und VBA-Kenntnissen?

Welchen Sinn aber macht es nach BerichtNr und einem weiteren Kriterium zu filtern? Die BerichtNr (bzw. IDBericht) ist doch eindeutig.
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 11, 2015, 19:36:46
Hallo Maggie,

danke für Deine Antwort!

Mit meinen VBA-Kenntnissen sieht es nicht so gut aus. Ich fange erst an, das zu lernen.

Also, was meinst Du mit "den Code aus den AfterUpdate-Ereignissen im Button-Klick zusammenführen?

Kannst Du es mir erklären?

Wenn ich alle 3 Codes (von den 3 AfterUpdate-Ereignissen) ins AfterClick-Ereignis reinschreibe, funktioniert es nicht, wie ich es mir gedacht hatte:

Private Sub btn_Filter_Click()

    If IsNull(Me.cbo_Bericht) Then
        Me.ufrmBerichtSuche.Form.Filter = ""
        Me.ufrmBerichtSuche.Form.FilterOn = False
    Else
        Me.ufrmBerichtSuche.Form.Filter = "IDBericht=" & Me.cbo_Bericht
        Me.ufrmBerichtSuche.Form.FilterOn = True
    End If
   
    If IsNull(Me.cbo_Pruefer) Then
        Me.ufrmBerichtSuche.Form.Filter = ""
        Me.ufrmBerichtSuche.Form.FilterOn = False
    Else
        Me.ufrmBerichtSuche.Form.Filter = "lngMitarbeiter=" & Me.cbo_Pruefer
        Me.ufrmBerichtSuche.Form.FilterOn = True
    End If
   
    If IsNull(Me.cbo_Test) Then
        Me.ufrmBerichtSuche.Form.RecordSource = "qryBerichte"
        Me.ufrmBerichtSuche.Form.Filter = ""
        Me.ufrmBerichtSuche.Form.FilterOn = False
    Else
        Me.ufrmBerichtSuche.Form.RecordSource = "qryBerichteTests"
        Me.ufrmBerichtSuche.Form.Filter = "lngTest.Value=" & Me.cbo_Test
        Me.ufrmBerichtSuche.Form.FilterOn = True
    End If

End Sub


Kannst Du mir bitte sagen, was ich genau ins AfterClick-Ereignis schreiben soll?

Danke und Gruß,

Carlos
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 11, 2015, 20:22:00
Du hast vergessen, meine Frage zu beantworten.

Der Filter muss aus den einzelnen Teilen zusammengesetzt werden, nicht einzeln angewendet wie bisher, das war doch dein Wunsch.

So könnte das aussehen:
Private Sub btn_Filter_Click()
    Dim strFilter As String
    ' Filter zusammensetzen
    If Not IsNull(Me.cbo_Bericht) Then
        strFilter = strFilter & " AND IDBericht=" & Me.cbo_Bericht
    End If
    If Not IsNull(Me.cbo_Pruefer) Then
        strFilter = strFilter & " AND lngMitarbeiter=" & Me.cbo_Pruefer
    End If
    If Not IsNull(Me.cbo_Test) Then
        strFilter = strFilter & " AND lngTest=" & Me.cbo_Test
    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
End Sub

Ich werde das mal austesten und das Ergebnis hochladen.
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 11, 2015, 20:50:16
Hallo Maggie, habe Deinen Code getestet. Es klappt alles außer das mit dem Feld "Tests". Das System meckert und markiert die Zeile:

Me.ufrmBerichtSuche.Form.FilterOn = True

Gruß, Carlos

PS: Antworte Dir noch Deine Frage.
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 11, 2015, 20:54:28
Die Frage war:
Welchen Sinn aber macht es nach BerichtNr und einem weiteren Kriterium zu filtern?
Die BerichtNr (bzw. IDBericht) ist doch eindeutig, wozu soll da noch weiter gefiltert werden?
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 11, 2015, 21:00:08
Hallo Maggie,

also, Berichtnr, Prüfer und Tests sind eigentlich nicht die einzigen Suchkriterien, es gibt noch viele mehr wie Datum, MaterialTeil1, MaterialTeil2, ..., MaterialTeiln, Werk, Sprache, usw. Aber aus Einfachkeitsgründen habe ich in diesem Beispiel nur die 3 Kriterien Berichtnr, Prüfer und Tests betrachtet.

Das die Berichtsnr eindeutig ist, hast Du Recht, aber es kann sein, dass der Benutzer der Datenbank das Feld Berichtnr. leer lässt und Eingaben in andere Felder eingibt.

Habe ich Deine Frage  beantwortet?

Gruß,

Carlos
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 11, 2015, 21:03:41
Konntest Du den Code testen?
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 11, 2015, 22:44:50
ZitatKonntest Du den Code testen?
Ja, mir ist durchaus klar, dass die Sache noch nicht rund ist, aber ich hatte anfangs noch die Hoffnung, dich mit hilfreichen Hinweisen und Beispielen zur Eigeninitiative motivieren zu können, doch wo Programmierkenntnisse gänzlich fehlen, sind derartige Erwartungen wohl auf Sand gebaut.

Also halten wir mal fest, dass die Auswahl einer BerichtsNr ein eindeutiges und nicht ergänzbares Kriterium darstellt - OK?

Daraus folgt:
- auf dieser Grundlage könnten in besagtem Fall also alle anderen Kriterien vernachlässigt werden.
- bei Auswahl der Tests muss die Abfrage "qryBerichteTests" einbezogen werden.

In der neuen Version der Beispiel-DB ist beides berücksichtigt.

Die Erweiterung auf mehrere Tests ist natürlich möglich - kostet dich aber mindestens eine Einladung zur Pizza Quattro Stagione - wo auch immer! ;-)

PS:
Das so gefilterte Unterformular sollte nicht editierbar sein!
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 12, 2015, 08:10:18
Hallo Maggie, habe Deinen Code getestet. Es klappt alles außer das mit dem Feld "Tests". Das System meckert und markiert die Zeile:

Me.ufrmBerichtSuche.Form.FilterOn = True

Gruß, Carlos
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 12, 2015, 11:02:56
Hallo Maggie, hatte Deinen letzten Beitrag übersehen. Wow, jetzt funktioniert es super! Wo wohnst Du eigentlich? Wenn Du in Karlsruhe oder Umgebung wohnst, lade ich Dich gerne zu einer Pizza ein! =)

Ich versuche jetzt, Dein Konzept in meine Datenbank zu implementieren und melde mich wieder.

Danke!

Carlos
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 12, 2015, 12:31:25
ZitatWenn Du in Karlsruhe oder Umgebung wohnst
Da hast du aber Glück, das ist doch etwas zu weit für mich.  ;D
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 12, 2015, 13:58:45
Hallo Maggie, ich habe einen kleinen Fehler gefunden: Und zwar wenn Du einen Test nimmst, der nicht vorkommt (z.B. Test10), werden im UFO alle Berichte gezeigt. In so einem Fall müßte als Ergebnis nichts rauskommen, wie zum Beispiel wenn Du als Prüfer "Klaus Bauer nimmst". Wie kann man denn den Code ändern?

Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 12, 2015, 14:31:14
Hi,

das kannst du mit folgender Code-Erweiterung erreichen:
            If Len(strKrit) > 0 Then
                strFilter = strFilter & " AND IDBericht IN (" & Mid(strKrit, 2) & ")"
            Else
                strFilter = " AND False"
            End If

Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 12, 2015, 14:59:01
Hallo Maggie, wo genau soll ich die 5 Zeilen rein?
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 12, 2015, 15:03:20
Ich hab´s (nach langem Rumprobieren) gefunden. Also die Ergänzung kommt nach dem:

        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) & ")"
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 12, 2015, 15:08:44
Wenn du einmal ganz genau hinschaust wirst du erkennen, dass die fünf Zeilen diese beiden ersetzen sollen:
            If Len(strKrit) > 0 Then _
                strFilter = strFilter & " AND IDBericht IN (" & Mid(strKrit, 2) & ")"


...und benutze bitte auch die Code-Tags, zu finden im Antworten-Fenster, nicht bei der "Schnellantwort".
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 12, 2015, 15:11:44
Hallo Maggie,

ich muss mein Suchformular mit weiteren Feldern ergänzen. Es kommen noch:

- 5 Felder, die aus Felder der Tabelle tblBerichte kommen, wo mehrere Werte eingegeben werden können (genau wie beim Feld "Test"),

- 2 Datumsfelder (also ein Feld DatumVon und ein Feld DatumBis), und

- 1 Feld Kommentare (dies ist in der Tabelle tblBerichte ein Textfeld, das aus keiner Abfrage kommt. Hier werde ich versuchen, eine Suche mit Schlagwörter zu realisieren.

Ich werde mit dem ersten Thema anfangen, also die 5 weiteren Felder, die aus Felder der Tabelle tblBerichte kommen, wo mehrere Werte eingegeben werden können (genau wie beim Feld "Test"). Wenn ich irgendwie nicht weiter komme, würde ich gerne wieder auf Dich zukommen (über dieses Forum).

Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 12, 2015, 15:22:37
Hi,

sind diese fünf Felder alle Mehrwertfelder?

Wie das mit der Datumsabfrage gelöst werden kann, kannst du dir hier mal anschauen:
Datensätze über kombinierte Kriterien in mehreren Spalten filtern (http://www.access-o-mania.de/forum/index.php?topic=20417.msg114517#msg114517)
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 12, 2015, 15:31:09
Hallo Maggie,

ja, alle 5 Felder sind genau wie das Feld "Test", also Mehrwertfelder in der Tabelle tblBerichte aber ein Kombifeld im Suchformular. Also im Suchformular kann man nur 1 Wert eingeben.

Wie gesagt, sie sind alle 5 Felder genau der Fall wie mit dem Feld "Tests".

Wer Du einen Tipp hast, immer gerne. Sonst würde ich versuche, anhand der Zeilen im Code, die das Feld "Tests" betreffen, den Code für diese 5 Felder zu erweitern. Erst mit einem Feld und dann weiter mit den anderen.

Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 12, 2015, 15:51:45
Ich denke, das du es schaffen solltest, das Beispiel mit "Tests" auf die anderen Felder zu übertragen. ;-)

Zur Unterstützung der Mehrfachauswhl hätte ich noch eine Idee, und zwar könnte man dafür eine Hilfstabelle einsetzen, so dass das Hauptformular doch gebunden sein könnte und dann verhalten die Kombifelder sich ja bekanntlich anders.
Was meinst du dazu?
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 12, 2015, 15:56:56
Hallo Maggie, jeder Vorschlag von Dir ist eine Herausforderung für mich =) Ich versuche, es umzusetzen und berichte Dir dann, wie es mir gegangen ist.

Wish me luck...
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 12, 2015, 16:09:23
Ich probiere das selbst auch mal aus, rein interessehalber.
Was aber nicht bedeutet, dass du es nicht auch tun solltest. ;-)

Nachtrag:
Ich bin so begeistert von dieser Lösung, dass ich sie nicht länger für mich behalten kann!  ;D
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 14, 2015, 19:14:07
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 =(
Titel: Re: Problem mit Suchmaske
Beitrag von: MzKlMu am Juni 14, 2015, 19:24:40
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 & "*'"
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 14, 2015, 20:08:53
Super! Hat´s funktioniert! Danke, Klaus!
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 14, 2015, 22:00:23
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?
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 15, 2015, 10:53:03
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

Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 15, 2015, 13:44:03
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
???
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 15, 2015, 14:22:32
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?
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 15, 2015, 14:38:54
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.
Titel: Re: Problem mit Suchmaske
Beitrag von: Josef P. am Juni 15, 2015, 15:30:04
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
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 22, 2015, 13:42:20
Danke, Maggie! Deine Lösung vom 12.06 16h09 hatte ich schon gesehen.
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 24, 2015, 17:23:30
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
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 25, 2015, 16:32:05
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?
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 25, 2015, 17:09:01
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
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 25, 2015, 18:25:15
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
Titel: Re: Problem mit Suchmaske
Beitrag von: MaggieMay am Juni 25, 2015, 23:22:43
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.
Titel: Re: Problem mit Suchmaske
Beitrag von: Josef P. am Juni 26, 2015, 00:08:59
Hallo!

Vorab: der Vorschlag von MaggieMay mit dem gebundenen Feld zur Dateneingabe ist meiner Meinung nach am einfachsten und sinnvollsten.

Trotzdem noch die im Beispiel versuchte Variante mittels VBA einen Datensatz anzufügen:
  'Neuen Bericht in tblBerichte anlegen
  Dim mvRs As DAO.Recordset
  Dim itm As Variant
  With CurrentDb().OpenRecordset("tblBerichte", dbOpenDynaset, dbAppendOnly)
    .AddNew
    !BerichtNr = NeueBerichtNummer
    !Datum = Me![txt_Datum]
    !lngLetzteVersion = 1
    !lngMitarbeiter = Me![cbo_Pruefer]
    Set mvRs = !lngTest.Value
    For Each itm In Me.cbo_Test.Value
      mvRs.AddNew
      mvRs.Fields(0).Value = itm
      mvRs.Update
    Next
    !Kommentare = Me![txt_Kommentare]
    .Update
    .Close
  End With


BTW: dir ist schon bewusst, dass du über deine "Eingabemaske" immer einen Datensatz in der Tabelle tblBerichte änderst, weil das Formular an diese Tabelle gebunden ist und cbo_Test am Datenfeld dieser Tabelle hängt?

mfg
Josef
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 26, 2015, 10:15:19
Danke Ihr beide für Eure Antworten! Ich werde beide Lösungen testen. Sage Euch Bescheid, wie es mir gegangen ist.
Titel: Re: Problem mit Suchmaske
Beitrag von: Carlos_C am Juni 29, 2015, 09:32:47
Stimmt! Di Lösung von Maggie war einfach und sinnvoll. Die Lösung von Josef hat auch funktioniert, hat aber manchmal Fehlermeldungen gegeben. Danke Ihr beide!