Access中有一表,有一字段(PIC)已经存在图片,该图片是在Access中通过插入对象的方式插入的,我已经在本论坛中查找了以前的贴子,但解决不了我的问题.总是显示不出来.

解决方案 »

  1.   

    function TfrmTest.GetThumbFromDb(Kindcode:string): TBitMap;//Kindcode为图片的标识号
    var adoqTemp:TADOQuery;
        ABit:TBitMap;
        bs:Tstream;
    begin
      try
        adoqTemp:=TADOQuery.Create(self);
        adoqTemp.Connection:=adocMain;
        bs:=Tstream.Create;
        ABit:=TBitMap.Create;
        with adoqTemp do
        begin
          close;
          sql.Text:='select Pic from ThumbImage where kindcode=:kindcode ';
          prepared;
          parameters.ParamByName('kindcode').Value:=kindcode;
          open;
          if Recordcount<>1 then
          begin
            Result:=nil;
            exit;
          end
          else
            bs:=CreateBlobStream(FieldByName('Pic'),bmRead); 
            ABit.LoadFromStream(bs);
            Result:=ABit;
        end;
      finally
        FreeAndNil(adoqTemp);
        FreeAndNil(bs);
      end;
    end;
      

  2.   

    Image1.Picture.Bitmap.Assign(TBLOBField(ADOQuery1.Parameters.ParamByName('Pic')))
      

  3.   

    var
      stream: TStream;
      JpgImg: TJPEGImage;
    ...
    with AQuery do
    begin
      ....;
      //Open之后
      stream := CreateBlobStream (FieldByName ('YourAFieldName'));
      //...创建JPEG对象
      JpgImg.LoadFromStream (stream);
      JpgImg.SaveToFile ('YourFileNameOfPicture');
      //...消毁JPEG对象
      //如下是调用图像(如果你要将它显示在TImage控件上的话)
      AImage.Picture.LoadFromFile (YourFileNameOfPicture');
    end;
      

  4.   

    刚才的CreateBlobStream()函数忘了写第二个参数了,补上"bmRead"!:)
      

  5.   


    TO:gzhk(gz)  ABit.LoadFromStream(bs); 运行到这里时,出现"位图无效"的对话框.
    ---------------------------
    ---------------------------
    Bitmap image is not valid.
    ------------------------------------------------------
      

  6.   


    TO: wangchinaking(助人为乐是快乐之本) 也在LoadFromStream处
    我的执行结果是---------------------------
    ---------------------------
    Access violation at address 004C0FA8 in module 'prjTest.exe'. Read of address 8BD88BA7.
    ---------------------------
    确定   
    ---------------------------
      

  7.   

    我有一个程序是读取图象字段的
    不过不是access做的数据库
    我想应该差不多不错,读取一般的字段和读取图象字段是不同的
    我记得要定义一些内存区代码我一时找不到了
    如果你想看看
    就给我发个email
    我考试完毕后在给你发过去,好不?
    (元旦期间可以给你)
    [email protected]
    qq 39369274
      

  8.   

    var
    pjpg:tjpegimage;
    pic:TMemoryStream;
    begin
    pjpg:=tjpegimage.Create;
    pic:=TMemoryStream.Create;
    TBlobField(dataset.FieldByName('Img')).savetoStream(pic);
    pic.positon:=0;
    pjpeg.LoadFromStream(pic);
    image.graphi.bmp.assign(pjpeg);
    end;
      

  9.   


    我找到了代码中的一段
    这是一个老师给我的
    我抄下来的,如果调试不能通过,可能是有个别的单词写错了,你查一下帮助
    var bmp:TBitmap
        ms:TMemortyStream
    begin
       bmp:=TBitmap.Create;
       ms:TMemoryStream.Create;
       Query1.close;
       Query1.sql.clear;
       Query1.sql.add('insert into DatebaseName(a1,a2) values(:x1,:x2)');
       bmp.LoadFromFile(filename);
       bmp.SaveToStream(ms);
       Query1.parambyname('x1').asstring:=edit1.text;
       Query1.parambyname('x2').LoadFromStream(ms,ftblod);
       Query1.execSql;
       showmessage('图象已经存储');
       edit1.text;='';
       ms.free;
       bmp.free;
       Query1.close;
    end;
    这就可以将一个图象字段存储到数据库中了查看:
    (同上面的定义变量对象)
     bmp:=TBitmap.create
      ......
     query1.sql.add(select * from DateBaseName where a1;=x1);
     query1.parambyname('x1').asstring:=edit2.text;
      ....
     if query1.recordcount<>0 then
     begin
       TblodField(query1.fieldbyname('x1').savetostream(ms));
       ms.position:=0;///*******
       bmp.loadfromstream(ms);
       Image1.picture.bitmap:=bmp;//窗口中定义了一个image1对象
     end;
     else
       showmessage('没有找到记录');
       ......省略号的部分表示与插入部分相同的代码你自己好好思考一下
    我元旦后可以把整个调试好的程序给你发过去(email附件形式)
    end;
      

  10.   

    显示图片
    var
      tempstream:TStringStream;
      tempjpeg:TJPEGImage;
    begin
      try
        tempstream:=TStringStream.Create(' ');
        TBlobField(adodataset1.FieldByName('photo')).SaveToStream(tempstream);
        tempstream.Position:=0;
        tempjpeg:=TJPEGImage.Create;
        tempjpeg.LoadFromStream(tempstream);
        DBImage1.Picture.Bitmap.Assign(tempjpeg);
      finally
        tempstream.Free;
        tempjpeg.Free;
      end;
    end;
      

  11.   

    http://218.56.11.178:8018/FileDown.aspx?FID=168
      

  12.   

    OLE对象?bmp类型? 如果是可以直接用DBImage显示出来 
    不是啊,就麻烦一点。如果还没有解决 mail :[email protected]
      

  13.   


    对,保存在字段里面的是OLE对象,而不是单纯的BMP或JPEG格式流.如果简单的从文件加载,保存入数据库再从里读出来是完全OK的.谢谢各位热心帮助! ^_^