access adoquery SQL Blob |
尚未結案
|
maxbo
一般會員 ![]() ![]() 發表:11 回覆:15 積分:5 註冊:2003-05-11 發送簡訊給我 |
在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 發送簡訊給我 |
紅色那行換個位置試試:
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 發送簡訊給我 |
|
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
正常的程序應該是:
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |