Hallo,
ich möchte blob- Felder von Tabellen synchronisieren.
Habe bis jetzt folgenden Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure tdm_data.sync_blobfields(table: string); var i: integer; blob_source,blob_target: tadsblobstream; begin dm_data.q_target.SQL.Clear; dm_data.q_target.SQL.Add(select blobfields from.........); dm_data.q_target.Open; for i:= 0 to fmain.bloblist.Count-1 do begin try blob_source := tadsblobstream(q_source.CreateBlobStream (q_source.FieldByName(fmain.bloblist.strings[i]),bmRead)); dm_data.q_target.edit; blob_target := tadsblobstream(q_target.CreateBlobStream(q_target.FieldByName(fmain.bloblist.strings[i]),bmReadWrite)); blob_target.CopyFrom(blob_source,blob_source.size); dm_data.q_target.Post; finally blob_source.free; blob_target.free; end; end; dm_data.q_target.Close; end; |
Meine Fragen:
1) Stimmt der Code grundsätzlich so ?
2) Bekomme bei der Zeile
dm_data.q_target.edit; immer die Fehlermeldung:
"Eine Datenmenge, die nur zum Lesen ist, kann nicht geaendert werden"
Wiso kommt diese Fehlermeldung ?
3) Da in dieser Zeile was schief geht wird der finally-Block ausgefuehrt. Da aber blob_target noch nichts zugewiesen wurde, bekomme ich bei blob.free eine zugriffsverletzung. Deswegen habe ich den code so geaendert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| try ........ finally if blob_source<> nil then blob_source.Destroy; if blob_target<>nil then blob_target.Destroy; end; |
Trotzdem bekomme ich aber noch eine Zugriffsverletzung. Wiso ?
herzlichen dank fuer eure Hilfe
Gruesse
lkz633[/delphi]