在 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;