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').LoadFromStream(mem,ftblob);
       //TBlobField(Parameters.ParamByName('mem').Assign(mem));
       ExecSQL;
     end;
end;
 finally
  mem.Free;
end;
end;

解决方案 »

  1.   

    mem=0;我也不清楚什么情况,不是存不仅数据库,而是参数mem本身就是空的
      

  2.   

    那就改成用ADOQuery1的POST方式吧,用ADOQuery1自动生成的SQL语句
      

  3.   

    SQL语句没什么问题吧 是参数为空,而不是跟数据库连接存储出问题,IMGSIZE字段为BLOB.
      

  4.   

    with ADOQuery1 do
          begin
            Append;
              //...................改成这种方式提交试试
              TBlobField(FieldByName('Exe_Bin')).LoadFromFile(FileName);
            Post;
          end;
      

  5.   

    不行啊我感觉是在  mem:=TMemoryStream.Create;
       try
       if OpenDialog1.Execute then
       begin
          mem.LoadFromFile(OpenDialog1.FileName);
          mem.position:=0;
    这之中有什么问题导致存不进去。
      

  6.   

    sql.Add('insert into imagetest (imgid,imgsize) values(1,:mem)');我也没看出问题,我的意思是不执行SQL提交,以with ADOQuery1 do
      begin
      Append;
        FieldByName('imgid').Asstring := 1;
        TBlobField(FieldByName('imgsize')).LoadFromFile(FileName);
      Post;
      end;
    这样子提交到数据库,我一般都是这样做的