mit ADO-Query auf zwei Datenbanken zugreifen
-
Hallo,
ich habe zwei SQL-Datenbanken, in einer befindet sich die Tabelle "T_1" und in der zweiten befindet sich die Tabelle "T_2". Nun möchte ich mit einem ADO-Query Daten aus den beiden Tabellen holen. Soweit ich weiß kann einem ADO-Query nur eine ADO-Connection zugewiesen werden, so dass man gleichzeitig auf zwei Datenbanken nicht zugreifen kann, sondern immer nur auf eine.
Weiß trotzdem jemand, wie man mit einem ADO-Query auf zwei Datenbanken gleichzeitig zugreifen kann?
Vielen Dank
-
Hallo
Was verstehst du unter gleichzeitig zugreifen?
Wenn du zwei unabhängige Abfragen machen willst dann brauchst du zwei Query-Objekte.
Wenn du eine Abfrage machen willst die aber eine Datenmenge zusammengesetzt aus beiden zurückgeben soll brauchst du ein Query-Objekt mit einer SQL-Anweisung die zum Beispiel ein JOIN enthält. Schau dir am besten ein SQL-Tutorial an.bis bald
akari
-
Danke für die Antwort!
akari schrieb:
Wenn du eine Abfrage machen willst die aber eine Datenmenge zusammengesetzt aus beiden zurückgeben soll brauchst du ein Query-Objekt mit einer SQL-Anweisung die zum Beispiel ein JOIN enthält
Das brauche ich.
folgendes habe ich versucht:
AnsiString sSQL1 = "SELECT DISTINCT datenquelle_1.tabelle_1.feld FROM datenquelle_1.tabelle_1 "; sSQL1 += " WHERE datenquelle_1.tabelle_1.feld_1 = datenquelle_2.tabelle_2.feld_2"; if(ADOQuery1->Active) ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add(sSQL1); ADOQuery1->Open();
wobei:
datenquelle_1 = ODBC-Verbindung zur 1. Datenbank
datenquelle_2 = ODBC-Verbindung zur 2. DatenbankIch bekomme folgende Fehlemeldung:
[Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben
Die beiden Datenquellen stimmen aber.
Danke nochmals
-
Dringenst ein gutes Datenbanktutorial durcharbeiten.
-
welche Datenbank verwendest du denn? MySQL, MSSQL, Firebird....?
-
Linnea schrieb:
welche Datenbank verwendest du denn? MySQL, MSSQL, Firebird....?
-> MSSQL
-> Zugriff erfolgt über ODBC-Datenquellehelper schrieb:
Dringenst ein gutes Datenbanktutorial durcharbeiten.Mach ich.
Aber wo ist der Fehler in meiner SQL-Abfrage:
Zugriff erfolgt doch so:datenbank.tabelle.spalte
oder nicht?
Danke
-
schau mal in der MSDN
für MSSQL 2000 -> Link Beispiel D
für MSSQL 2005 -> Link Beispiel C[Edit] noch eine einfachere Alternative:
der ConnectionString muß nicht auf eine bestimmte Tabelle gestellt werden, z.b:
"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=(Local)"dann kannst du z.B. folgendes abfragen
ADOCommand1->CommandText = "SELECT * FROM [datenbank1].[dbo].[tabelle1] union \ SELECT * FROM [datenbank2].[dbo].[tabelle1]"; ADODataSet1->Recordset = ADOCommand1->Execute();
-
Das sind viel versprechende Tips.
Vielen Dank @Linnea.