Hallo,
ich möchte blob- Felder von Tabellen synchronisieren.
Habe bis jetzt folgenden Code:
Sourcecode:
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 //bloblist
beinhaltet alle blob felder der tabelle
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:
Sourcecode:
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
ich möchte blob- Felder von Tabellen synchronisieren.
Habe bis jetzt folgenden Code:
Sourcecode:
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 //bloblist
beinhaltet alle blob felder der tabelle
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:
Sourcecode:
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
Comment