Hallo,<BR>
<BR>
Ich möchte mit reinem ADO unter Delphi4 Prof. einen Export von MSSQL7.0 nach dBASE, Paradox und Access machen. Dazu habe ich selbstverständlich alle (auch die mitlerweile gelöschten) Beiträge gelesen, und auch umgesetzt ;-)<BR>
An dieser Stelle vielen Dank an Herrn Kosch.<BR>
<BR>
Aber leider klappt nicht alles so reibungslos, wie in den Beiträgen beschrieben. Ich verwende MDAC2.7 auf deutschem NT mit SP6a.<BR>
<BR>
Der Export nach dBASE klappt einwandfrei, aber nach Paradox und Access bekomme ich immer die Fehlermeldung: "Please use updateable query"<BR>
<BR>
<PRE>
//ConnectString JetEngine zusammenbasteln:
JetConnString:='Provider=Microsoft.Jet.OLEDB.4.0;D ata Source=C:\Temp;'+
'Extended Properties=dBASE 5.0;Persist Security Info=False';
//ConnectString MSSQL Server zusammenbasteln:
SQLConnString:='Provider=SQLOLEDB.1;Password='+FPa ssword+';Persist Security Info=False;User ID='+
FUserID+';Initial Catalog='+InitCat+';Data Source='+FDataSource;
//Select-String MSSQL-Server zusammensetzen:
SQLSelectString:='SELECT Vorname, Nachname FROM Tabelle1_MSSQL';
//SQL-String um die dBASE-Tabellen auf der Festplatte tatsächlich anzulegen:
GenTableString:='CREATE TABLE Tabelle1_dBASE'+
' (Vorname CHAR(100), Nachname CHAR(100));';
// Schritt 1: Daten von MSSQL-Server holen:
aConMSSQL:=coConnection.Create;
aConMSSQL.CursorLocation:=adUseClient;
aConMSSQL.Open(SQLConnString,'','',adConnectUnspec ified);
try // SQL-Server Recordset erzeugen
aRSMSSQL:=coRecordset.Create;
aRSMSSQL.Set_ActiveConnection(aConMSSQL);
aRSMSSQL.CursorLocation:=adUseClient;
try
//MSSQL-Recordset füllen:
aRSMSSQL.Open(SQLSelectString,EmptyParam,adOpenSta tic,adLockReadOnly, adCmdText);
//Jet-Engine Connection erzeugen:
aConJet:=coConnection.Create;
aConJet.CursorLocation:=adUseClient;
aConJet.Open(JetConnString,'','',adConnectUnspecif ied);
//Tabellen zuerst anlegen (sonst schlägt aRSJet.Open fehl):
aConJet.Execute(GenTableString,iRowsaffected,adCmd Unknown);
try
//Jet-Engine Recordset erzeugen:
aRSJet:=coRecordset.Create;
aRSJet.Set_ActiveConnection(aConJet);
aRSJet.CursorLocation:=adUseClient;
aRSJet.Open('Tabelle1_dBASE.dbf', EmptyParam, adOpenStatic, adLockOptimistic, adCmdTableDirect);
aRSMSSQL.MoveFirst;
// 2. Schritt: Daten in die Tabelle schreiben:
while not aRSMSSQL.EOF do
begin
aRSJet.AddNew(EmptyParam, EmptyParam);
aRSJet.Fields[0].Value:=aRSMSSQL.Fields[0].Value;
aRSJet.Fields[1].Value:=aRSMSSQL.Fields[1].Value;
aRSJet.Update(EmptyParam, EmptyParam);
aRSMSSQL.MoveNext;
end;
//Jet-Engine-Recordset zerstören:
aRSJet.Close;
aRSJet:=nil;
finally
aConJet.Close;
aConJet:=nil;
end;
finally
aRSMSSQL.Close;
aRSMSSQL:=nil;
end;
finally
aConMSSQL.Close;
aConMSSQL:=nil;
end;
</PRE>
Das ganze funktioniert wie gesagt einwandfrei für dBASE. Aber wenn ich das gleiche für Paradox machen will ("Extended Properties=Paradox 5.x" und Datenbank-Endung natürlich ".db"), geht es schief.<BR>
Der erste Update in der neuen Tabelle funktioniert noch, der zweite Update mit Fehlermeldung "Please use updateable query" leider nicht mehr.<BR>
Die neue Paradox-Tabelle enthält danach selbstverständlich auch nur einen Datensatz.<BR>
Ich habe schon mit den diversen Konstanten für Lock-, Open-, Connect- und Command-Type gespielt, aber noch keine Kombination gefunden, die passt.<BR>
<BR>
Kann mir irgend jemand sagen, wo der Fehler liegt?<BR>
<BR>
Mit freundlichen Grüssen,<BR>
<BR>
Peter Crämer
<BR>
Ich möchte mit reinem ADO unter Delphi4 Prof. einen Export von MSSQL7.0 nach dBASE, Paradox und Access machen. Dazu habe ich selbstverständlich alle (auch die mitlerweile gelöschten) Beiträge gelesen, und auch umgesetzt ;-)<BR>
An dieser Stelle vielen Dank an Herrn Kosch.<BR>
<BR>
Aber leider klappt nicht alles so reibungslos, wie in den Beiträgen beschrieben. Ich verwende MDAC2.7 auf deutschem NT mit SP6a.<BR>
<BR>
Der Export nach dBASE klappt einwandfrei, aber nach Paradox und Access bekomme ich immer die Fehlermeldung: "Please use updateable query"<BR>
<BR>
<PRE>
//ConnectString JetEngine zusammenbasteln:
JetConnString:='Provider=Microsoft.Jet.OLEDB.4.0;D ata Source=C:\Temp;'+
'Extended Properties=dBASE 5.0;Persist Security Info=False';
//ConnectString MSSQL Server zusammenbasteln:
SQLConnString:='Provider=SQLOLEDB.1;Password='+FPa ssword+';Persist Security Info=False;User ID='+
FUserID+';Initial Catalog='+InitCat+';Data Source='+FDataSource;
//Select-String MSSQL-Server zusammensetzen:
SQLSelectString:='SELECT Vorname, Nachname FROM Tabelle1_MSSQL';
//SQL-String um die dBASE-Tabellen auf der Festplatte tatsächlich anzulegen:
GenTableString:='CREATE TABLE Tabelle1_dBASE'+
' (Vorname CHAR(100), Nachname CHAR(100));';
// Schritt 1: Daten von MSSQL-Server holen:
aConMSSQL:=coConnection.Create;
aConMSSQL.CursorLocation:=adUseClient;
aConMSSQL.Open(SQLConnString,'','',adConnectUnspec ified);
try // SQL-Server Recordset erzeugen
aRSMSSQL:=coRecordset.Create;
aRSMSSQL.Set_ActiveConnection(aConMSSQL);
aRSMSSQL.CursorLocation:=adUseClient;
try
//MSSQL-Recordset füllen:
aRSMSSQL.Open(SQLSelectString,EmptyParam,adOpenSta tic,adLockReadOnly, adCmdText);
//Jet-Engine Connection erzeugen:
aConJet:=coConnection.Create;
aConJet.CursorLocation:=adUseClient;
aConJet.Open(JetConnString,'','',adConnectUnspecif ied);
//Tabellen zuerst anlegen (sonst schlägt aRSJet.Open fehl):
aConJet.Execute(GenTableString,iRowsaffected,adCmd Unknown);
try
//Jet-Engine Recordset erzeugen:
aRSJet:=coRecordset.Create;
aRSJet.Set_ActiveConnection(aConJet);
aRSJet.CursorLocation:=adUseClient;
aRSJet.Open('Tabelle1_dBASE.dbf', EmptyParam, adOpenStatic, adLockOptimistic, adCmdTableDirect);
aRSMSSQL.MoveFirst;
// 2. Schritt: Daten in die Tabelle schreiben:
while not aRSMSSQL.EOF do
begin
aRSJet.AddNew(EmptyParam, EmptyParam);
aRSJet.Fields[0].Value:=aRSMSSQL.Fields[0].Value;
aRSJet.Fields[1].Value:=aRSMSSQL.Fields[1].Value;
aRSJet.Update(EmptyParam, EmptyParam);
aRSMSSQL.MoveNext;
end;
//Jet-Engine-Recordset zerstören:
aRSJet.Close;
aRSJet:=nil;
finally
aConJet.Close;
aConJet:=nil;
end;
finally
aRSMSSQL.Close;
aRSMSSQL:=nil;
end;
finally
aConMSSQL.Close;
aConMSSQL:=nil;
end;
</PRE>
Das ganze funktioniert wie gesagt einwandfrei für dBASE. Aber wenn ich das gleiche für Paradox machen will ("Extended Properties=Paradox 5.x" und Datenbank-Endung natürlich ".db"), geht es schief.<BR>
Der erste Update in der neuen Tabelle funktioniert noch, der zweite Update mit Fehlermeldung "Please use updateable query" leider nicht mehr.<BR>
Die neue Paradox-Tabelle enthält danach selbstverständlich auch nur einen Datensatz.<BR>
Ich habe schon mit den diversen Konstanten für Lock-, Open-, Connect- und Command-Type gespielt, aber noch keine Kombination gefunden, die passt.<BR>
<BR>
Kann mir irgend jemand sagen, wo der Fehler liegt?<BR>
<BR>
Mit freundlichen Grüssen,<BR>
<BR>
Peter Crämer
Comment