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. Datenbank

    Ich 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-Datenquelle

    helper 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.


Anmelden zum Antworten