Hallo,
ich hätte eine Frage, ob es möglich wäre, eine Abfrage via DAO Recordset in Excel VBA zu formulieren, die 2 Datenbanken umfaßt?
Datenbank 1: Umsatz (mit Spalten: Artikel, Bezeichnung, Kundennummer)
Datenbank 2: Kunden (mit Spalten: Kundennummer, Strasse, Ort, Branche)
Nun würde ich gerne eine Abfrage formulieren:
SELECT * FROM Umsatz
WHERE Kundennummer = (siehe unten)
SELECT * FROM Kunde
WHERE BRANCHE = 'IMBISS'
AND ORT = 'HAMBURG'
Ist es möglich, diese beiden Abfragen zusammenzuführen?
Danke vorab
Gruß
Mirko
Hallo,
mit "Datenbanken" sind "Tabellen" gemeint?
Öffne den Abfrageentwurf, wähle die beiden Tabellen aus und verbinde (verknüpfe) die über die Felder "Kundennummer".
Ziehe beide (Tabellen-)Sternchen in je eine Abfragespalte und zusätzlich und separat die Felder "Branche" und "Ort". Bei diesen beiden Feldern erhält Zeile "Kriterium" entsprechend "Imbiss" und "Hamburg".
Entferne den "Anzeige-Haken" bei den Feldern "Branche" und "Ort".
Teste die Abfrage.
Wenn ok, öffne dann die SQL-Ansicht und kopiere den SQL-String in den rs.Openrecordset-Parameter. Evtl. sind Anpassungen nötig (" --> ' ).
Guten Morgen,
danke für die Antwort.
Ich meine 2 separate Datenbanken mit jeweils 1 Tabelle.
Ist dies auch möglich?
Gruß
Mirko
Hallo,
???
Erstelle ein Verknüpfung (Externe Daten/Neue Datenquelle/Aus Datenbank/Access) in der einen DB zu der Tabelle in der 2. DB.
Zusammenführung der Abfragen:
SELECT
*
FROM
Umsatz
WHERE
Kundennummer =
(
SELECT
Kundennummer
FROM
Kunde
WHERE
BRANCHE = 'IMBISS'
AND
ORT = 'HAMBURG'
)
' oder
SELECT
U.*
FROM
Umsatz AS U
INNER JOIN
(
SELECT
Kundennummer
FROM
Kunde
WHERE
BRANCHE = 'IMBISS'
AND
ORT = 'HAMBURG'
) AS K
ON U.Kundennummer = K.Kundennummer
Wenn die Tabellen in unterschiedlichen Datenbanken liegen, muss man die Tabellen zusätzlich auf die Datenbank referenzieren, also der Gesamtanweisung mitteilen, wie sie denn Zugriff auf die jeweilige Tabelle bekommt.
Du redest von DAO-Zugriff. Da hast Du sehr sicher eine OpenDatabase-Anweisung, womit also auf eine der Datenbanken referenziert wird. Das könnte also die DB mit der Tabelle Umsatz sein (da Du mit SELECT * da etwas anfangen willst).
Die andere Tabelle (Kunden) ist in dieser DB nicht vorhanden und damit primär für eine Abfrage nicht verfügbar. Durch ein Verknüpfen in die Umsatzdatenbank wie genannt würde sie quasi zur internen Tabelle und damit zugreifbar.
Man kann die Referenz aber auch direkt in der SQL-Anweisung einstellen:
FROM Kunde
=>
FROM [X:\Irgendo\MeineKunden.accdb].Kunde
Saustark, es funktioniert!
sqlsearch = " SELECT U.* " & _
" FROM umsatz9 as U " & _
" INNER JOIN (" & _
" SELECT artikel " & _
" FROM [" & laufwerk & "\artikelstamm.mdb].artikelstamm9 " & _
" WHERE Disponent = '110') AS K " & _
" ON U.artikel = K.artikel "
Set rec_adr = DB.OpenRecordset(sqlsearch)
Jetzt werd ich alles ein wenig umschreiben müssen, ich schätz mal, dass dadurch die Datenbankabfrage etwas länger dauert oder?
Gruß
Mirko
Stecke gerade fest ...
SELECT *
FROM umsatz9 as U
where U.Art IN ('Abholung','Lieferung')
INNER JOIN (SELECT kunde FROM [C:\Users\admin\Desktop\BV_Master\System\kundead.mdb].kundead9
WHERE branche IN ('ITALIENISCHE SPEZIAL')) AS U
Kommt immer ein Syntaxfehler, fehlender Operator in Abfrageausdruck. Was mache ich falsch?
EDIT, so geht es:
" SELECT *
FROM umsatz9 as U
where U.Art IN ('Abholung','Lieferung')
AND U.Kunde IN (SELECT kunde FROM [C:\Users\admin\Desktop\BV_Master\System\kundead.mdb].kundead9
WHERE branche IN ('ITALIENISCHE SPEZIAL')) "
Danke
Gruß
Mirko
Guten Morgen,
jetzt habe ich mein Tool angepasst, funktioniert auch soweit, eine Frage habe ich, wie lasse ich nun sortieren?
Ein Beispiel:
SELECT * FROM umsatz9 as U
where U.Art IN ('Abholung','Lieferung',"")
And U.kunde IN (SELECT kunde FROM [C:\Users\admin\Desktop\BV_Master\System\\kundead.mdb].kundead9
WHERE cluster IN ('HDL','SONSTIGE'))
And U.Artikel IN (SELECT Artikel FROM [C:\Users\admin\Desktop\BV_Master\System\\artikelstamm.mdb].artikelstamm9
WHERE warengruppe_text IN ('BABY GESCHIRR','BABY WINDELN','BABY-PFLEGEPRODUKTE','BABY-SPIELZEUG'))
AND NOT EXISTS (SELECT NULL FROM umsatz9 AS X WHERE X.Kunde = U.Kunde And Artikel IN (SELECT Artikel FROM [C:\Users\admin\Desktop\BV_Master\System\\artikelstamm.mdb].artikelstamm9
WHERE Warengruppe_Text IN ('BIER MIT ALKOHOL','BIER OHNE ALKOHOL','BIERMISCHGETR. M ALK','BIERMISCHGETR. O ALK')))
Wie sortiere ich nun die Umsatzdatei (Tabelle: umsatz9) beispielsweise nach Warengruppe_text oder nach cluster? Geht mir speziell um die Spalten aus der 2. Datenbank, aus der Hauptdatenbank ist klar.
Danke
Gruß
Mirko
Hallo,
....... order by U.Warengruppe_text
anhängen.
Das Ergebnis einer Sortierung ist nur sichtbar, wenn es in der obersten Ebene der Abfrage stattfindet. Daher ist sie auch nur dort sinnvoll (mit Ausnahme von TOP-X-Gestaltungen).
Damit nach Feldern sortiert werden kann, müssen sie im betreffenden SELECT-Teil stehen oder zumindest stehen können, also über die Tabellen/Abfragen im FROM-Teil angeboten werden. Was hinter "SELECT * umsatz9" angeboten wird, kann mit vorliegenden Informationen keiner beurteilen (und mein Zauberstab ist mir gerade runtergefallen).
Wenn Deine anderen Tabellen nur im WHERE-Teil vorkommen, hast Du also keinen Zugriff mehr.
Man kann Abfragen unterschiedlich formulieren, wie Du oben bereits an einem kleinen Beispiel gesehen hast. Hat man also konkrete Anforderungen, die man gesamt und zusammenhängend wissen sollte, dann kann man den Versuch starten, eine passende Abfrageformulierung zu finden.
Bausteinhaft eine Anforderung nach der anderen umzusetzen und eine Abfrage erweitern zu wollen, kann gnadenlos schief gehen, sei es, dass man eine Abfrage in den Performance-GAU schickt oder man in eine Unlösbarkeit schlittert.
Nicht ganz am Rande:
Mittlerweile sind es drei unterschiedliche Datenbanken, und ein Suffix 9 lässt befürchten, dass da nur eine Tür zu einem Riesenraum geöffnet wurde. Warum gibt es keine richtige (EINE) Datenbank?
warengruppe_text IN ('BABY GESCHIRR','BABY WINDELN','BABY-PFLEGEPRODUKTE','BABY-SPIELZEUG')
Die Hardcodierung von Kriterien ist doch nicht wirklich praktikabel. Da sollte man ganz schnell Parameter einsetzen, die das ganze variabel gestalten und einem User einfachste Möglichkeiten geben, das abzufragen, was er selber will. Auch so etwas hätte dann wieder Einfluss auf die konkrete Abfragegestaltung.
Ich habe eine Kundendatenbank, eine Artikeldatenbank, bei den beiden Dateien update ich 1x im Monat auf neue Daten, speziell die Artikeldatenbank ist relativ groß (aktuell 273 MB), da ich dort sämtliche Informationen mit einfließen lasse, inklusive bis zu 10 verschiedener EAN-Codes pro Artikel.
Dann habe ich eine Umsatzdatenbank mit den Bewegungsdaten (Abverkäufe/Buchungen) für den jeweiligen Monat, sind pro Monat ca. 160 MB an Datenmaterial, vorher waren es deutlich mehr. Ich füge dann die jeweiligen Monate zu einer Umsatzdatenbank zusammen.
Das Tool liest sozusagen die ausgewerteten Daten in Excel ein, je nachdem, was für ein Filter der User auswählt. Die Auswahl der Filter läuft via Grafikicons, relativ einfach gehalten, ich lasse mir zwischendurch immer Feedbacks geben.
Ich werde die Sortierung dann einfach via Excel durchführen. (Spalten sortieren)
Speziell Access ist halt noch Neuland für mich, finde allerdings die Hilfe und den Ton hier sehr angenehm!
Danke
Gruß
Mirko
Zitatbei den beiden Dateien update ich 1x im Monat
Die Daten dazu dürften aus einer weiteren richtigen Datenbank stammen ...?
Ggf. könnte man diese nutzen.
In Excel, wo ja anscheinend Deine eigentliche Anwendung liegt, kann man per Power Query sehr komfortabel Datensätze aus Tabellen wie auch aus Sichten ziehen und dann mit datenbankgemäßen Methoden weiterverarbeiten.
Ja, die Daten zieh ich mir aus einem SAP System, aber auch hier 3 Abrufe (1x Kunde, 1x Artikelstamm und 1x die Umsätze)
Ob die irgendwo in einer Datenbank hängen weiß ich nicht, ist eher ein "Privatprojekt", um mir.
Mit Power Query kenne ich mich noch nicht so gut aus, mir war es eben wichtig, dass dieses Tool auch Leute bedienen können, die mit Excel nicht soviel am Hut haben. Es sind auch mehrere Auswertungen via einem Knopfdruck möglich, man kann sich die gesetzten Filter via "Favorit" abspeichern und später wieder aufrufen.
Habe eben mal meine Sortierfunktion überarbeitet, geht nun auch.
Schönen Rest 1. Advent
Gruß
Mirko