我試圖TTreeView通過使用下一個程序來存盤我的內部 SQL Server 資料庫表:
procedure Save;
var
BlobField :TBlobField;
Query:TADOQuery;
Stream:TStream;
begin
Stream := TMemoryStream.Create;
Query := TADOQuery.Create(Self);
Query.SQL.Add('Select * From MyTable') ;
Query.Active := True;
Query.First;
Query.Edit;
BlobField := Query.FieldByName('MyTableField') as TBlobField;
Stream := Query.CreateBlobStream(BlobField, bmWrite);
TreeView1.SaveToStream(Stream);
Query.Refresh;
Query.Free;
Stream.Free;
end;
但每次我收到錯誤:DataSet is not in edit or insert mode.
我正在使用 Delphi 10.1、Win 10、SQL Server 2019。
uj5u.com熱心網友回復:
更改Query.Refresh;為Query.Post;
此外,在將新資料提交到資料庫之前,您需要對Freeblob 流完成寫入 blob 欄位。Post
此外,您正在泄漏一個未使用的TMemoryStream物件。
試試這個:
procedure Save;
var
BlobField: TField;
Query: TADOQuery;
Stream: TStream;
begin
Query := TADOQuery.Create(nil);
try
Query.SQL.Text := 'Select TOP(1) * From MyTable';
Query.Open;
try
Query.First;
Query.Edit;
try
BlobField := Query.FieldByName('MyTableField');
Stream := Query.CreateBlobStream(BlobField, bmWrite);
try
TreeView1.SaveToStream(Stream);
finally
Stream.Free;
end;
Query.Post;
except
Query.Cancel;
raise;
end;
finally
Query.Close;
end;
finally
Query.Free;
end;
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/460921.html
