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
Announcement
Collapse
No announcement yet.
Access und DAO
Collapse
X
-
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
-
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
-
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
-
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
-
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>
Comment
Comment