我做了一个小东西,用ACCESS做数据库,
建了个表
XMMC(项目名称)文本
XM(姓名)文本
GZL(工作量)数字
ZLXS(质量系数)数字
TP(JEPG图片)OLE对象
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  JPEGImage:TJPEGImage;
begin
  JPEGImage:=TJPEGImage.Create;   //创建JPEG图像对象
  if OpenPictureDialog1.Execute then
  try
    JPEGImage.LoadFromFile(OpenPictureDialog1.FileName);   //从文件中装载jpg图像,
    ADOquery1.Edit;
    DBImage1.Picture.Bitmap.Assign(JPEGImage);      //将jpg导入
    ADOquery1.Post;
  finally
    JPEGImage.Free;               //释放对象
  end;end;我用dbgrid显示,adoquery1中间还添加了一项ZJ(INTERGER) 是ZLXS*GZL
 adoquery1.Fieldbyname('ZJ').value:=adoquery1.Fieldbyname('GZL').value*adoquery1.Fieldbyname('ZLXS').value;
能运行却老说出错说类型转换错误invalid variant operation
谁能帮帮我?

解决方案 »

  1.   

    楼主没有说明是运行到哪一步出的错;把图片的格式转成bmp或许不会有错
      

  2.   

    大对象(Bianry Large Object)字段的操作(在ACCESS中是OLE字段),以BMP为例,bmp到jpg的转换用Assign就可以了。BDE:
    向字段中保存图片:(图片格式为bmp)
    begin
     Table1.Edit;
     if OpenDialog1.Execute then
     begin
      (Table1.FieldByName('照片') as TBlobField).LoadFromFile(OpenDialog1.FileName);
      Table1.Post;
     end;
    end;读取字段中的图片:(图片格式为bmp)
    var
     bs:TBlobStream;
    begin
     bs := TBlobStream.Create((Table1.FieldByName('照片') as TBlobField), bmRead);
     Image1.Picture.Bitmap.LoadFromStream(bs);
     bs.Free;
    end;ADO:
    向字段中保存图片:(图片格式为bmp)
    begin
     ADOTable1.Edit;
     if OpenDialog1.Execute then
     begin
      (ADOTable1.FieldByName('照片') as TBlobField).LoadFromFile(OpenDialog1.FileName);
      ADOTable1.Post;
     end;
    end;读取字段中的图片:(图片格式为bmp)
    var
     bs:TMemoryStream;
    begin
     bs:=ADOTable1.CreateBlobStream(ADOTable1.FieldByName('照片'),bmRead);
     Image1.Picture:=nil;
     Image1.Picture.Bitmap.LoadFromStream(bs);
     bs.Free;
    end;