如果要将图片保存到Access中,你首先需要定义一个BLOB型字段,这种字段可以存储图片或者声音等大型数据文件.
另外在DBGRID不能直接显示图片,如想实现此功能,可以借助于第三方控件,查一查资料,可以找到!

解决方案 »

  1.   

    问题分解为:
    1 access可否保存image类型的字段,及如何存取(可以保存,字段类型设为?忘了)
    2 如何在dbgrid中显示图像(重写ondrawcell是不是太笨了)
    3 前期绑定image字段用什么控件(image)扩展:
    如何将wave,rm文件存进access并能浏览?
    小弟只是将如上问题绕过了而已,并没解决这些问题。
    敬请专业的答复---赤狼风云,给分不要小气,这个问题我认为可以给100分。
    各位有解的我将另付80分。
      

  2.   

    有没有这方面的Demo呀,我不知道怎么做耶
      

  3.   

    将image1中的图形保存到数据库中的问题已经解决,现将代码贴出来供大家参考。
    现在的问题是如何在dbgrid中显示图像,或者有没有这方面的第三方控件,有的话请提供下载地址。
    var
      a:TMemoryStream;
    begin
      a:=TMemoryStream.Create;
      Image1.canvas.pen.color:=clyellow;
      Image1.canvas.pen.width:=2;
      Image1.canvas.MoveTo(10,50);
      Image1.canvas.lineto(110,50);  image1.Picture.Bitmap.SaveToStream(a);  if not adotable1.Active then
        adotable1.Active:=true;
      adotable1.Append;
      (adotable1.FieldByName('PICT') as TBlobField).loadfromstream(a);
      adotable1.Post;
    end;再加50分寻求答案。
      

  4.   

    1,在Access中建立Ole对象的字段
    2,在Delphi中用TPicture类、TstringStream类与TAdoTable类写入数据库
    例子:
    Var
      Picture:TPicture;
      Stream:TStringStream;
      Table:TAdoTable;
    begin
      Picture:=TPicture.Create;
      Picture.LoadFromFile('Test.BMP');
      Stream:=TStringStream.Create('');
      Picture.Bitmap.SaveToStream(Stream);
      Table:=TAdoTable.Create(Nil);
      Table.ConnectionString:='......';
      Table.TableName:='Test';
      Table.Open;
      Table.Append;
      Table.FieldByName('Picture').AsString:=Stream.DataString;
      Table.Post;
      Table.Close;
      Table.Free;
      STream.Free;
      Picture.Free;
    end;
    3,显示
    将以上操作反过来进行,将Tpicture类赋予一个定义好的TImage类或者直接使用TDBImage类进行显示就可以了
     
      

  5.   

    好像DBGrid可以显图像的,我在一本书上看到过,不过忘了,再想想
      

  6.   

    dbgrid应该不能显示图片,用image做个控件数组显示不就行了。
      

  7.   

    ysmstoneman(迪蜚),找到了请贴出来,或发mail给我,[email protected]
      

  8.   

    dbgrid里面只能显示"(blob)",告诉你这个是BLOB字段,可以OLECONTAINER显示啊
    ACCESS当然那可以存图片了
      

  9.   

    在DBGrid里显示图像,我用的是Delphi自带的表biolife.db代码如下:
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
      Bmp:TBitmap;
      OutRect:TRect;
      BmpWidth:Integer;
    begin
      OutRect:=Rect;  if Column.Field=Table1Common_Name then
      begin
         Bmp:=TBitMap.Create;
         try
            Bmp.Assign(Table1Graphic);
            BmpWidth:=(Rect.Bottom-Rect.Top)*2;
            OutRect.Right:=Rect.Left+BmpWidth;
            DBGrid1.Canvas.StretchDraw(OutRect,Bmp);
         finally
            Bmp.Free;
         end;
         OutRect:=Rect;
         OutRect.Left:=OutRect.Left+BmpWidth;
      end;
      DBGrid1.DefaultDrawDataCell(OutRect,Column.Field,state);
    end;
      

  10.   

    Table1Common_Name 是一字段名
      

  11.   

    呵呵,我找到的方法和ysmstoneman(迪蜚)是一样的:在DBGrid的OnDrawColumnCell事件中加入如下代码即可实现在DBGrid中显示图形
    var
      Bmp : TBitmap;
      R : TRect;
    begin
      if DataCol=1 then  //这里是图形字段所在的列
      begin
        Bmp:=TBitmap.Create;
        Bmp.Assign(Column.Field);
        DBGrid1.Canvas.StretchDraw(Rect, Bmp);
        Bmp.free;
      end;
    end;扩展:只要重新修改DBGrid的OnDrawColumnCell事件,加入判断是否是图形字段或是BLOB
    字段,然后封装起来,就是一个可以显示图形的DBGrid控件了,同样还可以扩展到Memo字段等。