線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1067
推到 Plurk!
推到 Facebook!

請教文件流的問題 Stream

尚未結案
soulin12
一般會員


發表:22
回覆:21
積分:8
註冊:2003-05-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-01 17:06:40 IP:61.145.xxx.xxx 未訂閱
向高手們請教一個問題: 我建了一個 Form,里面放了若干個 VCL 控件,然後我想用 Stream 的方式把當前Form的所有對象的數據保存在一個SQL 數據表的一個字段里面,該怎樣實現?,而且表的字段應該用何種數據類型,以及怎樣從字段中讀取該數據出來
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-01 18:56:29 IP:218.85.xxx.xxx 未訂閱
把所有物件資料都保存進去比較難,下面是一個保存整個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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-02 08:05:40 IP:218.163.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-02 08:36:19 IP:61.155.xxx.xxx 未訂閱
向高手們請教一個問題: 我建了一個 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-02 09:41:54 IP:218.85.xxx.xxx 未訂閱
哈哈,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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-07 09:07:33 IP:61.145.xxx.xxx 未訂閱
每位提供的方法都很不錯,可苦了我這得分應該給誰呢?沒有給到得分的我一樣從心里感謝你們
系統時間:2024-05-18 19:11:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!