Hallo,
ich aktualisiere den Datenbestand einer Access 2000 DB mit mehreren SQL Anweisungen über ADO. Ich habe bereits versucht die SQL Syntax als Stapel an die Jet Engine zu übergeben um zu sehn ob die Jet Engine mit Stapel-SQL-Anweisungen etwas anfangen kann (wie z.B. der MSSQL Server). Scheinbar kann die Jet Engine das nicht. Auch die Eingabe von mehreren SQL Anweisungen direkt im Access Abfrage Editor war negativ.
Jetzt schicke ich die SQL Anweisungen mit einem nativen Command Objekt nacheinander ab. Dazu hätt ich noch 2 Fragen.
1.
Muß ich dazu den Parameter immer wieder neu deklarieren (mit CreateParameter....) oder genügt das einmal solange der ParameterTyp usw. sich nicht ändert? Es funktioniert zwar so wie im Beispiel unten, ich wüßte aber gern ob's auch richtig so ist.
2.
Wie würde die Parameterliste wieder gelöscht außer über "Refresh"? Mit "aCommand.Parameters.Clear" gehts leider nicht obwohl es doch auch nur um eine Collection handelt.
Viele Grüße
Walter
<PRE>
begin
SQLTxT := 'DELETE FROM MyTab WHERE ID = :MIDx
SQLTxT1 := 'DELETE FROM MyTab1 WHERE ID = :MIDx
SQLTxT2 := 'DELETE FROM MyTab2 WHERE ID = :MIDx
SQLTxT3 := 'DELETE FROM MyTab3 WHERE ID = :MIDx
try
aCommand := CoCommand.Create;
try
with aCommand do
begin
Set_ActiveConnection(DataModule1.ADOConnection1.Co nnectionObject);
CommandType := adCmdText;
Set_CommandText(SQLTxT);
Parameters.Append(CreateParameter('0', adInteger, adParamInput, 10, EmptyParam));
Parameters[0].Value := DSatzID;//ParamterWert (ID) für die Abfrage
DataModule1.ADOConnection1.BeginTrans;
Execute(vRows, EmptyParam, adExecuteNoRecords);
CommandType := adCmdText;
Set_CommandText(SQLTxT1);
Execute(vRows, EmptyParam, adExecuteNoRecords);
CommandType := adCmdText;
Set_CommandText(SQLTxT2);
Execute(vRows, EmptyParam, adExecuteNoRecords);
CommandType := adCmdText;
Set_CommandText(SQLTxT3);
Execute(vRows, EmptyParam, adExecuteNoRecords);
DataModule1.ADOConnection1.CommitTrans;
end;
except
DataModule1.ADOConnection1.RollbackTrans;
aCommand := nil;
end;
finally
aCommand := nil;
end;
end;
</PRE>
ich aktualisiere den Datenbestand einer Access 2000 DB mit mehreren SQL Anweisungen über ADO. Ich habe bereits versucht die SQL Syntax als Stapel an die Jet Engine zu übergeben um zu sehn ob die Jet Engine mit Stapel-SQL-Anweisungen etwas anfangen kann (wie z.B. der MSSQL Server). Scheinbar kann die Jet Engine das nicht. Auch die Eingabe von mehreren SQL Anweisungen direkt im Access Abfrage Editor war negativ.
Jetzt schicke ich die SQL Anweisungen mit einem nativen Command Objekt nacheinander ab. Dazu hätt ich noch 2 Fragen.
1.
Muß ich dazu den Parameter immer wieder neu deklarieren (mit CreateParameter....) oder genügt das einmal solange der ParameterTyp usw. sich nicht ändert? Es funktioniert zwar so wie im Beispiel unten, ich wüßte aber gern ob's auch richtig so ist.
2.
Wie würde die Parameterliste wieder gelöscht außer über "Refresh"? Mit "aCommand.Parameters.Clear" gehts leider nicht obwohl es doch auch nur um eine Collection handelt.
Viele Grüße
Walter
<PRE>
begin
SQLTxT := 'DELETE FROM MyTab WHERE ID = :MIDx
SQLTxT1 := 'DELETE FROM MyTab1 WHERE ID = :MIDx
SQLTxT2 := 'DELETE FROM MyTab2 WHERE ID = :MIDx
SQLTxT3 := 'DELETE FROM MyTab3 WHERE ID = :MIDx
try
aCommand := CoCommand.Create;
try
with aCommand do
begin
Set_ActiveConnection(DataModule1.ADOConnection1.Co nnectionObject);
CommandType := adCmdText;
Set_CommandText(SQLTxT);
Parameters.Append(CreateParameter('0', adInteger, adParamInput, 10, EmptyParam));
Parameters[0].Value := DSatzID;//ParamterWert (ID) für die Abfrage
DataModule1.ADOConnection1.BeginTrans;
Execute(vRows, EmptyParam, adExecuteNoRecords);
CommandType := adCmdText;
Set_CommandText(SQLTxT1);
Execute(vRows, EmptyParam, adExecuteNoRecords);
CommandType := adCmdText;
Set_CommandText(SQLTxT2);
Execute(vRows, EmptyParam, adExecuteNoRecords);
CommandType := adCmdText;
Set_CommandText(SQLTxT3);
Execute(vRows, EmptyParam, adExecuteNoRecords);
DataModule1.ADOConnection1.CommitTrans;
end;
except
DataModule1.ADOConnection1.RollbackTrans;
aCommand := nil;
end;
finally
aCommand := nil;
end;
end;
</PRE>
Comment