请大家帮忙看下这段代码

chdaner 2009-07-31 09:00:26
unit tUnit1;

interface

uses
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.


运行时提示对象关闭时,不允许操作,请教是哪里有问题?
...全文
105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
火龙岛主 2009-08-01
  • 打赏
  • 举报
回复
adoquery1需要
adoquery1.open;
阿三 2009-07-31
  • 打赏
  • 举报
回复
如果提示对像关闭,你需要重新打开一下数据集,另外看看查一下你的数据库中,看看photo字段是不是为null
不得闲 2009-07-31
  • 打赏
  • 举报
回复
数据集都还没打开
de410 2009-07-31
  • 打赏
  • 举报
回复
adoconnection1.begintrans;//ado连接
adoquery1.Edit;


adoquery1还没有执行SQL语句,就adoquery1.Edit; 当然出错了~~



kampan 2009-07-31
  • 打赏
  • 举报
回复
大哥,你怎么写代码没有缩进啊!想累死人啊!
你if adoquery1.FieldByName('isbmp').AsString='1' 先是不是应该Select 一下啊,我猜测啊
mjp1234airen4385 2009-07-31
  • 打赏
  • 举报
回复
说明你的adoquery1没有打开,你就进行了读取或编辑操作。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧