Datenbankabfrage aus 2 oder mehr verschiedenen Datenbanken

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Blaupunkt79.

    Datenbankabfrage aus 2 oder mehr verschiedenen Datenbanken

    Hallo Zusammen,

    nachdem ich bei meinem Projekt ein ganz gutes Stück voran gekommen bin, nun noch die Frage, inwieweit ich eine Access Abfrage auf 2 oder mehr Datenbanken ausweiten kann.

    In den Datenbanken sind Bewegungsdaten vorhanden, je Datenbank ist 1 Monat abgebildet, jeder Monat hat ca. 500MB, bedeutet, die Datenbanken sind gleich aufgebaut.

    Anbei eine beispielshafte SQL Abfrage, dass Programm durchsucht hierbei bestimmte Datenbank, z.b. Monat 10_2021, nun würde ich die Suche gerne auf 07_2021-10_2021 ausweiten

    VB.NET-Quellcode

    1. SELECT * FROM umsatz9 as U
    2. where U.Art IN ('Abholung','Lieferung',"")
    3. And U.cluster IN ('HDL','SONSTIGE')
    4. And U.Warengruppe_Text IN ('BABY GESCHIRR','BABY WINDELN','BABY-PFLEGEPRODUKTE','BABY-SPIELZEUG')
    5. AND NOT EXISTS (SELECT NULL FROM umsatz9 AS X WHERE X.Kunde = U.Kunde
    6. AND Warengruppe_Text IN ('BIER MIT ALKOHOL','BIER OHNE ALKOHOL','BIERMISCHGETR. M ALK','BIERMISCHGETR. O ALK'))


    Alternativ könnte ich auch Datenbanken zusammenführen, hier gehen allerdings nur 3 Monate, da sonst die 2 GB überschritten würde.

    Hoffe, es kann mir jemand helfen.

    Danke

    Gruß

    Mirko

    Blaupunkt79 schrieb:

    Alternativ könnte ich auch Datenbanken zusammenführen, hier gehen allerdings nur 3 Monate, da sonst die 2 GB überschritten würde.
    Du kannst auch Tabellen aus anderen Datenbanken ins Access verlinken.
    Erstelle für jeden Monat eine DB und verlinke sie alle als externe Tabelle in einer Access-DB.
    datanumen.com/blogs/link-one-access-database-another/
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ganz ehrlich, ich stehe bei dem Verlinken total auf dem Schlauch, verwende Excel 2019.

    Wäre in meinem Fall der INNER JOIN Befehl angebracht?

    VB.NET-Quellcode

    1. " SELECT * " & _
    2. " FROM umsatz9 as U INNER JOIN umsatz9 as u"


    Wobei das auch keinen Sinn ergibt. :(

    Könntest Du mir ein wenig unter die Arme greifen, ist eine sehr wichtige Funktion, um einfach mehr Daten aufeinmal zu filtern.

    Danke

    Gruß

    Mirko
    Ich habe zwar deine Konstellation noch nicht verstanden, aber ich tippe eher, dass die Verwendung von UNION weiterhelfen könnte.

    Deine Beschreibungen und Tags sind widersprüchlich.
    Was ist denn jetzt deine Umgebung, in der die Query abgesetzt wird. Excel, Access, ein VB.Net-Programm?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo,

    es ist ein Programm / Tool, welches ich mit Excel / VBA geschrieben habe, anbei mal ein Screenshot:



    Der User kann verschiedene Filter setzen und das Programm durchsucht die besagte Umsatzdatenbank (Access; Abfrage via DAO Recordset von VBA aus) und spuckt dann Ergebnisse aus. Jetzt ist es halt so, dass die Abfrage immer nur auf die ausgewählte Umsatzdatenbank beschränkt ist und das würde ich gerne auf mehrere Datenbanken ausweiten.

    Anbei die Datenbankabfrage, in filter(n) sind die einzelnen Filter enthalten, insofern der User einen Filter auswählt.

    VB.NET-Quellcode

    1. [url='https://i.postimg.cc/tC9Wv8TX/Bild-Forum.jpg']
    2. [/url]Set DB = DBEngine.OpenDatabase(aktuelle_datei, True, False)
    3. filter(0) = " SELECT * " & _
    4. " FROM umsatz9 as U "
    5. For j = 0 To filteranzahl
    6. sqlsearch = sqlsearch & filter(j)
    7. Next j
    8. Set rec_adr = DB.OpenRecordset(sqlsearch)[url='https://i.postimg.cc/tC9Wv8TX/Bild-Forum.jpg']
    9. [/url]


    Beispiel für eine Filterabfrage:

    VB.NET-Quellcode

    1. [url='https://i.postimg.cc/tC9Wv8TX/Bild-Forum.jpg']
    2. [/url]'Disposperre Filter
    3. j = 0
    4. Set DB1 = DBEngine.OpenDatabase(laufwerk & "\disposperre.mdb", True, False)
    5. Set rec_adr1 = DB1.OpenRecordset("disposperre9")
    6. If rec_adr1.RecordCount > 0 Then
    7. filteranzahl = filteranzahl + 1
    8. rec_adr1.MoveFirst
    9. Do While rec_adr1.EOF = False
    10. j = j + 1
    11. If j = 1 Then filter(filteranzahl) = filter(filteranzahl) & " And U.Disposperre IN ('" & CStr(RTrim(rec_adr1!disposperre)) & "'"
    12. If j > 1 Then filter(filteranzahl) = filter(filteranzahl) & ",'" & CStr(RTrim(rec_adr1!disposperre)) & "'"
    13. rec_adr1.MoveNext
    14. Loop
    15. filter(filteranzahl) = filter(filteranzahl) & ")"
    16. DB1.Close
    17. Else
    18. DB1.Close
    19. End If[url='https://i.postimg.cc/tC9Wv8TX/Bild-Forum.jpg']
    20. [/url]


    Ich hoffe, es ist ein wenig verständlicher geworden.

    Danke

    Gruß

    Mirko
    Hallo,

    habe es mit Hilfe nun hinbekommen, anbei eine beispielhafte Datenbankabfrage:

    SQL-Abfrage

    1. SELECT * FROM umsatz9 as U
    2. where U.Art IN ('Abholung','Lieferung',"")
    3. And U.kunde IN (SELECT kunde FROM [C:\Users\admin\Desktop\BV_Master\System\\kundead.mdb].kundead9
    4. WHERE cluster IN ('HDL','SONSTIGE'))
    5. And U.Artikel IN (SELECT Artikel FROM [C:\Users\admin\Desktop\BV_Master\System\\artikelstamm.mdb].artikelstamm9
    6. WHERE warengruppe_text IN ('BABY GESCHIRR','BABY WINDELN','BABY-PFLEGEPRODUKTE','BABY-SPIELZEUG'))
    7. AND
    8. NOT EXISTS (SELECT NULL FROM umsatz9 AS X WHERE X.Kunde = U.Kunde And
    9. Artikel IN (SELECT Artikel FROM
    10. [C:\Users\admin\Desktop\BV_Master\System\\artikelstamm.mdb].artikelstamm9
    11. WHERE Warengruppe_Text IN ('BIER MIT ALKOHOL','BIER OHNE ALKOHOL','BIERMISCHGETR. M ALK','BIERMISCHGETR. O ALK')))


    Gruß

    Mirko