大家好 我的Delphi使用的是sql資料庫,需要通過delphi將pdf檔案存入sql資料庫中,然后進行讀取
新增時 將對應檔案摘要123(pdf檔案)存入sql資料庫
查詢時 查詢到123時同時顯示其對應的pdf檔案
我需要怎么做?求大神指教
分數不多,求大神不吝賜教
uj5u.com熱心網友回復:
對于PDF檔案,大于1M后,資料讀取速度慢,且占用空間大,造成資料庫讀取很慢。建議不要存放奪資料庫中,而是存放在磁盤目錄中,資料庫僅保存“目錄檔案名”。
如果你非得存入資料庫中,要將檔案以二進制的形式存入資料庫中,如果是三層的話,可將檔案轉換成流或字符形式傳輸并保存。
代碼大致:
1、資料庫表中建立Blob欄位'FBD',用于保存PDF檔案。
2、代碼
ADOQuery1.Edit;
TBlobField(ADOQuery1.FieldByName('PDF')).LoadFromFile
ADOQuery1.Post;
三層的代碼復雜一些。
uj5u.com熱心網友回復:
代碼能不能再具體點

新手,不是特別懂
uj5u.com熱心網友回復:
代碼能不能再具體點???新手,不是特別懂uj5u.com熱心網友回復:
可以百度一下了,估計很多的,還是保存在本地磁盤中,資料庫中保存檔案路徑吧。uj5u.com熱心網友回復:
樓主解決了嗎,我也需要,能共享一下嗎uj5u.com熱心網友回復:
獲取pdf檔案內容,或摘要可以用quickpdf或者福昕的dlluj5u.com熱心網友回復:
procedure Tmainform.Button1Click(Sender: TObject);//var
// Stream:TMemoryStream;
begin
if ((dm.DcmtkADOQReport.Active=false) or(dm.DcmtkADOQReport.RecordCount=0) ) then exit;
dm.adoquery1.Close;
dm.adoquery1.sql.text:='select * from RptBin where Report_ID_parent='+dm.DcmtkADOQReport.fieldbyname('Report_ID').AsString;
dm.adoquery1.open;
if dm.ADOQuery1.RecordCount<>0 then
begin
TBlobfield(dm.adoquery1.fieldbyname('Data')).SaveToFile('d:\Ris\'+dm.DcmtkAdoQreport.fieldbyname('Report_ID').AsString+'.pdf');
shellExecute(handle,'open',pansichar('d:\Ris\'+dm.DcmtkAdoQreport.fieldbyname('Report_ID').AsString+'.pdf'),nil,nil,SW_SHOW);
end;
end;
procedure Tmainform.Button2Click(Sender: TObject);
//var
// Stream:TMemoryStream;
begin
//Stream := TMemoryStream.Create; // 創建記憶體流
dm.DcmtkADOQReport.close;
dm.DcmtkADOQReport.sql.text:='Insert into RptBin (DataType ,Data,Report_ID_parent) values ('+format('''%s''',['pdf'])+','+':PdfData'+','+'20170809002'+')';
dm.dcmtkAdoQReport.Parameters.ParamByName('PdfData').LoadFromfile('d:\ab.pdf',ftVarBytes);// 讀取
dm.DcmtkADOQReport.ExecSQL;
end;
uj5u.com熱心網友回復:
如果是SQL Server 2008的又要上微軟看仔細了:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=44272,對于BLOB欄位是要在客戶端安裝驅動的轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/52191.html
標籤:數據庫相關
下一篇:Delphier也可以擁抱開源
