Hallo zuzsammen,
die Variante mit SELECT INTO hat im Praxistext fehlgeschlagen mit der Fehlermeldung "Abfrage ist zu komplex".
Bei dieser Variante dürfen die Tabellen nicht existieren. Das SELECT INTO erzeugt selbst die Tabelle und schreibt dann alle Abfrageergebnisse in diese neue Tabelle.
Das Problem ist, das die WHERE Klausel in der Praxis mehr als 40 ("...WHERE ID=1 OR ID=2 OR ID=23 OR ID=56...")
ID´s auf einmal abfragt. Dies ist mit
ADO, so wie es aussieht nicht möglich.
Mehrere SELECT INTO Abfragen auf die selbe Tabelle sind nicht möglich, da nach der ersten Abfrage die Tabelle besteht und es dann eine Fehlermeldung geben würde.
Wenn ich mich mit dieser Aussahe irre, schreit mich einfach an
alzaimers Variante würde im Prinzip funtionieren....
Delphi-Quellcode:
Procedure TForm1.CopyRecords (aSrcConnection, aDstConnection : TADOConnection; aTableName : String; aID : Integer);
Var
qSource, qDest : TADOQuery;
i : Integer;
Begin
qSource := TADOQuery.Create(nil);
qSource.Connection := aSrcConnection;
qDest := TADOQuery.Create(nil);
qDest.Connection := aDstConnection;
try
qSource.SQL.Text := Format ('select * from [%s] where Text_ID = :ID',[aTableName]);
qDest.SQL.text := qSource.SQL.text;
qSource.Parameters.ParamValues['ID'] := aID;
qSource.Open;
qDest.Open;
while not qSource.Eof do
begin
qDest.Append;
For i:=0 to qSource.FieldCount - 1 do
qDest[qSource.Fields[i].FieldName] := qSource.Fields[i].Value;
qDest.Post;
qSource.Next;
end;
finally
qSource.Free;
qDest.Free;
end;
end;
Im Prinzip, da es im Praxistest fehlgeschlagen ist. Das Feld Text_ID ist ein Autowert Feld.
Es muss aber dieselbe ID letzendlich haben, wie es in der Quelldatenbank stand.
Jetzt bitte nicht "dann hast du die
DB falsch konzipiert..." usw.
Die
DB ist mir vorgegeben, sie ist nicht von mir, da kann ich nichts dran rütteln und muss es als Tatsache hinnehmen.
Es kommt ein Fehler der sagt, das Text_ID nicht verändert werden kann.
Klingt auch logisch, da es ein Autowert Feld ist.
Habe ich trotzdem eine Möglichkeit in ein Autowert-Feld einen Wert einzutragen?
Oder habt ihr vielleicht einen anderen Ansatz mit der ich das bewerkstelligen kann?
P.S.: Meine Ursprungsvariante von der ich dachte, dass es funktioniert, hat denselben Makel, das Autowert Feld macht mir einen Strich durch die Rechnung.