Hallo,
ich moechte von einer datenbank zu einer anderen datenbank Blob felder kopieren.
Ein Teil meines Codes ist dieser hier, der theoretisch auch so klappt:
<pre>
procedure Tfdirectsync.sync_blobfield(panelnumber: integer);
var blob_source,blob_target: tadoblobstream;
begin
dm_data.aq_target.SQL.Clear;
dm_data.aq_target.SQL.Add('select '+lv_target.Items[panelnumber].Caption+' from '+lv_target.Hint+' where '+getwherestring); //nur blobfelder anzeigen
try
dm_data.aq_target.Open;
if not dm_data.aq_source.FieldByName(panel_caption[panelnumber]).IsNull then begin
dm_data.aq_target.edit;
blob_source := tadoblobstream(dm_data.aq_source.CreateBlobStream( dm_data.aq_source.FieldByName(panel_caption[panelnumber]),bmRead));
blob_target := tadoblobstream(dm_data.aq_target.CreateBlobStream( dm_data.aq_target.FieldByName(lv_target.Items[panelnumber].Caption),bmReadWrite));
blob_target.CopyFrom(blob_source,blob_source.size) ;
dm_data.aq_target.Post;
end;
dm_data.aq_target.close;
finally
if blob_source<> nil then
freeandnil(blob_source);
if blob_target<>nil then
freeandnil(blob_target);
end;
end;</pre>
habe aber jedoch 2 probleme:
1) Wenn ich den finnally Block nicht auskommentiere, so bekomme ich immer eine fehlermeldung: Nicht im Editier oder Einfuegemodus. Kann sich das jemand erklaeren? Ich muss die BlobStreams aber doch freigeben oder?
2) Beim Ole Treiber fuer MS SQL Server erhalte ich beim erzeugen des Blob target einen Fehler: Ungueltige Typumwandlung. Wiso?
Danke fuer jede Hilfe
MFG Max Odendahl
ich moechte von einer datenbank zu einer anderen datenbank Blob felder kopieren.
Ein Teil meines Codes ist dieser hier, der theoretisch auch so klappt:
<pre>
procedure Tfdirectsync.sync_blobfield(panelnumber: integer);
var blob_source,blob_target: tadoblobstream;
begin
dm_data.aq_target.SQL.Clear;
dm_data.aq_target.SQL.Add('select '+lv_target.Items[panelnumber].Caption+' from '+lv_target.Hint+' where '+getwherestring); //nur blobfelder anzeigen
try
dm_data.aq_target.Open;
if not dm_data.aq_source.FieldByName(panel_caption[panelnumber]).IsNull then begin
dm_data.aq_target.edit;
blob_source := tadoblobstream(dm_data.aq_source.CreateBlobStream( dm_data.aq_source.FieldByName(panel_caption[panelnumber]),bmRead));
blob_target := tadoblobstream(dm_data.aq_target.CreateBlobStream( dm_data.aq_target.FieldByName(lv_target.Items[panelnumber].Caption),bmReadWrite));
blob_target.CopyFrom(blob_source,blob_source.size) ;
dm_data.aq_target.Post;
end;
dm_data.aq_target.close;
finally
if blob_source<> nil then
freeandnil(blob_source);
if blob_target<>nil then
freeandnil(blob_target);
end;
end;</pre>
habe aber jedoch 2 probleme:
1) Wenn ich den finnally Block nicht auskommentiere, so bekomme ich immer eine fehlermeldung: Nicht im Editier oder Einfuegemodus. Kann sich das jemand erklaeren? Ich muss die BlobStreams aber doch freigeben oder?
2) Beim Ole Treiber fuer MS SQL Server erhalte ich beim erzeugen des Blob target einen Fehler: Ungueltige Typumwandlung. Wiso?
Danke fuer jede Hilfe
MFG Max Odendahl
Comment