Announcement

Collapse
No announcement yet.

Access und DAO

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

  • Access und DAO

    Hallo,<br>wie kann man mittels DAO eine Tabelle aus einer Access-Datenbank in eine andere Access-Datenbank kopieren. Wenn die Tabelle in der Ziel---Datenbank enthalten ist, soll diese überschriben werden. <br>:-) Jens Schumann

  • #2
    Hallo,

    muss es denn unbedingt DAO sein - mit ADO könnte man folgendes machen:
    <pre>
    unit ExportToACCESSFrm;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, ADODB, Db, ComCtrls;

    type
    TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOCommand1: TADOCommand;
    Button1: TButton;
    StatusBar1: TStatusBar;
    MemoSQL: TMemo;
    procedure Button1Click(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    sSQL : String;
    iRows : Integer;
    begin
    MemoSQL.Lines.Clear;
    sSQL := 'SELECT * INTO [Cust] IN "C:\Temp\Test1.MDB" FROM Customer';
    MemoSQL.Lines.Add(sSQL);
    ADOConnection1.Connected := True;
    ADOConnection1.Execute(sSQL, iRows);
    ADOConnection1.Connected := False;
    ShowMessage(Format('Es wurden %d Datensätze exportiert.', [iRows]));
    end;

    end.
    </pre>
    Der wichtige Teil verbirgt sich hinter <b>SELECT * INTO [Cust] IN "C:\Temp\Test1.MDB" FROM Customer</b>, indem die Ziel-Datenbank sowie der Name der Zieltabelle direkt in der SELECT-Anweisung angegeben wird

    Comment


    • #3
      Hallo Herr Kosch,<br>ich denke schon. Meine Anwendung wird firmenintern eingesetzt und leider haben alle Anwender immer noch Win 95 / Office 97 (incl. Access97) und den IE 4.0. Deshalb setzt meine Anwendung auf die BDE und den nativen ACCESS Treiber. Mit dem IE 4.0 steht mir lediglich ADO 1.5 zur Verfügung. Da die Anwendung so gut wie fertig ist, müsste ich dann ADO und DAO mischen. Ich weiß nicht ob das eine gute Idee ist. Funktioniert Ihr Vorschlag denn mit ADO 1.5 ?<br> Jens Schuman

      Comment


      • #4
        Hallo,

        wenn die BDE verwendet wird, muss man ja nicht mit den orginalen DAO-Objekten hantieren, sondern kann auf den Komfort von <b>TBatchMove</b> zurückgreifen.<br>
        Mit ADO kann man auf alle ACCESS-Datenbankversionen zugreifen, da die neue JET Engine 4 auch mit den alten Formaten hantieren kann. <br>
        Außerdem darf man auf jedem Rechner eine aktuelle ADO-Version über das kostenfrei verteilbare MDAC-Setup von Microsoft installieren.

        Es gibt also sehr viele Lösungen für diese Aufgabe

        Comment


        • #5
          Hallo Herr Kosch,<br>TBatchmove habe ich schon oft verwendet. Ich dachte das Ding wäre nur für Paradox und dBase. Wie man TBatchmove auf eine mdb Datei anwendet muß ich mir erstmal überlegen. Z.Z. versuche ich es mit ADO (ohne ADO-Express). Klappt ganz gut. Wenn ich aber eine zweite Connection aufbauen will, erhalten ich die OLE -Fehler 80030002. Wo kann ich eigentlich nachschauen, was dieser Fehler bedeutet?<br>Hier ist der Source:<br>
          resourcestring<br>
          ConnectionStringSource='FILE NAME=IMP.UDL';<br>
          ConnectionStringDest='FILE NAME=dest.udl';<br>
          <br>
          procedure TForm1.FormCreate(Sender: TObject);<br>
          begin<br>
          FConnectionSource:=CoConnection.Create;<br>
          FConnectionSource.Open(ConnectionStringSource,'',' ',-1);<br>
          Caption:=Caption+'/ MDAC Version: '+FConnectionSource.Version;<br>
          FConnectionDest:=CoConnection.Create;<br>
          FConnectionDest.Open(ConnectionStringDest,'','',-1); <br>
          FConnectionSource und FConnectionDest sind im Privat-Abschnitt. Ich verwende, dank Ihrer Hilfe, mittlerweile ADO 2.6<br>
          <br>:-) Jens Schuman

          Comment


          • #6
            Hallo, <br>oh wie peinlich. Die udl-Datei war im falschen Verzeichnis.<br>:-) Jens Schuman

            Comment


            • #7
              Hallo,

              hinter der OLE-Exception 8003002 verbirgt sich der Fehlertext <i>%1 could not be found</i>. Der folgende Text stammt vom Freeware-Tool <i>HR Plus</i>, kann aber auch über die einschlägigen API-Funktionen vom Betriebssystem erfragt werden:
              <pre>
              Error Result : 0x80030002 ( -2147287038 )
              ID Defined as : STG_E_FILENOTFOUND
              Error Type : OLE HRESULT Error
              Facility : FACILITY_STORAGE 0x00000003 ( 3 )
              Severity : SEVERITY_ERROR 0x00000001 ( 1 )
              Code : 0x00000002 ( 2 )
              Source Error file : Winerror.h
              Message Text : %1 could not be found.
              </pre&gt

              Comment

              Working...
              X