delphi多次写入acess数据库图片,记录只有一条 ( 积分: 100 )

  • 主题发起人 主题发起人 red_blue
  • 开始时间 开始时间
R

red_blue

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
procedure TForm2.Button1Click(Sender: TObject);
var
imPicture: TJpegImage;
jpeg : TJpegImage;
imStream: TMemoryStream;
begin
if OpenPictureDialog1.execute then
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
imPicture := TJpegImage.create;
imPicture.Assign(Image1.Picture.Graphic);
imStream := TMemoryStream.Create;
imStream.Clear;
imPicture.SaveToStream(imStream);
FreeAndNil(imPicture);
ADOQuery1.edit;
TBlobField(ADOQuery1.FieldByName('个人图片')).LoadFromStream(imStream);
ADOQuery1.Post;
jpeg := TJpegImage.Create;
imStream.Clear;
ADOQuery1.Edit;
TBlobField(ADOQuery1.FieldByName('个人图片')).SaveToStream(imStream);
ADOQuery1.Post;
imStream.Position := 0;
jpeg.LoadFromStream(imStream);
DBImage1.Picture.Assign(jpeg);
FreeAndNil(jpeg);
end;
end.
有想在数据库中插入一条新记录,不想覆盖以前的记录,但执行几次还是只有一条记录,怎么能生成新记录,或在最后一条记录后插入一条新记录
 
ADOQuery1.Edit; //是编辑
ADOQuery1.Append; //这个是插入记录
好像是差在这里
 
应该查询一下标识,当有标识对应的记录时,用Edit;否则用Append;
 
数据库里应增加一个保存图片名的字段,这个字段的内容就是OpenPictureDialog1.FileName,当然可以通过函数去掉文件名中的路径。然后在打开库时通过查询该字段中是否已经有了当前要操作的图片文件名,如果有,则用你现在的程序,否则要在当前使用“ ADOQuery1.edit;”的地方使用“ADOQuery1.Append; ”。其它的不变。
procedure TForm2.Button1Click(Sender: TObject);
var
imPicture: TJpegImage;
jpeg : TJpegImage;
imStream: TMemoryStream;
s:string;
const
sqltxt='select * from %S while 图片名="%S"'
begin
if OpenPictureDialog1.execute then begin
s:=OpenPictureDialog1.FileName
Image1.Picture.LoadFromFile(s);
imPicture := TJpegImage.create;
imPicture.Assign(Image1.Picture.Graphic);
imStream := TMemoryStream.Create;
imStream.Clear;
imPicture.SaveToStream(imStream);
FreeAndNil(imPicture);
end;
……
ADOQuery1.sql.txt:=format(sqltxt,[文件名,s]);
ADOQuery1.open;
if not ADOQuery1.eof then ADOQuery1.edit
else ADOQuery1.append;
TBlobField(ADOQuery1.FieldByName('个人图片')).LoadFromStream(imStream);
ADOQuery1.Post;
jpeg := TJpegImage.Create;
imStream.Clear;
ADOQuery1.Edit;
TBlobField(ADOQuery1.FieldByName('个人图片')).SaveToStream(imStream);
ADOQuery1.Post;
imStream.Position := 0;
jpeg.LoadFromStream(imStream);
DBImage1.Picture.Assign(jpeg);
FreeAndNil(jpeg);
end;
end.
 
同意:cdj000,
就是差在这里 :
ADOQuery1.Edit; //是编辑
ADOQuery1.Append; //这个是插入记录

不过,通过上述语句添加记录,其执行效率太低了,所以如果是多次插入记录,建议用Insert into命令。
 
谢谢大家,给我开阔了一个思路,呵呵,建一个标识就可以定位记录了;不断的完善程序中
 
后退
顶部