在 SQL 服务器数据库 table 中存储 TTreeView
Storing TTreeView inside SQL Server database table
我正在尝试使用下一个过程将我的 TTreeView
存储在 SQL 服务器数据库 table 中:
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 服务器 2019。
将Query.Refresh;
更改为Query.Post;
此外,您需要 Free
blob 流以完成写入 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;
我正在尝试使用下一个过程将我的 TTreeView
存储在 SQL 服务器数据库 table 中:
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 服务器 2019。
将Query.Refresh;
更改为Query.Post;
此外,您需要 Free
blob 流以完成写入 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;