TreeView 结构如何存入 OLE字段中?急!100分相送!(100分)

  • 主题发起人 主题发起人 龙飞九天
  • 开始时间 开始时间

龙飞九天

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将TREEVIEW存入数据库的OLE字段中并取出来,
类似 TREEVIEW.SAVETOFILE TREEVIEW.LOADFROMFILE
D5+ADO+ACCESS2000
 
用这种方式非常不好!
这样的帖子已经很多了,查查看!
 
有特殊用途,各位帮帮忙!实在是急!
查了,但没查到,可能是查的方法不太对吧!
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=848782
再将文件存入数据库的OLE字段中,这个的实现在BBS中有很多讨论的吧!
 
// save
var
ms: TMemoryStream
begin
ms := TMemoryStream.Create;
try
TreeView.SaveToStream(ms);
dataset.edit;
TBlobField(dataset.FieldByName('olefield')).LoadFromstream(ms);
dataset.post;
finally
ms.Free;
end;
end;
// load
var
ms: TMemoryStream
begin
ms := TMemoryStream.Create;
try
TBlobField(dataset.FieldByName('olefield')).savetostream(ms);
TreeView.LoadFromStream(ms);
finally
ms.Free;
end;
end;

 
lqy:
收到答案,但是有一个问题,treeview.loadfromstream(ms)之后treeview中还是空的,
把ms存到文件中再treeview.loadfromfile就可以。
 
可能是數據庫保存方面出了問題﹐最好把相關代碼貼上來
 
procedure TForm1.Button2Click(Sender: TObject);//清除
begin
Treeview1.Items.Clear;
TreeView1.Refresh;
end;

{// save
procedure TForm1.Button1Click(Sender: TObject);//保存
var
ms: TMemoryStream;
begin
ms := TMemoryStream.Create;
try
TreeView1.SaveToStream(ms);
adodataset1.edit;
TBlobField(adodataset1.FieldByName('test')).LoadFromstream(ms);
adodataset1.post;
finally
ms.Free;
end;
end;

// load
procedure TForm1.Button3Click(Sender: TObject);//装入
var
ms: TMemoryStream;
begin
ms := TMemoryStream.Create;
try
TBlobField(adodataset1.FieldByName('test')).savetostream(ms);
TreeView1.LoadFromStream(ms);
finally
ms.Free;
end;
end;}

procedure TForm1.Button1Click(Sender: TObject);//保存
var
mystream:TMemoryStream;
begin
mystream:=Tmemorystream.Create;
treeview1.SaveToStream(mystream);
Adodataset1.Edit;
TblobField(Adodataset1.FieldByName('test')).loadfromstream(mystream);
Adodataset1.Post;
mystream.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);//装入
//var
//streamb:TMemoryStream;
begin
//streamb:=Tmemorystream.Create;
//Tblobfield(Adodataset1.Fieldbyname('test')).savetostream('streamb');
Tblobfield(Adodataset1.Fieldbyname('test')).savetofile('temp');
//streamb.SaveToFile('temp');
treeview1.LoadFromfile('temp');
deletefile('temp');
treeview1.Refresh;
//streamb.Free;
end;
end.

采用access2000数据库,ado连接
数据库中只有一个表,表中只有一个字段,就是test,为ole字段
采用stream不行,但把stream存入文件在操作就可以,实在不明白。
 
在mystream:=Tmemorystream.Create;后
加上一句 x.Position:=0; 试试
 
哦 sorry 打错了 应该是 mystream.Position:=0;
 
ok,解决,多谢dippa。不过是这样的:
begin
ms := TMemoryStream.Create;
try
TBlobField(adodataset1.FieldByName('test')).savetostream(ms);
ms.Position:=0;
TreeView1.LoadFromStream(ms);
finally
ms.Free;
end;
可是这种情况是如何产生的,还望能给小弟一个解释。
 
savetostream(ms) 后 stream的讀指針移到了最后﹐所以treeview讀不到東西
姑要 ms.position:=0 把讀指針移到最前。我原來也忘了這一點
 
多人接受答案了。
 
后退
顶部