本人初学delphi,在开发一个小软件,但碰到一个从access中读取图片的问题。在access中我设置了一个‘照片’的字段,保存的是图片的路径,并根据传入的不同的变量名来显示照片.. 部分代码如下:
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.sql.add('select * from main where 姓名='''+name'''');
adoquery1.open;
Image1.Picture.LoadFromFile(ADOQuery3.fieldbyname('照片').AsString); 提示错误 class EInvalidGraphic with message 'Unkown picture file extension(.)'
但如果我将 adoquery1.sql.add('select * from main where 姓名='''+name'''');
修改为 adoquery1.sql.add('select * from main where 姓名=''tom''');时又一切正常,也就是说如果是写入具体的值就没问题,传入变量就不行,请问这是怎么回事,已经研究好多天了,一直无法解决,请大家帮帮忙,非常感谢!!!!
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.sql.add('select * from main where 姓名='''+name'''');
adoquery1.open;
Image1.Picture.LoadFromFile(ADOQuery3.fieldbyname('照片').AsString); 提示错误 class EInvalidGraphic with message 'Unkown picture file extension(.)'
但如果我将 adoquery1.sql.add('select * from main where 姓名='''+name'''');
修改为 adoquery1.sql.add('select * from main where 姓名=''tom''');时又一切正常,也就是说如果是写入具体的值就没问题,传入变量就不行,请问这是怎么回事,已经研究好多天了,一直无法解决,请大家帮帮忙,非常感谢!!!!
两个是相等的,测试如下
procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
str1:string;
str2:string;
begin
str := 'select * from main where 姓名=''tom''';
showmessage(str);
str1 := 'tom';
str2 := 'select * from main where 姓名='''+str1+'''';
showmessage(str2);
if str=str2 then
showmessage('相等');
end;你测试下,如果相等,就是其它问题了
showmessage下ADOQuery3.fieldbyname('照片').AsString的内容,再看看
showmessage(ADOQuery3.fieldbyname('照片').AsString);
看看,是不是这个内容没有后缀名或者这个文件不存在
但如下两个结果应该是一致的
procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
str1:string;
str2:string;
begin
str1 := 'tom'; adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.sql.add('select * from main where 姓名=''tom''');
adoquery1.open;
Image1.Picture.LoadFromFile(ADOQuery3.fieldbyname('照片').AsString); adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.sql.add('select * from main where 姓名='''+str1+'''');
adoquery1.open;
Image2.Picture.LoadFromFile(ADOQuery3.fieldbyname('照片').AsString);end;
procedure Tmoreform.FormCreate(Sender: TObject);
begin
adoquery1.close;
adoquery1.SQL.Clear;
adoquery1.SQL.add('select * from main where 姓名=:xm');
adoquery1.Parameters.ParamByName('xm').Value:=morename;//morename是传过来的变量
adoquery1.open;
xm.text:=adoquery1.fieldbyname('姓名').asstring;
ch.text:=adoquery1.fieldbyname('绰号').asstring;
combobox1.text:=adoquery1.fieldbyname('性别').asstring;
..............
image1.Picture.LoadFromFile(adoquery1.fieldbyname('照片').asstring);
但总是提示 class EInvalidGraphic with message 'Unkown picture file extension(.)'但如果我新建一个 button 把 image1.Picture.LoadFromFile(adoquery1.fieldbyname('照片').asstring); 这条语句放到 button的 click 事件中 又不会有错误....就是说要点击下按钮显示图片就不会有错误发生..... 这是啥问题啊...
把FormCreate里的代码读取图片的代码放到FormShow试试
Uses jpeg
没有加上
procedure Tselform.DBGrid1DblClick(Sender: TObject);
begin
if adoquery1.Fields[0].Value<>null then
morename:=adoquery1.Fields[0].Value;
application.CreateForm(Tmoreform,moreform);
moreform.ShowModal;
end;
以下这个是肯定没有问题的
uses
jpeg;
procedure TForm1.FormCreate(Sender: TObject);
var
str:string;
begin
str:=extractfilepath(application.exename)+ 'a.jpg';
image1.Picture.LoadFromFile(str);
end;
然后在你的程序中
showmessage(adoquery1.fieldbyname('照片').asstring);
看看是什么,拷贝这个路径到上例的str中,试试,应该也没问题才对,如果有问题就是
adoquery1.fieldbyname('照片').asstring的问题如果都没问题就是你的程序其它问题
你再查查吧