全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1518
推到 Plurk!
推到 Facebook!

access adoquery SQL Blob

尚未結案
maxbo
一般會員


發表:11
回覆:15
積分:5
註冊:2003-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-10 13:30:01 IP:211.95.xxx.xxx 未訂閱
在access库中有表IMAGEFILE,其有三个字段:IMG_FILENAME(文本),IMG_FILESIZE(数字),IMG_FILEDATA(OLE对象).我用想用ADOquery将一些图片,word文档或excel文档等保存到IMAGEFILE表中,下面是我的作法: function FileSizes(filename:string):integer;//取得文件大小 var f:file of byte; begin assignfile(f,filename); reset(f); result:=filesize(f); closefile(f); end; procedure TForm1.Button1Click(Sender: TObject); //添加文件到表IMAGEFILE中 var temp:string; FS: TFileStream; begin if OpenDialog1.Execute then begin adoquery1.Parameters.AddParameter.Name:='IMG_FILEDATA'; temp:='insert into IMAGEFILE(IMG_FILENAME,IMG_FILESIZE,IMG_FILEDATA) values('; temp:=temp '"' extractfilename(OpenDialog1.filename) '",'; temp:=temp inttostr(filesizes(OpenDialog1.filename)) ','; temp:=temp ':IMG_FILEDATA)'; FS:=TFileStream.Create(OpenDialog1.filename, fmOpenRead or fmsharedenywrite); fs.Seek(0,sofrombeginning); adoquery1.Parameters.ParamByName('IMG_FILEDATA').LoadFromStream(fs,ftblob); adoquery1.close; adoquery1.sql.clear; adoquery1.sql.add(temp); adoquery1.Prepared; adoquery1.execsql; adoquery1.Parameters.Clear; fs.Free; end; end; 结果却是若连续添加文件到表IMAGEFILE中,则只有第一次的文件保存成功了,其后的都没有保存成功! 不知这是何故?请各位多多指教!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-10 13:53:13 IP:202.39.xxx.xxx 未訂閱
紅色那行換個位置試試:
procedure TForm1.Button1Click(Sender: TObject);
//添加文件到表IMAGEFILE中
var
  temp:string;
  FS: TFileStream;
begin
  if OpenDialog1.Execute then
  begin
    adoquery1.Parameters.AddParameter.Name := 'IMG_FILEDATA';
    temp := 'insert into IMAGEFILE(IMG_FILENAME,IMG_FILESIZE,IMG_FILEDATA) values(';
    temp := temp   '"'   extractfilename(OpenDialog1.filename)   '",';
    temp := temp   inttostr(filesizes(OpenDialog1.filename))   ',';
    temp := temp   ':IMG_FILEDATA)';
    FS := TFileStream.Create(OpenDialog1.filename, fmOpenRead or fmsharedenywrite);
    fs.Seek(0,sofrombeginning);
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add(temp);
    adoquery1.Prepared;
    adoquery1.Parameters.ParamByName('IMG_FILEDATA').LoadFromStream(fs, ftblob);
    adoquery1.execsql;
    adoquery1.Parameters.Clear;
    fs.Free;
  end;
end;
--- Everything I say is a lie.
maxbo
一般會員


發表:11
回覆:15
積分:5
註冊:2003-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-11 00:55:14 IP:211.95.xxx.xxx 未訂閱
多谢!这么一改就可以了! 但为什么会这样呢?还望多多指点!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-11 08:14:45 IP:202.39.xxx.xxx 未訂閱
正常的程序應該是: 1.ADOQuery1.Close; 2.ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add(...); 或直接 ADOQuery1.SQL.Text := '...'; 3.有 Parameters 的話 ADOQuery1.Parameters.ParamValues['ParamName'] := ...; 或本例的 ADOQuery1.Parameters.ParamByName('ParamName').LoadFromStream 4.最後再 ADOQuery1.Open; / ADOQuery1.ExecSQL; 您原本的方式是還沒指定 SQL, 就設 Parameters 的值 所以出問題了 --- Everything I say is a lie.
maxbo
一般會員


發表:11
回覆:15
積分:5
註冊:2003-05-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-11 14:49:56 IP:211.95.xxx.xxx 未訂閱
原来如此! 多谢!!真的多谢!
系統時間:2024-06-28 13:49:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!