Einzelnen Beitrag anzeigen

Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: EDataBaseError: Feld 'Memo' kann nicht verändert werden

  Alt 22. Nov 2016, 07:25
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.
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.

Geändert von Devil1925 (22. Nov 2016 um 08:15 Uhr)
  Mit Zitat antworten Zitat