Guten Morgen,
Probier mal folgendes aus
Daten.Q_MSSQL_Export.FieldByName(FieldName).AsString:= 'Hallo Welt!'
Teste ich gleich mal.
Hallo,
[DELPHI]
Ausserdem durchkäufst du "alle" Felder, obwohl es doch nur Id und Memo sind.
Reicht da nicht ein:
Delphi-Quellcode:
while not Daten.Q_SQLITE_Export.Eof do
begin
Daten.Q_MSSQL_Export.Append;
Daten.Q_MSSQL_Export.FieldByName('Id').Value := Daten.Q_SQLITE_Export.FieldByName('Id').Value;
Daten.Q_MSSQL_Export.FieldByName('Memo').Value := Daten.Q_SQLITE_Export.FieldByName('Memo').Value;
Daten.Q_MSSQL_Export.Post;
Daten.Q_SQLITE_Export.Next;
end;
Ich durchlaufe alle Felder, da es nicht nur ID und MEMO sind, das war jetzt nur eine Verkürzte version des
SQL. ausserdem verwende ich diese Methode nicht nur für eine Tabelle sondern für ca 30, wobei das bei den ersten immer funktioniert.
Dann würde mich interessieren, ob der Fehler schon beim ersten Datensatz kommt oder erst irgendwo zwischendrin,
(vielleicht, wenn der Feldinhalt NULL ist?)
Ich bekomme die Fehlermeldung schon beim ersten Datensatz, bei welchem dieses Feld nicht leer ist.
Also prinzipiell finde ich das Vorgehen so ok, mache das auch regelmäßig, wenn von X nach Y kopiert werden soll, und die Routine funktioniert halt auch ohne Änderung, wenn die Tabellen noch dutzende von Spalten dazubekommen.
Es gibt nur einen Unterschied:
Benutzte immer, egal welcher Typ jetzt tatsächlich in den Tabellen vorkommt .AsString
Das dürfte erst problematisch werden, wenn man Blobfelder mit irgendwelchem binären Inhalt (wie Grafiken ...) hat, auf diese Weise kopieren will.
Anstelle von .Value
könnte eventuell auch .AsVariant
funktionieren oder .AssignValue()
Also statt Daten.Q_MSSQL_Export.FieldByName(FieldName).Value := Daten.Q_SQLITE_Export.FieldByName(FieldName).Value;
eventuell Daten.Q_MSSQL_Export.FieldByName(FieldName).AssignValue(Daten.Q_SQLITE_Export.FieldByName(FieldName).Value);
Werde ich gleich mal testen.