我这样写为何图片在DBIMAGE中看不出见呀
VAR
PIC:TSTRINGSTREAM;
PBIT:TBITMAP;
FF:STRING;
BUTTON1.CLICK事件
FF:='SELECT PHOTS FROM B WHERE C_NAME=''DER''';
PIC:=TSTRINGSTREAM.CREATE('');
WITH ADOQUERY1 DO
 BEGIN
  CLOSE;
  SQL.CLEAR;
  SQL.ADD(FF);
  OPEN;
 END;
 TBOLBFIELD(ADOQUERY1.FIDLDBYNAME('PHOTS')).SAVETOSTREAM(PIC);
 PBIT:=TBITMAP.CREATE;
 PBIT.LOADFROMSTEAM(PIC);
 DBIMAGE1.PICTURE.BITMAP.ASSIGN(PBIT);
我这样写那里错了呀为何图片看不见呀请指教急呀

解决方案 »

  1.   

    我也遇到过此问题,也是一样显示不出来图片,最后我改用了TImage控件,就可以读出来了,我也很郁闷。。要不你也改变控件吧。
      

  2.   

    1.为什么要用TStringStream而不是TMemoryStream呢?建议用TMemoryStream来存取流
    2.当你将Pic中保存数据后,最好使用Pic.Position:=0;来将流指针的位置归0
    3.在保存数据的时候要保存Bmp格式的文件或流,不然看不到,
    基于以上三点,我建议你将你的代码改为如下:
    VAR
    PIC:TMemoryStream;
    PBIT:TBITMAP;
    FF:STRING;
    BUTTON1.CLICK事件
    FF:='SELECT PHOTS FROM B WHERE C_NAME=''DER''';
    PIC:=TMemorySTREAM.CREATE;
    WITH ADOQUERY1 DO
     BEGIN
      CLOSE;
      SQL.CLEAR;
      SQL.ADD(FF);
      OPEN;
     END;
     TBOLBFIELD(ADOQUERY1.FIDLDBYNAME('PHOTS')).SAVETOSTREAM(PIC);
     Pic.Position:=0; 
     PBIT:=TBITMAP.CREATE;
     PBIT.LOADFROMSTEAM(PIC);  
     DBIMAGE1.PICTURE.BITMAP.ASSIGN(PBIT);
      

  3.   

    补充一点:如果你用的是DBImage的话而且保存的时候是保存的Bmp格式的图片流,那么可以直接将这个控件与图片列相连接而显示图片,不用自己编程的!