Datenbank: Join von zwei Recordsets

Hi,
ich habe in VB zwei Access-Datenbanken db1.mdb und db2.mdb. Ich möchte jetzt irgendwie an ein Recordset kommen, welches Daten aus beiden anderen Recordset enthält. Bei nur einer Datenbank wäre das einfach eine SQL-Anweisung „SELCT * FROM T1,T2“. Da jetzt aber die zwei Recordsets T1 und T2 in verschiedenen Datenbankdateien sind, wie bekomme ich das hin??

Ralph

richtiges Forum
Salü Ralph

Ist das eine Acessfrage oder geht es um eine VB / VBA Routine?
SQL Fragen sind ebenfalls nicht Bestandteil dieses Forums.

Es ist keine Schulmeisterei, sondern einfach für uns alle angenehmer, wenn die Dinge geordnet ablaufen… okay? :wink:

Grüsse Peter

Wer weiss…
Wenn ich das selbst wüsste…

Es geht im konkreten um recordset-Objekte in VB, also eine VB-Frage…

Aber ich probiers mal woanders,

Ralph

Hi Ralph

Danke das Du meine Frage bereits beantwortet hast! :wink:
Aus Deiner Antwort vermute ich, dass die Finger schneller am
codieren waren, als Du Zeit hattest (bekamst…) um ein
Konzept für Dein Programm aufzustellen.

Typischerweise sind VB / DB Geschichten dreistufig (grosse Fische auch n stufig…):
-GUI
-Logik
-Daten

Aus meiner Sicht (IMHO) hast Du ein Datenproblem. Der Ansatz es mit der Logik zu beheben ist nicht ideal. Ich empfehle Dir die Daten zuerst in einer DB zusammen zu ziehen und danach die Logik
der Front-Ends zu schreiben.
Last but not least, je nach Datenmenge würde ich mir eine richtige DB zulegen - eher früher als später. Ob jetzt SQL-Server, das beliebte Oracel oder eine der OpenSource Varianten.

Grüsse Peter

PS:
Danke das Du mein vorheriges Posting nicht wie so viele mit Ignoranz oder dem üblichen egozentrischen „ist mir egal, ich brauche hilfe!“ („Säuglings-syndrom“) reagierst.

Wie wär’s, wenn auch mal jemand auf die Frage antw

PS:
Danke das Du mein vorheriges Posting nicht wie so viele mit
Ignoranz oder dem üblichen egozentrischen „ist mir egal, ich
brauche hilfe!“ („Säuglings-syndrom“) reagierst.

Das mache ich dafür jetzt :wink:
Mir wäre daran gelegen, dass hier die Fragen beantwortet wären, das ist alles. Ich will auch keine Artikel: „Warum nimmst du VB?“ oder ähnliches. Mein Problem ist: Ich habe zwei recordsets (mit dem o.g. Problem), und will in VB einen outer join machen.
Das Orginalprogramm ist nicht von mir, sondern soll nur von mir geändert werden, ohne es komplett neu zu schreiben. Und die DB’s können auch nicht geändert werden, sonst hätte ich alles in eine gepackt und könnte das mit SQL-Befehlen leicht lösen.

Ralph
P.S. Da ich in Kürze meine DA am Lehrstuhl für Softwaretechnik der RWTH-Aachen schreibe, kenne ich sogar die Modell-View-Controller-Architektur (Oder wie du sie auch nennst)…

Richtigstellung

Wenn ich das selbst wüsste…

Beim obigen Satz handelt es sich um eine Aussage darüber, ob dies das richtige Brett dafür ist. Nicht dass nachher jemand denkt, ich wüsste nicht, was ich tue.

Sprache ganz klar VB: DAT-Steuerelement / RECORDSET-Objekte…

Ralph (Nächste mal drücke ich mich direkt klar aus :smile:

Nachdem es sich um zwei Access-DB’s handelt, ist es ganz einfach. Du kannst über Datei/Importieren eine Verknüpfung zur zweiten DB und deren Tabellen und Abfragen herstellen. Auf diese kannst Du dann zugreifen, als wären sie Bestandteil der jeweils anderen DB.
Unter VB gibt es noch eine elgantere Lösung (falls Du die Tabellen dynamisch generierst), aber die muß ich selber erst ausprobieren, bevor ich etwas poste.

Sollte das nicht ausgereicht haben, kurzes posting und ich werde mich der Sache annehmen.

Konkret!
Hi Ralph

Also ich habe das so verstanden:
Du willst n Recordsets aus zwei Access Datenbanken (Version?) in
einem neuen Recordset zusammenfassen.
Als Mittel soll VB6, DataControl und Recordset zum einsatz kommen.

Lösungsansätze:
Wenn Du lediglich mit Access DB zu tun hast und keine Komplikationen wie Transaktion zu handhaben sind, würde ich als Middleware „DAO“ empfehlen. Wesentlich schneller und einfacher
für Access - DB.
VB kann nicht nativ auf Datenbanken zugreifen, dazwischen ist Middelware in Form von COM-Komponenten.
VB6 DataControl spricht aber nur ADO, daher muss von Hand - sprich mit DAO Obj. gearbeitet werden. Also muss zuerst ein Verweis auf die DAO Library (Version abhängig von Acess Version) eingetragen werden.
Eine Access-DB hat „TableDef“ oder „QueryDef“ Objekte, wobei letztere Recordsets sind.
Da die Daten in den Tabellen und nicht in den Querys sind, gehe ich davon aus das
Du auf die Tabellen und nicht auf die Recordsets zugreifen willst.

Mein Lösungsvorschlag:
Verknüpfe „temporär“ die Tabellen aus DB2 in DB1. Danach hast
Du alle Tabellen in einer DB. Das folgende Code Bsp. verwendet die mitgelieferten DBs Nwind.mdb und Biblio.mdb. Es kann in ein Accss oder VB6-Modul sein, aber in jedem Fall
musst Du einen Verweis auf die richtige DAO-Library setzen:

**************
Dim dbsBase As Database
Dim dbsLinked As Database
Dim tdfLinked As TableDef
Dim rssample As Recordset

Set dbsBase = OpenDatabase(„BIBLIO.MDB“)
Set dbsLinked = OpenDatabase(„NWIND.MDB“)
Set tdfLinked = dbsLinked.CreateTableDef(„TablefromDB2“)

’ Create a link to the new table in first database.
tdfLinked.SourceTableName = „Authors“
tdfLinked.Connect = „;DATABASE=“ & „BIBLIO.MDB“
dbsLinked.TableDefs.Append tdfLinked
dbsLinked.TableDefs.Refresh
Set rssample = dbsLinked.OpenRecordset(„Select * from TablefromDB2, Customers“)
rssample.MoveLast
rssample.MoveFirst
Debug.Print rssample.RecordCount
'dele table link
dbsLinked.TableDefs.Delete „TablefromDB2“
dbsLinked.Close
Set dbsLinked = Nothing
************************************

Ich werde noch ein wenig in den Büchern schmökern ob es mit Transact-SQL und ADO einen abartigen anderen Dreh gibt :wink:

Grüsse Peter

Thx
Das ist doch mal ne Antwort :wink:

Ralph

Wer weiss…
Hi Ralph

Danke für den Stern!

Entschuldige bitte, aber ich erlaube mir dennoch skeptisch zu bleiben :frowning:. Du hast mir in die Frage viel zu wenig (Vor-!)Überlegung und Hintergrundwissen gesteckt, als das ich überzeugt bin das dieses Softwareteil ein durchdachtes Softwarestück wid…

Wünsche Dir viel Erfolg.

Grüsse Peter