我是一个只有两个月的delphi莱鸟,我在尝试做一个数据库时遇到了以下的问题,救大家帮忙帮忙,先谢谢了。
我的数据库表名为member,用以下语句来定位数据库
ADOTable1.Locate('member',mynode.text,[]);
之后,再用一个loadimage过程来读bmp图片,如下:
procedure TMemberInf.loadimage;
var
bmp:TBitmap;
begin
try
bmp := Tbitmap.Create;
ADOQuery1.Open;
bmp.Assign(ADOQuery1.FieldByName('pirture'));
Image1.Picture.Bitmap:=bmp;
finally
bmp.Free;
end;
end;其他的资料信息可以读出来,只是图片读不到,错误提示是:
[Warning] MemberInfU.pas(258): Variable 'bmp' might not have been initialized
我莱莱,多时解决不了,望大家帮忙。
我的数据库表名为member,用以下语句来定位数据库
ADOTable1.Locate('member',mynode.text,[]);
之后,再用一个loadimage过程来读bmp图片,如下:
procedure TMemberInf.loadimage;
var
bmp:TBitmap;
begin
try
bmp := Tbitmap.Create;
ADOQuery1.Open;
bmp.Assign(ADOQuery1.FieldByName('pirture'));
Image1.Picture.Bitmap:=bmp;
finally
bmp.Free;
end;
end;其他的资料信息可以读出来,只是图片读不到,错误提示是:
[Warning] MemberInfU.pas(258): Variable 'bmp' might not have been initialized
我莱莱,多时解决不了,望大家帮忙。
解决方案 »
- 从A数组中找B数组中的相近的数字
- 请教,新出的rad studio xe2有教程卖吗?
- 关于窗体ShowModal的一个问题
- 给onclick赋值?
- 一个函数返回两个参数怎么做,菜鸟提问
- 将数据库的sql脚本保存起来,在程序执行前,可以让用户自已设定连接,初始化数据库
- 窗體重畫問題
- 用DecisionQuery+Datasetprovider构成com+,用socketconnection+clientDataset+DecisionCube+DataSource构成client
- 誰有InfoPower3000Std_vcl6 for d6的安裝密碼﹐我很想使用它﹐無限感激。
- TreeView的一个问题,请高手指教?!
- 刚从 派出所 出来
- rzCheckTree中,改变checked值回执行什么事件???急!
procedure TForm1.savetodbClick(Sender: TObject); //保存图像
var
strm:tmemorystream;
ext:string;
begin
if image1.picture.Graphic <> nil then //避免image1中无图像保存出错
begin
ext:=extractfileext(openpicturedialog1.FileName );
strm := tmemorystream.Create ;
try
image1.Picture.Graphic.SaveToStream(strm);
adotable1.Edit ;
strm.Position :=0;
DBImage1.dataField :=''; //dbimage只能显示BMP,否则myimage由BMP变为jpeg时会出错
tblobfield(adotable1.FieldByName('myimage')).LoadFromStream(strm);
//如需直接由文件保存 TBlobField(adotable1.FieldByName('myimage')).LoadFromFile(OpenPictureDialog1.FileName);
//以下记录保存到数据库的图像格式
if uppercase(ext) = '.BMP' then
begin
adotable1.FieldByName('isbmp').Value := 1;
dbimage1.dataField := 'myimage';
end
else if (uppercase(ext) = '.JPG') OR ( uppercase(ext) = '.JPEG') THEN
adotable1.FieldByName('isbmp').Value := 0;
adotable1.Post ;
finally
strm.Free ; //如果你选用TBLOBSTREAM类,程序运行到此语句会出错,可该语句前添入adotable1.edit
end;
end;
end;
///如下显示方法不适用于paradox中的graphic字段的显示。
procedure TForm1.adoTable1AfterScroll(DataSet: TDataSet); //显示图像
var
strm:tadoblobstream;
jpegimage:tjpegimage;
bitmap:tbitmap;
begin
strm := tadoblobstream.Create(tblobfield(adotable1.fieldbyname('MYIMAGE')),bmread);
try //try1
strm.position :=0;
image1.Picture.Graphic := nil;
DBIMAGE1.DataField := '';
//显示时,BMP、JPEG两种图像数据必需分别处理
if adotable1.fieldbyname('isbmp').asstring ='1' then
begin //begin11
bitmap := tbitmap.Create ;
try //try11
bitmap.LoadFromStream(strm);
image1.Picture.Graphic := bitmap;
DBIMAGE1.DataField := 'myimage';
finally
bitmap.Free;
end; //end try11
end //end begin11
else if adotable1.fieldbyname('isbmp').asstring ='0' then
begin //begin12
jpegimage := tjpegimage.Create ;
try //try12
jpegimage.LoadFromStream(strm);
image1.Picture.Graphic := jpegimage;
finally
jpegimage.Free ;
end; //end try12
end; //end begin12
finally
strm.Free ;
end; //end try1
end;
保存 :
var
Ms:TmemoryStream;
Jpg:Tjpegimage;
begin
ms:=TmemoryStream.Create;
Jpg.Assign(Image1.Picture.Graphic);
Jpg.SaveToStream(Ms) ;
Ms.Position :=0;
ADOquery1.append;
TBlobField(ADOquery1.FieldByName('img')).LoadFromStream(Ms);
ADOquery1.Post;
Ms.Free;
Jpg.free;
end;读取到image中:
Var
Ms:TStringStream;
Jpg:Tjpegimage;
begin
Ms:=TstringStream.Create('');
TBlobField(ADOquery1.FieldByName('img')).SaveToStream(Ms);
Ms.Position :=0;
Jpg.LoadFromStream(Ms);
Image2.Picture.Assign(Jpg);
Ms.Free;
Jpg.free;
end;我试过了,OK。楼主试试看...
__________↑// <--------编译到这里,就停啦.提示"Undeclared identifier."TBlobfield"
jpg:=tjpegimage.Create;//加在上面的BEGIN之后
__________↑// <--------编译到这里,就停啦.提示"Undeclared identifier."TBlobfield"怎样解决?
[Warning] MemberInfU.pas(258): Variable 'bmp' might not have been initialized补充一下,开头时我的代码写错了
ADOQuery1.Open;
bmp.Assign(ADOQuery1.FieldByName('pirture'));
应该是
ADOTable1.Open;
bmp.Assign(ADOTable1.FieldByName('pirture'));
bmp := Tbitmap.Create;
ADOQuery1.Open;
bmp.Assign(ADOQuery1.FieldByName('pirture'));
Image1.Picture.Bitmap:=bmp;
finally
bmp.Free;
end;
------------
你的代码只是警告,不是错误啊
写成:
bmp := Tbitmap.Create;
try //try写在这就不会有警告了.
ADOQuery1.Open;
bmp.Assign(ADOQuery1.FieldByName('pirture'));
Image1.Picture.Bitmap:=bmp;
finally
bmp.Free;
end;