目的将图像存储到数据库中
手段采用流的形式MS := TStringStream.Create('');
if OpenDialog1.Execute then
begin
   Image1.Picture.LoadFromFile(OpenDialog1.FileName);end;
   //Ms.Position :=0;
   image1.Picture.Bitmap.SaveToStream(MS);
   ShowMessage(Inttostr(Ms.Size));我的目的是用类似下边的sql语句来解决将图像存储到数据库中
但是没有成立
sqlstr:='insert int table1 (a_Field,b_Field,ImageField) '+
         'values ' + ia_Filed+','+ib_Field+','+Ms.dataString+')';这样做是不是不合理,请指教

解决方案 »

  1.   

    我采用的控件是
    Tadocommond
    我希望采用的做法是这样的
    先单独写
    sqlStr:=sqlstr:='insert int table1 (a_Field,b_Field,ImageField) '+
             'values ' + ia_Filed+','+ib_Field+','+Ms.dataString+')';
    然后写
    adocommond.cmdtxt:=SqlStr
      

  2.   

    http://www.ccw.com.cn/htm/center/prog/02_7_30_5.asp楼主先看着.
    有疑问回头讨论..
      

  3.   

    使用ADOCOMMAND同使用ADOQUERY本质没有区别。
    事实上,ADOQUERY是在ADOCOMMAND基础上的再封装。。
      

  4.   

    这个我也知道,问题是如何将Stream的变量传到数据库端
      

  5.   

    其实我要的是将TStream的二进制字符串读出来
      

  6.   

    procedure StreamToVariant (Stream : TStream; var v : Variant);
    var
      p : pointer;
    begin
      v := VarArrayCreate ([0, Stream.Size - 1], varByte);
      p := VarArrayLock (v);
      Stream.Position := 0;
      Stream.Read (p^, Stream.Size);
      VarArrayUnlock (v);
    end;procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      fo:TMemoryStream;
      cmd:TADOCommand;  vo:Variant;begin  fo:=TMemoryStream.Create;
      Image1.Picture.Graphic.SaveToStream(fo);
      fo.Position:=0;
      StreamToVariant(fo,vo);
      fo.free;  cmd:=TADOCommand.Create(nil);
      cmd.Connection:=ADOConnection1;
      cmd.CommandText:='insert into tablexxx (pic) values(:pic)';
      cmd.Parameters.ParamByName('pic').AppendChunk(vo);
      cmd.Execute;  cmd.Free;
    end;