Announcement

Collapse
No announcement yet.

OpenRowSet in D5 mit ADOExpress

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • OpenRowSet in D5 mit ADOExpress

    Hi,

    möchte aus einer Tabelle in einer Access-Datenbank bestimmte Spalten in die Tabelle eine anderen Access-Datenbank übernehmen. Der Commandtext des TADOCommand sieht so aus:

    Insert into Tab1 (sp1,sp2) select a.col1, a.col2
    from openrowset('Microsoft.Jet.OLEDB.4.0','c:\temp\test .mdb';
    'Admin';'','select * from Tab2') as a

    Nach dem Execute kommte immer der Fehler "Syntaxfehler in FROM-Klausel". Hat jemand eine Idee, woran es liegen könnte.
    Leider hat mich weder die MS-MSDN noch "ADO und Delphi" weiter gebracht.

    Gruß Volker

  • #2
    Hallo,

    die OPENROWSET-Anweisung gehört zum MS SQL Server und somit zum OLE DB-Provider für den MS SQL Server. Da aber für beide Datenbanken die Microsoft JET Engine genutzt wird, steht dieser bequeme Weg nicht zur Verfügung. Am einfachsten wird es sein, diesen Job in 2 Schritte aufzuteilen:

    Schritt 1: Die komplette Tabelle wird von der "alten" in die "neue" ACCESS-Datenbank exportiert (Hilfstabelle)
    <pre>
    procedure TForm1.ButtonExportClick(Sender: TObject);
    resourcestring
    cSQL3 = 'SELECT * INTO [%s] IN "C:\Temp\%s" FROM Customer';
    var
    sSQL : String;
    iRows: Integer;
    begin
    sSQL := Format(cSQL3, ['Cust', 'Export.MDB']);
    ADOConnection1.Connected := True;
    ADOConnection1.Execute(sSQL, iRows);
    ADOConnection1.Connected := False;
    ShowMessage(Format('Es wurden %d Datensätze exportiert.', [iRows]));
    end;
    </pre>

    Schritt 2: Von dieser Hilfstabelle werden die gewünschten Spalten in die echte Tabelle kopiert - da nun alle Tabellen in der gleichen ACCESS-Datenbank sind, ist das über SQL möglich

    Comment


    • #3
      Hallo Herr Kosch,

      habe ich mir fast schon gedacht. Danke für den Tip!

      G V

      Comment

      Working...
      X