var
  Form1: TForm1;
  Treelist : Tstringlist;/////////////////////  将流保存起来
procedure TForm1.ConstructSymptom;
var
  TempQuery : Tadoquery;
  Trees : TMemorystream;
begin
try
  Treelist := Tstringlist.Create;
  TempQuery :=  Tadoquery.Create(nil);
  TempQuery.ConnectionString := 'Provider=SQLOLEDB.1;Password="";Persist Security Info=True;User ID=sa;Initial Catalog=Data2;Data Source=zff';
  with TempQuery do
    begin
      close;
      sql.Clear;
      sql.Add('select Tblname,tree from TblTree');
      open;
    end;
    while not TempQuery.Eof do
     begin
      Trees := TMemorystream.Create;
      tblobfield(TempQuery.Fields[1]).SaveToStream(Trees);
      Treelist.AddObject(TempQuery.Fields[0].AsString,Tobject(@Trees));
      TempQuery.Next;
    end;
finally
  TempQuery.Free;
end;end;
///////////////////////////// 没办法把流读出来
procedure TForm1.N5Click(Sender: TObject);
var
  i : integer;
  P : Pointer;
  tree : TMemorystream;
begin
 for i := 0 to  Treelist.Count -1 do
    if Treelist.Strings[i] = 'sym' then
       begin
           P := pointer(Treelist.Objects[i]);
           tree := TMemorystream(p^);
           tree.Position := 0;             //           TMemorystream().Position:=0;
          // Treeview2.LoadFromStream(TMemorystream(Treelist.Objects[i]));
          showmessage('Find now!');
       end;
end;

解决方案 »

  1.   

    Treelist.AddObject(TempQuery.Fields[0].AsString,Tobject(@Trees));Tobject(@Trees)好像不用@号吧?
      

  2.   

    这代码写的真乱   很多东西构造了 没释放  而且构造的模式写到异常保护中都写错了   tree : TMemorystream;  你这个流都没构造  能读出来出鬼了啦~`
      

  3.   

    Tobject(@Trees) 这样用是不对的,除非你的Trees是全局变量。改成  Tobject(Trees)
    后来使用时再用  tree := TMemorystream(p)
      

  4.   

    TMemorystream.Create吧
    内存数据直接用Buffer吧
      

  5.   

    Treelist.AddObject(TempQuery.Fields[0].AsString,Trees);这样就行了啊.
      

  6.   


    Treelist.AddObject(TempQuery.Fields[0].AsString,Trees);
      

  7.   

    同意zuoansuifeng(左岸) 这代码写的确实够乱的了Treelist : Tstringlist;应该声明为TForm1的私有变量,在Form的create事件中Treelist := Tstringlist.Create;
    在Form的close事件中 
    for i:=0 to Treelist.Count-1 do 
      Treelist.Objects[i].Free;
    Treelist.Free;
      

  8.   

    procedure TForm1.N5Click(Sender: TObject);
    var
      i : integer;
      P : Pointer;
      tree : TMemorystream;
    begin
     tree:=TMemoryStream.Create;
     for i := 0 to  Treelist.Count -1 do
        if Treelist.Strings[i] = 'sym' then
           begin
               Tree.Memory:=pointer(Treelist.Objects[i]);
               Tree.Position := 0;
              // Treeview2.LoadFromStream(Tree);
              showmessage('Find now!');
              Tree.Clear;
              Tree.Position := 0;
           end;
     Tree.Free;
    end;