procedure TForm1.Button1Click(Sender: TObject);
var
  myPicture:TJPEGImage;
  mem:TMemoryStream;begin
  mem:=TMemoryStream.Create;
  myPicture:=TJPEGImage.Create;
  if(OpenDialog1.Execute()) then
  begin
  mem.LoadFromFile(OpenDialog1.FileName);
  myPicture.LoadFromFile(OpenDialog1.FileName);
  myPicture.SaveToStream(mem);  with ADOQuery1 do
  begin  close;
  sql.Clear;
  sql.Add('insert into imagetest (imgid,imgsize) values(1,"+mem+")');
  // TBlobField(ADOQuery1.FieldByName('imgsize')).SaveToStream(mem);
  ExecSQL;
  end;
  mypicture.Free;
  mem.Free;
end;
end;
其中myPicture.LoadFromFile(OpenDialog1.FileName);
  myPicture.SaveToStream(mem);
是想将用OpenDialog打开的图片二进制流存入变量mem中,但运行时mem为空,求各位大虾帮忙

解决方案 »

  1.   

    TBlobField(ADOQuery1.FieldByName('imgsize')).LoadFromFile();会调用LoadFromStream
    procedure TBlobField.LoadFromFile(const FileName: string);
    var
      Stream: TStream;
    begin
      Stream := TFileStream.Create(FileName, fmOpenRead);
      try
        LoadFromStream(Stream);
      finally
        Stream.Free;
      end;
    end;
      

  2.   

    ORACLE 占个位置学习学习
      

  3.   

    case5166,你的意思是用mem.LoadFromStream(Stream);
    把STREAM存入ORACLE的bLOB字段中?
      

  4.   

    var
      myPicture:TJPEGImage;
      mem:TMemoryStream;
    只定义mem一个就行了,myPicture多余插入SQL语句用参数形式:
    sql.Add('insert into imagetest (imgid,imgsize) values(1,:mem)');
    Parameters.ParamByName('mem').Assign(mem);
      

  5.   

    帮你整理一下,自己测试procedure TForm1.Button1Click(Sender: TObject);
    var
      mem:TMemoryStream;
    begin
      mem:=TMemoryStream.Create;
      try
      if OpenDialog1.Execute then
      begin
        mem.LoadFromFile(OpenDialog1.FileName);
        mem.Position:=0;
        with ADOQuery1 do
        begin
          close;
          sql.Clear;
          sql.Add('insert into imagetest (imgid,imgsize) values(1,:mem)');
          Parameters.ParamByName('mem').Assign(mem);
          ExecSQL;
        end;
      end;
      finally
        mem.Free;
      end;
    end;
      

  6.   

    kaikai_kk,非常感谢 存入Stream 已经解决 现在就一个问题not enough actual parameters
    Parameters.ParamByName('mem').LoadFromStream(mem);出错在这句
      

  7.   

    哦?不好意思,忘了转换类型了。
    TBlobField(Parameters.ParamByName('mem')).Assign(mem);
      

  8.   


    Tpersistent Tmemorystream 不对应
      

  9.   

    那改成
    Parameters.ParamByName('mem').LoadFromStream(mem,ftBlob);