将一个图片存到数据库中去,已经解决了。但是如果将图片为空的话,就会出错。我试着用null,nil,和0x0试过了,都不行。不知道因为用什么参数传进去。
程序:
   adoproc.paramters.add;
   adoproc.paramters[1].Direction := pdinput;
   adoproc.paramters[1].DataType := ftBlob;
try
   imgStream := TMemoryStream.create;
   imgStream.Position:=0;
   image1.Picture.Graphic.SaveToStream(imgStream);
   adoproc.paramters[1].LoadFromStream(imgStream,ftBlob);
   imgStream.free;
except
   adoproc.paramters[1].value=null/nil/'0x0'   //这几种方式都不行,会出错
end;请问这种情况应该怎么办?

解决方案 »

  1.   

    我刚刚试过了,用adoproc.paramters[1].value=''就提示参数个数不对
    在线等。
      

  2.   

    我自己做了个手脚是加上去了,但是这不是我的目标。
    我的做法是:
    一、在存储的时候用'0X0'存储,因为别的都会出错的,但是'0x0'在读取的时候也是会出错的
    二、在读取的时候用
         try
            Stream:= TMemoryStream.Create ;
            TBlobField(adoproc1.FieldByName('user_pic')).SaveToStream(Stream);
            jpgFile:= TJpegImage.Create ;
            Stream.Position := 0;
            jpgFile.LoadFromStream(stream);
            image2.Picture.Assign(jpgFile);
         except
            image2.Picture.Graphic := nil;
         end;
            jpgFile.Free;
            stream.Free;这样一来,问题是没有了,但是这并不是我想要的解决方案。
    我希望存进去和读出来都没有错误的
      

  3.   

    把TMemoryStream变为TStringStream看看
      

  4.   

    update Information set image=0x
      

  5.   

    存储的时候可以设一个变量,如果有图片读入,变量置true,在执行图片插入语句。如果没图片读入,也就是图片为空,变量置false,不执行图片插入语句。
      

  6.   

    应该这样:
      //开始保存图片
      if myPhoto.Picture.Graphic=nil then
        TBlobField(adqBM.FieldByName('照片')).Clear
      else Begin
        MS:=TMemoryStream.Create;
        Jpg:=TJpegImage.Create;
        jpg.Assign(myPhoto.Picture.Graphic);
        jpg.SaveToStream(MS);
        MS.Position:=0;
        TBlobField(adqBM.FieldByName('照片')).LoadFromStream(MS);
        MS.Free;JPG.Free;
      END;
    摘自我程序中的一段。
    你作相应的修改,这段还可以将图片转换为JPG,减少数据库的大小。