請教文件流的問題 Stream |
尚未結案
|
soulin12
一般會員 發表:22 回覆:21 積分:8 註冊:2003-05-07 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
把所有物件資料都保存進去比較難,下面是一個保存整個TTreeView結構的例子,可參考看看,資料庫欄位定義為Text類型。
procedure TForm1.Button1Click(Sender: TObject);//載入
var
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
try
begin
with ADOQuery1 do
begin
if not Active then Open;
TBLOBField(FieldByName('tList')).SaveToStream(MS);
MS.Seek(0, soFromBeginning);
TreeView1.LoadFromStream(MS);
end;
end;
finally
MS.Free;
end;
end; procedure TForm1.Button2Click(Sender: TObject);//保存至資料庫
var
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
try
begin
with ADOQuery1 do
begin
if not Active then Open;
TreeView1.SaveToStream(MS);
Append;
MS.Seek(0, soFromBeginning);
TBLOBField(FieldByName('tList')).LoadFromStream(MS);
Post;
end;
end;
finally
MS.Free;
end;
end;
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
var m1,m2:TMemoryStream; begin m1:=TMemorystream.create; m2:=TMemorystream.create; try m1.WriteComponent(form1); //將form1寫入Memorystream(實際上就是.dfm) m1.Position:=0; ObjectBinaryToText(m1,m2); //將dfm內容由Binary轉為text //m2即是你要的stream m2.SaveToFile('c:\test.txt'); //可將結果存成檔來檢查 finally m1.free; m2.free; end;發表人 - ccchen 於 2003/07/02 08:07:19 |
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
向高手們請教一個問題:
我建了一個 Form,里面放了若干個 VCL 控件,然後我想用 Stream 的方式把當前Form的所有對象的數據保存在一個SQL 數據表的一個字段里面,該怎樣實現?,而且表的字段應該用何種數據類型,以及怎樣從字段中讀取該數據出來 ------------------------------------------------------------
如果真的需要这样做,我给你一个参考方法:
1、将Form的所有對象的數據保存为一个或多个文件。
2、将这些文件以流(多个文件可以将流合并,参见 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=31104 )的形式保存在数据库中。 具体怎样在数据库中保存与取出,请参考上面的方法. 风花雪月 e梦情缘
------
风花雪月 e梦情缘 |
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
哈哈,ccchen大大提供的是好方法,綜合一下,大致已可以實現你想要的 < class="code">
//載入
var
MS1, MS2: TMemoryStream;
begin
MS1 := TMemoryStream.Create;
MS2 := TMemoryStream.Create;
try
with ADOQuery1 do
begin
if not Active then Open;
TBLOBField(FieldByName('tList')).SaveToStream(MS1);
ObjectTextToBinary(MS1, MS2);
//FreeAndNil(Form1.FActionLists);
Form1.DestroyComponents;
MS2.Seek(0, soFromBeginning);
MS2.ReadComponent(Form1);
end;
finally
MS1.Free;
MS2.Free;
end;
end; //保存至資料庫
var
MS1, MS2: TMemoryStream;
begin
MS1 := TMemoryStream.Create;
MS2 := TMemoryStream.Create;
try
with ADOQuery1 do
begin
if not Active then Open;
MS1.WriteComponent(Form1);
MS1.Position:=0;
ObjectBinaryToText(MS1, MS2);
Append;
MS2.Seek(0, soFromBeginning);
TBLOBField(FieldByName('tList')).LoadFromStream(MS2);
Post;
end;
finally
MS1.Free;
MS2.Free;
end;
end;
發表人 - Rain 於 2003/07/02 11:19:57
|
soulin12
一般會員 發表:22 回覆:21 積分:8 註冊:2003-05-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |