Autor Beitrag
lkz633
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 136

WinXP, Suse Linux 8.2 (unter VMWare)
D7 Prof, K3 Prof
BeitragVerfasst: So 25.05.03 12:16 
Hallo,

ich möchte blob- Felder von Tabellen synchronisieren.
Habe bis jetzt folgenden Code:

ausblenden 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 //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:
ausblenden 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]