WORD 無法存到 MS SQL? |
答題得分者是:kevin2004
|
joana
一般會員 發表:35 回覆:70 積分:21 註冊:2005-09-02 發送簡訊給我 |
我有搜尋貴站上關於 BLOB之資料,想寫一個 WORD 檔存入 MS SQL2000 之程式, 用的是 Delphi5+ADO
FIELD TYPE 是 IMAGE,如下列之程式, 但為何 Word_FileStream.Size =0,當然檔案也沒存進資料庫 請各位有經驗的高手,幫忙看看,是那裡有弄錯,謝謝! procedure TForm1.BitBtn4Click(Sender: TObject); var Word_FileStream : TMemoryStream; begin if not openDialog1.Execute then EXIT; Word_FileStream := TMemoryStream.Create; Word_FileStream.LoadFromFile(OpenDialog1.FileName); try ADOQuery1.insert; ADOQuery1['SYS_PATH']:=OpenDialog1.FileName; ADOQuery1['SYS_SIZE']:=Word_FileStream.Size ; TBlobField(ADOQuery1.FieldByName('SYS_IMAG')).LoadFromStream(Word_FileStream); ADOQuery1.post; finally Word_FileStream.free; end; end; |
joana
一般會員 發表:35 回覆:70 積分:21 註冊:2005-09-02 發送簡訊給我 |
不了解,為何用TMEMORYSTREAM 無法存入資料庫,但用下列程式碼就OK?難到只能用LoadFromFile,
而不能用LoadFromStream嗎? adoQuery.Close; adoQuery.SQL.Clear; adoQuery.Parameters.Clear; adoQuery.SQL.Add('INSERT INTO [FileTable] (FileData)'); adoQuery.SQL.Add('VALUES (:FileData)'); adoQuery.Parameters.ParamByName('FileData').LoadFromFile('FileName.doc',ftBlob); adoQuery.ExecSQL; |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
==>試改如下
var FS : TFileStream ; begin if not openDialog1.Execute then EXIT; try FS := TFileStream.Create(OpenDialog1.FileName,fmOpenRead ); ADOQuery1.insert; ADOQuery1['SYS_PATH']:=OpenDialog1.FileName; ADOQuery1['SYS_SIZE']:=FS.Size ; TBlobField(ADOQuery1.FieldByName('SYS_IMAG')).LoadFromStream(FS); ADOQuery1.post; ...............
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
對不起,小弟看錯你的題意了。你的問題是你的MemoStream碼為何存Blob失敗,而不是要改用別的元件。
我才找出一篇跟你的碼及問題一模一樣的文章,不過沒有結論。 ==>http://delphi.ktop.com.tw/topic.php?topic_id=19505 這邊還有一篇類似的,參考一下: smWH:=TMemoryStream.Create; Attachment.SaveToStream(smWH); smWH.Position:=0; DM.cdsWHDetail_.LoadFromStream(smWH);
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
經仔細研讀TStream,確定是你未將Postition移好位置所致
==>請看OnLineHelp例 procedure TForm1.Button1Click(Sender: TObject); var TempStream : TMemoryStream; begin TempStream := TMemoryStream.Create; ListBox1.Items.SaveToStream(TempStream); // write list box contents to the stream TempStream.Position := 0; // reset to the beginning of the stream RichEdit1.Lines.LoadFromStream( TempStream); // load stream contents into rich edit control TempStream.Free; end;
------
Kevin |
joana
一般會員 發表:35 回覆:70 積分:21 註冊:2005-09-02 發送簡訊給我 |
謝謝kevin2004的回覆,沒錯,的確是Position 之問題,總算解決我的疑惑,真感謝您熱心的解惑.
正確的程式碼應該如下: var Word_FileStream : TMemoryStream; begin if not openDialog1.Execute then EXIT; Word_FileStream := TMemoryStream.Create; Word_FileStream.LoadFromFile(OpenDialog1.FileName); Word_FileStream.Position := 0; try ADOQuery1.insert; ADOQuery1['SYS_PATH']:=OpenDialog1.FileName; ADOQuery1['SYS_SIZE']:=Word_FileStream.Size ; TBlobField(ADOQuery1.FieldByName('SYS_IMAG')).LoadFromStream(Word_FileStream); ADOQuery1.post; finally Word_FileStream.free; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |