Neuigkeiten:

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

Mobiles Hauptmenü

Abfrage And/Or

Begonnen von robsonlele, November 05, 2012, 12:50:26

⏪ vorheriges - nächstes ⏩

robsonlele

Hallo an alle,

ich habe wieder mal ein kleines Problem.
Und zwar möchte ich eine Abfrage generieren. Diese soll die Daten bei  Start nach mehreren Kriterien filtern. Zunächst soll eine Messagebox eingeblendet werden die mich nach dem Datum fragt. Also Anfangsdatum und Enddatum, danach welcher Hersteller, Nennbreite und zuletzt nach der Zählernummer.

Dafür habe ich folgenden SQL-Code geschrieben:

HAVING (((Erfassung.Datum)>=[Formulare]![von]![datum_bericht] Or (Erfassung.Datum)<[Formulare]![bis]![datum_bericht])) OR (((Hersteller.Hersteller)=[Formulare]![welcher]![Hersteller])) OR (((Erfassung.Nennbreite)=[Formulare]![welche]![Nennbreite])) OR (((Erfassung.Coilnummer)=[Formulare]![welche]![Coilnummer]))

Jetzt habe ich das Problem, dass das Programm abbricht, wenn eine Bedingung erfüllt ist, gebe ich quasi nur einen Zeitraum ein und einen Hersteller, so wird nur nach Zeitraum gefiltert, da es das erste Kriterium ist nach dem gesucht wird. Ich möchte aber, dass auch weiter gefiltert wird wenn ich mehrere Kriterien eingebe.

Kann mir da jemand weiterhelfen?

Danke schonmal im Voraus

Mfg Robby

database

Hallo,

     "... einen Zeitraum ein und einen Hersteller ..."

Dann solltest du deine Kriterien auch mit UND verknüpfen.

Zitat)=[Formulare]![welcher]![Hersteller]
Deine Formulare heißen tatsächlich 'von', 'bis', 'welche' und 'welcher' ?


robsonlele

Hallo,

zunächst einmal danke für deine Antwort.

Du hast Recht, wenn ich immer nach Hersteller und Zeitraum Filtern wöllte, dann müsste ich es mit AND verbinden. Ich möchte aber einmal nur nach einem Zeitraum filtern und das nächste mal nach dem Zeitraum, Hersteller und Anlage. Und beim dritten mal von mir aus nach allen Kriterien.
Wenn ich das dann mit AND verbinden würde, und nicht alle Felder ausfülle, würde ich ja dann gar kein Ergebnis erhalten.

Mfg Robby

database

Hallo,

eine dynamisch veränderbare Abfrage mit so vielen Kriterien aus Parametern zu erstellen wird sehr aufwändig sein.
Nimm doch ein Formular mit entsprechenden Textfeldern und baue den SQL-String per VBA zusammen.
Hier kannst du leichter und vor allem übersichtlicher arbeiten.

Den so entstandenen Sting weist du deiner Abfrage ebenfalls per VBA zu und öffnest sie dann.

HTH

Beaker s.a.

Hallo,
@Forumsleitung
Weiss nicht ob Ihr es erlaubt Links zur "Konkurrenz"
zu posten, also falls es nicht gern gesehen ist, bitte
Euren Regeln entsprechend eingreifen.

@Robby
Schau Dir dies mal an:
http://www.office-loesung.de/ftopic13271_0_0_asc.php
hth
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)

robsonlele

#5
Hallo Ekkehard und HTH,

zunächst einmal danke für eure Antworten und den Link.  War jetzt paar Tage nicht auf Arbeit und konnte daher nicht eher ein Feedback geben.
Der Code aus dem Link funktioniert soweit auch ganz gut. Habe ihn für meinen Fall ein bisschen angepasst und sieht jetzt so aus.  

Public Sub SQLString(FieldValue As Variant, FieldName As String, _
                    Criteria As String, ArgCount As Integer, _
                    Typ As Integer, Optional bAnd As Boolean = True)
   If Nz(FieldValue, "") <> "" Then
       If bAnd Then
           If ArgCount > 0 Then Criteria = Criteria & " AND "
         Else
           If ArgCount > 0 Then Criteria = Criteria & " OR "
       End If
       Select Case Typ
         Case 1 'Datum
           Criteria = Criteria & FieldName & "= #" & _
                      Format(CDate(FieldValue), "mm-dd-yyyy") & "#"
         Case 2 'String Like
           Criteria = Criteria & FieldName & " Like '*" & FieldValue & "*'"
         Case 3 ' Zahl
           Criteria = Criteria & FieldName & " = " & Str(FieldValue)
         Case 4 'String =
           Criteria = Criteria & FieldName & " = '" & FieldValue & "'"
         Case 5 'Ja/nein
           If FieldValue = "Ja" Or FieldValue = "True" Or _
              FieldValue = True Then
               Criteria = Criteria & FieldName & " = -1"
             Else
               Criteria = Criteria & FieldName & " = 0"
           End If
       End Select
       ArgCount = ArgCount + 1
   End If
End Sub

Private Function Filterbedingung()
Dim ArgCount As Integer
 
   ArgCount = 0
   myCriteria = ""
   SQLString Me!Datumvon, Datumvon, myCriteria, ArgCount, 1
   SQLString Me!Datumbis, Datumbis, myCriteria, ArgCount, 1
   SQLString Me!Hersteller, Hersteller, myCriteria, ArgCount, 3
   SQLString Me!Anlage, Anlage, myCriteria, ArgCount, 2
   SQLString Me!Nennbreite, Nennbreite, myCriteria, ArgCount, 3
   ' Falls kein Kriterium spezifiziert wurde, gebe alle Datensätze zurück.
   If myCriteria = "" Then myCriteria = "True"
   Filterbedingung = myCriteria
End Function

Private Sub Berichtsvorschau_Click()
   Me.Filter = Filterbedingung()
   Me.FilterOn = True
   DoCmd.OpenReport "Abfrage", acViewPreview
End Sub

Das Problem was jetzt noch besteht ist, dass der Code zwar alle Filterkriterien erkennt, aber am Ende den Filter nicht anwendet.
Das heißt, wenn ich eine Haltemarke reinmache und den Code Schritt für Schritt durchgehe sehe ich, dass er für jedes Feld die eingegeben Werte erkennt und auch bei

Filterbedingung = myCriteria

die richtigen Filterbedingungen erkennt. Aber er schafft es einfach nicht diese Filterkriterien nach dem Klicken auf die Befehlsschaltfläche "Berichtsvorschau" auch anzuwenden. Weiß jemand woran das liegen könnte?

Danke für die Hilfe

Mfg Robby