Mehrere Recordsets zusammenführen

Woll0r

Mitglied
Hallo,

ich habe bis zu 12 gleich strukturierte Datenbanken von denen ich je DB eine Tabelle auslesen und in einem Datagrid anzeigen will. Mein bisheriger Ansatz ist zu jeder DB eine Connection aufzubauen und so viele Recordsets zu bilden wie ich Datenbanken habe. Jetzt müsste ich nur noch die Recordsets zu einem Recordset zusammen fügen können und könnte dieses Recordset dann in dem Datagrid anzeigen lassen. Gibt es einen Befehl um Recordsets zusammen zu fügen?

Wäre vielleicht auch eine SQL Lösung denkbar? Dort wäre halt nur das Problem dass ich beim Erstellen des Recordsets ja nur auf eine Connection, sprich auf eine Datenbank zugreifen kann.

Ich hoffe ich habe das Problem hinreichend beschrieben.

Hat jmd mit einem ähnlichen Problem Erfahrung und könnte mir helfen?

Grüße Woll0r
 
Mit was für einer Datenbank arbeitest du ?

Es gäbe die Möglichkeit das über ein SQL zu lösen ( union Join wäre da die Idee )
Wenn du nicht mit einem UNION im SQL arbeiten willst kannst du die Datensätze mit der Ado nur in ein "neues" Recordset kopieren bzw. die Datensätze alle an eins dranhängen.

Grüsse bb
 
access ist die datenbank.

in ein neues recordset alle daten zu kopieren bzw anzuhängen ist genau was ich suche, wie mach ich das genau ?


union würde glaub ich ja nicht funktionieren weil ich ja immer nur auf eine connection sprich eine datenbank zugreifen kann
 
Zuletzt bearbeitet:
Du kannst dir mit einem Ado Recordset ein temporäres Recordset erstellen

dort kannst du dann dein 1. Recordset mittels Recordset.clone reinkopieren die anderen 11 musst du dann aber mit add hinzufügen und das kann dauern.

ich würde eher versuchen das über ein Union über alle 12 Datenbanken lösen bsp:

SQL:
Select Feld1 From Tabelle1 UNION Select Feld1 FROM Tabelle1 in ["D:\Datenbank2.mdb"] UNION Select Feld1 FROM Tabelle2 in  ["D:\Datenbank3.mdb"] .....

Dies sollte deutlich schneller sein als durch 11 Recordsets zu schleifen und dann jedes Element einzufügen.

Grüsse bb
 
Zuletzt bearbeitet von einem Moderator:
das sql bsp schaut recht gut aus, muss ich dann keine connection mehr für die einzelnen datenbanken definieren?
 
also die datei ist passwort geschützt, aber habe zum testen das passwort erstmal rausgenommen.

das ganze funktioniert aber nicht.

bist du sicher dass die syntax bei deinem bsp richtig ist? weil z.B.

IN ["D:\Datenbank2.mdb"]

ist schon problematisch weil VB bei den " ja denkt der string wäre zu ende

ich hab erstmal nur 2 datenbanken versucht zu verknüpfen. das ganze sieht wie folgt aus:

rs_uebersicht.Open "SELECT tbl_vertraege.Mitarbeiter, tbl_mitarbeiter.Name, Count(tbl_vertraege.mitarbeiter) As Anzahl, Ziel, anzahl/" & akttag & "*" & anzahltagemonat & " as Prognose FROM tbl_vertraege, tbl_Mitarbeiter WHERE tbl_Mitarbeiter.IDnr = tbl_vertraege.mitarbeiter GROUP BY tbl_vertraege.mitarbeiter, tbl_mitarbeiter.Name,ziel UNION SELECT tbl_vertraege.Mitarbeiter, tbl_mitarbeiter.Name, Count(tbl_vertraege.mitarbeiter) As Anzahl, Ziel, anzahl/" & akttag & "*" & anzahltagemonat & " as Prognose FROM tbl_vertraege, tbl_Mitarbeiter IN [" & App.Path & "\shop01" & cbo_jahr.Text & ".mdb] WHERE tbl_Mitarbeiter.IDnr = tbl_vertraege.mitarbeiter GROUP BY tbl_vertraege.mitarbeiter, tbl_mitarbeiter.Name,ziel", cn, adOpenDynamic, adLockPessimistic

wobei cn ist verbindung zur ersten datenbank ist.

das ganze produziert folgenden fehler:

Das Datenbankmodul kann '[C:\Kopie von Shopsoft\shop012007.mdb]' nicht finden. Stellen Sie sicher, dass es sich um einen gültigen Parameter oder Alias-Namen handelt, der keine ungültigen Zeichen oder falsche Zeichensetzung enthält und dessen Name nicht zu lang ist

kannst du damit was anfangen?
 
Ich empfehle, alle MDB's in einer neuen MDB zu verknüpfen. Dann kannst Du über SQL-Joins auf alle benötigten Informationen zugreifen, z.B.

SELECT Tabelle1.Feld1,Tabelle2.Feld2 FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle2.Id=Tabelle1.Id

Dann genügt auch nur eine Connection auf diese neue MDB (die letztlich keine eigenen Tabelle beinhaltet, sondern nur die Verknüpfungen auf die Tabellen aller enthaltenen MDB's). Das ist auch vom Zeitverhalten her schneller ist (der Aufbau einer Connection dauert gerade im Netz und bei großen Datenbanken).

Soviel ich weiß erlaubt Access keine Joins über unterschiedliche MDB's.

Ich hoffe, das hilft Dir.

Viele Grüße
Ronald
 
IN ["D:\Datenbank2.mdb"]

ist schon problematisch weil VB bei den " ja denkt der string wäre zu ende


Deswegen nimmt man dann einfach tüddel '

aber die Idee mit den verknüpften Tabellen finde ich auch besser :D


Grüsse bb


EDIT : Nein ich war mir nicht sicher ob die Syntax richtig ist nimm die [] Klammern weg dann sollte es funktionieren
 
Zuletzt bearbeitet:
huhu ronald
das manuelle vorherige zusammenfügen der mdbs ist leider auf aus organisatorischen gründen nicht möglich

@brainbyte

ich hab den fehler jetzt gefunden, ich habe einfach [" und "] durch ' ' ersetzt und damit hab ich die 2 Datenbanken verknüft bekommen. Viele Dank

Jetzt habe ich nur das Problem, dass ich halt irgendwie das Passwort mit an die Datenbank übergeben muss, sonst bringt mir das ganze leider nichts, weisst du wie das geht?
 
Zurück