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

請問如何把一個二進位檔存入資料庫中....

尚未結案
minjiu
中階會員


發表:27
回覆:119
積分:69
註冊:2002-06-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-24 14:58:46 IP:218.164.xxx.xxx 未訂閱
請問如何把一個二進位檔(如Word檔或執行檔之類)存入資料庫(.DB)中的二進位欄位,及從一個二進位欄位還原成一個檔案...煩請各位高手回答一下..謝謝!!
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-24 17:10:22 IP:211.96.xxx.xxx 未訂閱
先看看你用什麼databsae系統,不見得所有的database都支援blob格式的資料,就算有支援,最大可以存入多大的二進位資料,也不盡相同,還有像mysql里的blob與big5碼不能共存的問題也是個大麻煩~
procedure TForm1.Button1Click(Sender: TObject);
var fstrm : TFileStream;
    BS : TBlobStream;
begin
   with ADOQuery1 do begin  // 隨你喜歡,看是要用ADO還是BDE,只要能支持BLOB欄位格式的Database都可以
      SQL.Clear;
      SQL.Add('SELECT A,B,C FROM DATAX WHERE A=1');  // 我亂掰的,自己依需求修改一下
      EXECSQL;
      OPEN;
      fstrm:=TFileStream.Create('C:\AUTOEXEC.BAT',fmOpenRead OR fmShareDenyWrite);
      fstrm.Seek(soFromBeginning,0);
      if fstrm.size>0 then begin
         if recordcount=0 then  // SELECT 得到記錄就修改該筆記錄,找不到就新增一筆
            APPEND
         else 
            edit;
         BS:=TBlobStream(CREATEBLOBSTREAM(FIELDBYNAME('C'),bmWrite));  // C欄位是BLOB格式,用IMAGE可以支援到2G,用多少才佔多少實体空間
         BS.CopyFrom(fstrm,0);
         BS.Free;     // 啥感覺都沒就寫入了到SQL了...當然,有安全顧慮的系統,要自己修改一下
         post;
      end
      else showmessage('無法加入其他文件夾的資料');
      freeandnil(fstrm);
      CLOSE;
   END;
end;
從SQL讀回來的方法
   fstrm:=TFileStream.Create('C:\AUTOEXEC.BAK',fmCreate); // 故意寫成BAK的,免得寫壞了害你不能開機
   fstrm.CopyFrom(CREATEBLOBSTREAM(FIELDBYNAME('C'),bmRead),0);
   freeandnil(fstrm);        
我不懂,不懂,不懂....所以我才來ktop學工夫
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-24 17:13:23 IP:203.95.xxx.xxx 未訂閱
請參考: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=38823 http://delphi.ktop.com.tw/topic.php?topic_id=19505
系統時間:2024-05-16 19:53:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!