Office: Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder

Helfe beim Thema Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Ich habe so ca. 30 Abfragen mit jeweils den Feldern "Vertriebsstellen" und "Austritt". In den 30 Abfragen sind jeweils zwei Kriterien. Nun muss ich in... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Fantom05, 11. September 2024.

  1. Fantom05 Neuer User

    Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder


    Ich habe so ca. 30 Abfragen mit jeweils den Feldern "Vertriebsstellen" und "Austritt". In den 30 Abfragen sind jeweils zwei Kriterien. Nun muss ich in den Abfragen immer in dem Feld Vertriebsstellen als Kriterium "Zwischen 800 und 820" und bei Austritt "null oder >=#01.01.2023#" eingeben. Das pro Abfrage zweimal, da ich in jeder Abfrage zwei andere Kriterien abfrage. Und das eben für 30 Abfragen. Kann man das nicht irgendwie so machen, indem ich eine Vorlage habe für Feld Vertriebsstellen und Austritt einmal eingebe und das dann im allen Abfragen dieses Kriterium automatisch übernimmt. Hat da jemand eine Idee?
     
  2. Doming
    Doming hat Ahnung
    Hallo Fantom,
    ja, sicher geht das, aber so aus dem hohlen Bauch heraus ist es schwierig, das auf Deine Bedürfnisse anzupassen.
    Arbeitest Du mit VBA oder mit dem Abfrageassistenten?
    Du könntest einfach neue Abfragen basteln, in denen Deine Kriterien fest verankert sind oder eben im VBA per
    Code:
        "SELECT blahblah " _
     &  "FROM Abfrage " _
     &  "WHERE Ausritt Is Null OR Austritt >= #2023-01-01# " _
     & " AND Vertriebsstellen BETWEEN 800 AND 820"
    (AndyVau möge mich berichtigen ;-)
    Am besten Du schreibst mal Deinen bisherigen Code hier rein oder lädst eine abgespeckte Version Deiner Datenbank (reduziert auf Dein Problem mit einigen anonymisierten Daten) hoch, dann kann Dir explizit geantwortet werden.
    Gruß
    Doming
     
  3. andyfau
    andyfau Erfahrener User
    Ja, Doming, Du hast schon recht. Wenn man genaueres wüsste, wäre eine spezifischere Antwort möglich.
    Für mich hört es sich so an, als ob er immer viele Abfragen hat, die dann aber immer mit den gleichen Kriterien aufgerufen werden. Das ruft nach einer Stapelverarbeitung mit Hilfe von VBA und entsprechenden Parameterabfragen (Querydefs).
    Um nicht jedesmal die Parameter im Code ändern zu müssen, was leicht zu (Syntax)Fehlern führt, ist die Erstellung eines entsprechenden Formulars zur Parametereingabe und zum Starten der Queries ratsam.
    Beste Grüße
    Andreas
     
  4. Fantom05 Neuer User

    Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder

    Hallo Doming und andyfau,
    ja. wie andyfau schon richtig erkannt hat, habe ich an die 30 Anfragen, besser gesagt, überwiegend Anfügeanfragen - nicht über VBA, sondern über normale Abfragen erstellt. Die Access-Datenbank habe ich von meinem Kollegen bekommen, dessen Aufgabe ich übernommen habe. Pro Abfrage habe einmal zwei verschiedene Kriterien (mit verschiedenen Lohnarten, verbunden mit verschiedenen Lohnklassen), die muss ich aber so lassen. Was ich aber immer ändern muss, sind die Vertriebsstellen und das Datum vom Feld Austritt. Die Idee mit Formular zu arbeiten, um die Parameter einzugeben, gefällt mir und dann habe ich mir gedacht, zum Schluss die ganzen Abfragen per VBA laufen zu lassen. Schätze, ich müsste dann bei den Parameterabfragen sowas wie z.B. Formular!VorgabeVSt.???? eingeben? Könnt ihr damit schon was anfangen? Problem ist, dass die Datenbank mit mehreren Excel-Tabellen aus Sharepoint verknüpft ist.
     
  5. Fantom05 Neuer User
    Ups...ich meine Abfragen nicht Anfragen. Sowas aber auch!
     
  6. Doming
    Doming hat Ahnung
    Hallo Fantom,
    wie ist es um Deine „Ahnung” von Access bestellt?
    Solange Du bisher nur mit Excel gearbeitet hast, ist es nicht so einfach, sich auf Datenbank-Denke umzustellen.
    30 Abfragen sind zwar schon einige, aber wenn man das erstmal eingetippt hat, ist ja erstmal Ruhe, reine Fleißarbeit.
    Man könnte die Kriterien sogar in eine neue m:n Tabelle tippen und sie dann in einer Schleife abarbeiten, dann kann man auch mehr als 2 Kriterien/Abfrage nehmen.
    Nach Art von tbl_Kriterien: ID | Abfragename | Kriterium

    Die Kriterien dann in einer Schleife abfragen.
    Gruß
    Doming
     
  7. andyfau
    andyfau Erfahrener User
    Das ganze ist Fischen im Trüben und scheint mir eine ziemliche "Bastelarbeit" zu sein. Excel?Sharepoint?Verbunden? Kommen die Daten aus Excel oder sollen Sie dahin? Zeige zumindest mal dein Datenmodell, falls überhaupt vorhanden. Welche Tabellen sind wie verbunden (Beziehungsfenster)?
    Eine abgespeckte, anonymisierte Version deiner DB ließe sicher den einen oder anderen Vorschlag von uns möglich machen.
    Gruß
    Andreas
     
  8. Fantom05 Neuer User

    Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder

    Hallo Doming,
    hallo andyfau,
    habe vor 6 Jahren gute 20 Jahre Access-Datenbanken aufgebaut. Muss aber eingestehen, die letzten 6 Jahre nichts mehr gemacht und fange jetzt wieder an. Da hat man doch wieder das eine oder andere vergessen. Gebe ich zu.
    Habe mal eine Hardcopy gemacht. Die Tabelle BAS-Stammdaten und die Tabelle BAS-Lohnkonto sind verknüpfte Exel-Tabellen aus SharePoint. Die Datenbank ist ist recht gross, die kriege ich leider nicht so einfach von meiner Geschäfts-Email zu mir gesendet. Vielleicht habt ihr so schon mal einen Überblick.
    Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder upload_2024-9-15_21-10-1.png

    Doming,
    du hast geschrieben...
    "Man könnte die Kriterien sogar in eine neue m:n Tabelle tippen und sie dann in einer Schleife abarbeiten, dann kann man auch mehr als 2 Kriterien/Abfrage nehmen.
    Nach Art von tbl_Kriterien: ID | Abfragename | Kriterium
    Die Kriterien dann in einer Schleife abfragen."
    Wie soll das denn so aussehen? Kannst du mir das was an die Hand geben?
    Gruß
    Fantom05
     
  9. Doming
    Doming hat Ahnung
    Hallo,
    In der abgebildeten Abfrage fällt mir folgendes auf:
    Warum gibt es eine BAS_StammDaten_1? Das ist doch nur eine Kopie von BAS_Stammdaten.
    Warum gibt es zwischen den beiden Tabellen 2 Verknüpfungen?
    Wieso sind die Kriterien doppelt eingetragen?
    Das „Vorname: [Vorname]” kann man sich sparen, die Bezeichnung bleibt ja gleich.

    Ich guck mir mal an, wie man das umsetzen könnte.

    Gruß
    Doming
     
  10. Doming
    Doming hat Ahnung
    So, ich habe mich mal ein bisschen hingesetzt und die Bedingungen aus dem Screenshot in ein paar Tabellen getippt
    Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder upload_2024-9-16_14-10-17.png

    Mit der folgenden Abfrage
    Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder upload_2024-9-16_14-11-39.png

    bekomme ich folgendes Ergebnis
    Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder upload_2024-9-16_14-12-39.png

    Wenn ich die jetzt noch die beiden kleinen Funktionen in die Datenbank tippe:
    Code:
    Public Function Wertformieren(Optional FWert As Variant) As String
    On Error GoTo Fehler
        If IsDate(FWert) Then
            Wertformieren = Format(CDate(FWert), "\#yyyy-mm-dd\# ")
        ElseIf IsNumeric(FWert) Then
            Wertformieren = FWert & " "
        ElseIf IsNull(FWert) Then
            Wertformieren = "Is Null "
        Else
            Wertformieren = "'" & FWert & "' "
        End If
    Ende:
        Exit Function
    Fehler:
        If Err.Number = 13 Then
            Wertformieren = "Is Null "
        End If
        Resume Ende
    End Function
    
    Public Function Filterbau(AbfrageID As Long) As String
     Dim cDB As DAO.Database, rsF As DAO.Recordset, rsA As DAO.Recordset
     Dim a As Long, b As Long
     Dim AltOperand As String, AltBedingung As String, NeuStr As String
     Dim MinWert As Long, MinBool As Boolean, MaxWert As Long, MaxBool As Boolean
        Set cDB = CurrentDb
        Set rsF = cDB.OpenRecordset("SELECT ExlSpalte, Operand, Wert, Attribut " _
                                  & "FROM Abfr_Zusammen " _
                                  & "WHERE aID = " & AbfrageID)
        NeuStr = "("
        If Not (rsF.BOF And rsF.EOF) Then
            Do
                If AltBedingung <> rsF!ExlSpalte Then
                    MinBool = False
                    MaxBool = False
                    If AltBedingung <> "" Then NeuStr = NeuStr & ") AND ("
                    NeuStr = NeuStr & rsF!ExlSpalte
                End If
            
                If rsF!Operand = "OR" Or rsF!Operand = "AND" Then
                    If AltBedingung = rsF!ExlSpalte Then
                        NeuStr = NeuStr & rsF!Operand
                        NeuStr = NeuStr & " " & rsF!ExlSpalte
                    End If
                    If IsNull(rsF!Wert) Then
                        NeuStr = NeuStr & " Is Null "
                    ElseIf rsF!Attribut = ">=" Then
                        NeuStr = NeuStr & " " & rsF!Attribut & " " & Wertformieren(rsF!Wert)
                    Else
                        NeuStr = NeuStr & " = " & Wertformieren(rsF!Wert)
                    End If
              
                ElseIf rsF!Operand = "BETWEEN" Then
                    If rsF!Attribut = "Min" Then
                        MinWert = rsF!Wert
                        MinBool = True
                    End If
                    If rsF!Attribut = "Max" Then
                        MaxWert = rsF!Wert
                        MaxBool = True
                    End If
                    If MinBool And MaxBool Then
                        NeuStr = NeuStr & " BETWEEN " & MinWert & " AND " & MaxWert
                    End If
                ElseIf rsF!Operand = "=" Then
                    NeuStr = NeuStr & "= " & Wertformieren(rsF!Wert)
                End If
     
                AltOperand = rsF!Operand
                AltBedingung = rsF!ExlSpalte
                rsF.MoveNext
      '          Debug.Print NeuStr
            Loop Until rsF.EOF
            NeuStr = NeuStr & ")"
        End If
            
        Filterbau = NeuStr
        Debug.Print Filterbau
     
        Set rsF = Nothing
        Set cDB = Nothing
    End Function
    
    
    Bekomme ich als Ergebnis für den Befehl Filterbau(Abfrage1) diesen String:
    (Lohnart = 234 OR Lohnart = 834 ) AND (Firma = 'F1' OR Firma = 'F2' ) AND (VST BETWEEN 811 AND 854) AND (AusDatum Is Null OR AusDatum >= #2023-01-01# )

    Man könnte das jetzt händisch in die Kriterientabelle eintragen oder sich ein Formular basteln, um die einzelnen Bedingungen festzulegen und sicherzustellen, dass sie vernünftig formatiert in den einzelnen Tabellen landen.

    Gruß
    Doming
     
    Zuletzt bearbeitet: 16. September 2024
  11. Doming
    Doming hat Ahnung
    Hm, wenn man so des Nächtens darüber nachdenkt, kann man sicherlich noch das eine oder andere optimieren.
    Aber als Denkanstoß taugt es allemal.
    Mal sehen, ob Fantom sich nochmal dazu meldet.
     
    1 Person gefällt das.
  12. Fantom05 Neuer User
    Hallo Doming,
    danke für deine Unterstützung! ich versuche das mal irgendwie umzusetzen. Die Lohnarten sind immer verschiedentlich. Um die geht es nicht. An sich möchte ich die Abfragen so belassen. Nur die VSt und AusDatum möchte ich gerne dann als Vorlage für alle 30 Abfragen haben. Ich gebe zu, in dieser Art habe ich sowas noch nie gesehen und nochmal zugegeben, aber auch nicht so gelernt. Was es alles so gibt...Eine Frage habe ich aber doch. Muss ich für "Abfrage1" meine Abfragenamen verwenden, davon ich ja 30 habe, die immer anders benannt sind? Kann man denn nicht ein Formular machen, dort die Kriterien reinschreiben und in der Abfragen bei Kriterien sowas wie "Formularname.Bezeichnung" (oder so ähnlich) reinschreiben. In das Formular würde ich dann das Kriterium reinschreiben " Null oder >=01.01.2023". Hm... ich muss mal schauen, ob ich dir eine abgespeckte DB geben kann. Das wird aber dauern, da ich zur Zeit doch einiges zu tun habe. Da bitte ich dich dann doch um Geduld.
     
  13. Doming
    Doming hat Ahnung

    Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder

    Moin,
    natürlich musst Du das nicht „Abfrage1” nennen, aber es war von meiner Warte aus schwierig, Deine Abfragenamen zu erraten.
    Du hast Deine Abfragen und weißt, was Du brauchst. Ich habe versucht, die ganze Geschichte universell aufzuziehen, deswegen sind es bei mir ein paar Tabellen mehr geworden. Dafür kannst Du jetzt beliebig viele Kriterien eintragen, die alle abgearbeitet werden.
    In meinem ersten Entwurf gab es auch nur Kriterium1 und Kriterium2, aber das wäre ruckzuck zum Bumerang geworden, wenn man dann doch mal gerne noch ein Kriterium hinzufügen will. Deswegen die m:n-Tabelle.

    So könnte ein Eingabeformular aussehen, aber es ist besser, wenn Du es selbst erstellst, dann sind auch alle Kriterien drin, die ich sonst nur erraten kann
    Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder upload_2024-9-23_9-8-8.png
    Gruß
    Doming
     
  14. Fantom05 Neuer User
    Hallo Doming,
    danke für deine Information. Wie schon geschrieben, für mich ist diese Art der Kriterienabfrage neu. Ich versuche das mal umzusetzen.
    Gruß
    Fantom
     
  15. Doming
    Doming hat Ahnung
    Hallo,
    der Vollständigkeit halber noch der dahinterliegende Code
    Code:
    Option Compare Database
    Option Explicit
    
    Private Sub cbxAbfrName_NotInList(NewData As String, Response As Integer)
     Dim NewID As Long
        CurrentDb.Execute "INSERT INTO tbl_Abfragen (Abfragename) VALUES ('" & NewData & "')"
        NewID = DMax("aID", "tbl_Abfragen")
        Me.Refresh
        Me.cbxAbfrName = NewID
    End Sub
    
    Private Sub OptOperand_AfterUpdate()
        Me.TxWert.Enabled = Me.OptOperand < 4
        Me.TxMaxWert.Enabled = Me.OptOperand = 2
    End Sub
    
    Private Sub TxMaxWert_AfterUpdate()
     Dim Zwischen
        If Me.TxMaxWert < Me.TxWert Then
            Zwischen = Me.TxWert
            Me.TxWert = Me.TxMaxWert
            Me.TxMaxWert = Zwischen
        ElseIf Me.TxMaxWert = Me.TxWert Then
            Me.TxMaxWert = ""
            Me.OptOperand = 1
        End If
    End Sub
    
    Private Sub BtnSave_Click()
     Dim cDB As DAO.Database
     Dim ExlID As Long, KritID As Long
     Dim strSQL1 As String, strSQL2 As String, strSQL3 As String, strSQL4 As String
    
        Set cDB = CurrentDb
       
        ExlID = Nz(DLookup("bID", "tbl_Bedingung", "ExlSpalte = '" & Me.TxExlSpalte & "'"), 0)
        If ExlID = 0 Then
            strSQL1 = "INSERT INTO tbl_Bedingung(ExlSpalte) VALUES (" & Me.TxExlSpalte & ")"
            cDB.Execute strSQL1, dbFailOnError
            ExlID = DLookup("bID", "tbl_Bedingung", "ExlSpalte = '" & Me.TxExlSpalte & "'")
        End If
        strSQL2 = "INSERT INTO tbl_Kriterien(FS_Abfrage, FS_Operand,FS_Bedingung) " _
                & "VALUES (" & Me.cbxAbfrName & ", " & Me.OptOperand & ", " & ExlID & ")"
        cDB.Execute strSQL2, dbFailOnError
        KritID = DMax("mnID", "tbl_Kriterien")
       
        Select Case Me.OptOperand
            Case 2:
                strSQL3 = "INSERT INTO tbl_KWerte(FS_Kriterium, FS_Attribut, Wert) " _
                        & "VALUES (" & KritID & ", 1, " & Me.TxWert & ")"
                cDB.Execute strSQL3, dbFailOnError
               
            Case 3:
                strSQL3 = "INSERT INTO tbl_KWerte(FS_Kriterium, FS_Attribut, Wert) " _
                        & "VALUES (" & KritID & ", 1, " & Me.TxWert & ")"
                cDB.Execute strSQL3, dbFailOnError
                strSQL4 = "INSERT INTO tbl_KWerte(FS_Kriterium, FS_Attribut, Wert) " _
                        & "VALUES (" & KritID & ", 2, " & Me.TxMaxWert & ")"
                cDB.Execute strSQL4, dbFailOnError
               
            Case 4
                strSQL3 = "INSERT INTO tbl_KWerte(FS_Kriterium, FS_Attribut) " _
                        & "VALUES (" & KritID & ", 0)"
                cDB.Execute strSQL3, dbFailOnError
        End Select
        Me.Requery
    End Sub
    
    Private Sub Zeilklick()
        Me.TxWert = ""
        Me.TxMaxWert = ""
        Me.TxExlSpalte = Me.DxExlSpalte
        Select Case Me.DxoID
            Case 2:
                If Nz(Me.DxWert, "") = "" Then
                    Me.OptOperand = 4
                    Me.TxWert = Me.DxWert
                ElseIf Me.DxAttribut = ">=" Then
                    Me.TxWert = Me.DxWert
                    Me.OptOperand = 5
                Else
                    Me.TxWert = Me.DxWert
                    Me.OptOperand = 2
                End If
            Case 4:     Me.TxWert = Nz(DLookup("Wert", "tbl_KWerte", "FS_Attribut = 1"), "")
                        Me.TxMaxWert = Nz(DLookup("Wert", "tbl_KWerte", "FS_Attribut = 2"), "")
                       
        End Select
        Me.TxMaxWert.Enabled = Me.DxoID = 4
    End Sub
    
    Private Sub DxAttribut_Click()
        Zeilklick
    End Sub
    
    Private Sub DxExlSpalte_Click()
        Zeilklick
    End Sub
    
    Private Sub DxOperand_Click()
        Zeilklick
    End Sub
    
    Private Sub DxWert_Click()
        Zeilklick
    End Sub
    
     
    1 Person gefällt das.
Thema:

Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder

Die Seite wird geladen...
  1. Mehrere Abfragen mit gleichen Kriterien in bestimmten Felder - Similar Threads - Abfragen gleichen Kriterien

  2. Abfrage mit leeren Feldern

    in Microsoft Access Hilfe
    Abfrage mit leeren Feldern: Hallo zusammen Meine Access-Kenntnisse beschränken sich leider wirklich auf ein Minimum aber trotzdem möchte ich mich hier in diesem Bereich ein wenig weiterentwickeln :-) Ich habe eine Datenbank...
  3. Import Daten aus Access Abfrage klappt nicht

    in Microsoft Excel Hilfe
    Import Daten aus Access Abfrage klappt nicht: Moin, ich habe ein Problem. Ich habe eine Datenbank in Access mit diversen Tabellen und Abfragen. Jetzt habe ich eine neue Abfrage erstellt und muß das Ergebnis täglich in eine Exceldatei...
  4. Abfrage: Höchster Wert in Spalte X bei ähnlichen (nicht exakt gleichen) Datensätzen

    in Microsoft Access Hilfe
    Abfrage: Höchster Wert in Spalte X bei ähnlichen (nicht exakt gleichen) Datensätzen: Hallo Access-Freunde, mich plagt momentan ein kleines Problem. Ich habe eine Abfrage, die vereinfacht folgendes Ergebnis bringt: Bereich..........Funktion..........Nummer...
  5. Abfrage: gleiche Werte nur einmal anzeigen

    in Microsoft Access Hilfe
    Abfrage: gleiche Werte nur einmal anzeigen: Hallo Ich habe folgende abgefragte Daten: Zahlen Datum 1 1. Juli 2005 2 3. August 2006 2 3....
  6. Per Abfrage alle Datensätze anzeigen, die in einem Feld gleichen Wert haben

    in Microsoft Access Hilfe
    Per Abfrage alle Datensätze anzeigen, die in einem Feld gleichen Wert haben: Hallo zusammen, ich möchte folgendes erreichen: Ich habe eine Tabelle mit Kundenadressen. Nun möchte ich, dass mir eine Abfrage alle die Datensätze auswirft, die im Feld "firma" den gleichen...
  7. Links auf Abfragen in der gleichen Datenbank – Interne Links aktivieren (Office 365)

    in Microsoft Access Hilfe
    Links auf Abfragen in der gleichen Datenbank – Interne Links aktivieren (Office 365): Guten Tag, hier mein Problem: In einem Textfeld einer Tabelle / eines Formulars innerhalb einer ACCESS-Datenbank will ich einen (Hyper-)Link auf eine bestehende Abfrage innerhalb der gleichen...
  8. Abfrage größer kleiner gleich

    in Microsoft Excel Hilfe
    Abfrage größer kleiner gleich: Hallo ich habe jetzt seit Stunden verzweifelt versucht eine Lösung zu finden für mein Problem aber hatte keinen Erfolg. Ich will in einer Zelle folgende Abfragen laufen lassen: 1....
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden