unit tUnit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,jpeg, StdCtrls, ExtCtrls, DB, ADODB;type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    ADOQuery1: TADOQuery;
    ADOConnection1: TADOConnection;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ADOQuery1AfterScroll(DataSet: TDataSet);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Image1.Picture.LoadFromFile(OpenDialog1.FileName);    //加载图片
end;procedure TForm1.Button2Click(Sender: TObject);
var ext:string;
begin
if image1.Picture.Graphic<>nil then
begin
try
adoconnection1.begintrans;//ado连接
adoquery1.Edit;
adoquery1.FieldByName('photo').Assign(image1.Picture.Graphic);//以下记录保存到数据库的图像格式
ext:=extractfileext(opendialog1.FileName);
if uppercase(ext)='.BMP' THEN
adoquery1.FieldByName('isbmp').Value:=1
ELSE
IF(UPPERCASE(EXT)='.JPEG') OR (UPPERCASE(EXT)='.JPG')
THEN
adoquery1.FieldByName('isbmp').Value:=2;
adoquery1.Post;
adoconnection1.CommitTrans;
except
adoconnection1.RollbackTrans;
showmessage('图片保存失败!');
end;//tryend;
end;//从数据表中显示图片:(AfterScroll,Afteropen等事件)
end;procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
var jpegimage:tjpegimage;
begin
Image1.Picture.Graphic:=nil;//BMP、JPEG两种图像数据必需分别处理
if adoquery1.FieldByName('isbmp').AsString='1'
then
begin
Image1.Picture.Bitmap.Assign(adoquery1.FieldByName('photo'));
end
else
if adoquery1.FieldByName('isbmp').AsString='2'
then begin jpegimage:=tjpegimage.Create;//通过jpegimage将图像显示在image1,否则会出错
try
jpegimage.Assign(adoquery1.FieldByName('photo'));
Image1.Picture.Graphic:=jpegimage;
finally
jpegimage.Free;
end;//tryend;
end;
end;
end.
运行时提示对象关闭时,不允许操作,请教是哪里有问题?

解决方案 »

  1.   

    说明你的adoquery1没有打开,你就进行了读取或编辑操作。
      

  2.   

    大哥,你怎么写代码没有缩进啊!想累死人啊!
    你if adoquery1.FieldByName('isbmp').AsString='1'  先是不是应该Select 一下啊,我猜测啊
      

  3.   

    adoconnection1.begintrans;//ado连接 
    adoquery1.Edit; 
    adoquery1还没有执行SQL语句,就adoquery1.Edit; 当然出错了~~
      

  4.   

    如果提示对像关闭,你需要重新打开一下数据集,另外看看查一下你的数据库中,看看photo字段是不是为null