大家好,我在做一个管理系统.其中要在程序中涉及到图片的存储问题.我查了好多资料.大多是用dbrid与数据集做绑定,我不希望用这种方法.而是直接用sql语句添加.但是程序报错.大家无私奉献吧,马上就过年了.请大家帮帮我.呵呵.分数大大的有.好心人有原码请传上来参考好吗?分数奖励:>
我的原码是这样的,请指点.
form1.adoquery1.close;
form1.adoquery1.sql.clear;
form1.adoquery1.sql.add('insert into customertalbe values(:p1,:p2)');
form1.adoquery1.parameters.parambyname('p1').value:=
                                                 trim(form1.edit1.text);
form1.ADOQuery1.Parameters.ParamByName('p2').LoadFromStream             (form1.bmpstream,ftBlob);
try
form1.adoquery1.execsql;
except end;运行时程序报错:参数类型不对.我想一定是大二进制类型参数赋值错误,但是不知怎样改.请大家积极发言.帮小弟过了年关.感激不尽.

解决方案 »

  1.   

    procedure TForm1.BitBtn1Click(Sender: TObject); 
    var strm:tmemorystream; 
    begin 
    strm:=tmemorystream.Create; 
    try 
    strm.LoadFromFile('c:\1.bmp'); 
    adoconnection1.Connected:=true; 
    adostoredproc1.Close; 
    adostoredproc1.ProcedureName:='test_proc1'; 
    adostoredproc1.Parameters.Refresh; 
    adostoredproc1.Parameters.ParamValues['@id']:=1; 
    adostoredproc1.Parameters.ParamByName('@blb').LoadFromStream(strm,ftblob); 
    adostoredproc1.Prepared; 
    adostoredproc1.ExecProc; 
    finally strm.Free;end; 
    end; 
      

  2.   

    转贴:
    http://expert.csdn.net/Expert/topic/2522/2522259.xml?temp=.8197443
    var 
      MyJPEG : TJPEGImage;
      MS: TMemoryStream;
    begin
      openpicturedialog1.Execute;
      if openpicturedialog1.FileName<>'' then
      begin
        image.Picture.LoadFromFile(openpicturedialog1.FileName);
        openpicturedialog1.FileName:='';
        MyJPEG := TJPEGImage.Create;
        try
          with MyJPEG do
          begin
            Assign(Image.Picture.Graphic);
            MS:=TMemoryStream.create;
            SaveToStream(MS);
            MS.Position:=0;
            adotable1.Append;
            TBlobField(adotable1.FieldbyName('photo')).LoadFromStream(MS);
            adotable1.Post;
            messagebox(getactivewindow(),'图像保存完毕!','保存',mb_ok);
            image.Picture.CleanupInstance;
          end;
        finally
          MyJPEG.Free;
        end;
      end;
    显示图片
    var
      tempstream:TStringStream;
      tempjpeg:TJPEGImage;
    begin
      try
        tempstream:=TStringStream.Create(' ');
        TBlobField(adodataset1.FieldByName('photo')).SaveToStream(tempstream);
        tempstream.Position:=0;
        tempjpeg:=TJPEGImage.Create;
        tempjpeg.LoadFromStream(tempstream);
        DBImage1.Picture.Bitmap.Assign(tempjpeg);
      finally
        tempstream.Free;
        tempjpeg.Free;
      end;
    end;
      

  3.   

    with adoquery1 do
     begin
       close;
       sql.Text:='select * from file_update where program='''+combobox1.Text+''' ';
       open;
       edit;
       insert;
       l_FileStream := TFileStream.Create(edit2.Text, fmShareDenyNone);//edit2.text放的是一个文件的路径及名字
       l_FileStream.Position := 0;
       TBlobField(FieldByName('filedata')).loadfromStream(l_FileStream);   FieldByName('filename').Value:=edit3.Text;
       FieldValues['filesize']:=l_fileStream.Size ;
       FieldValues['program']:=combobox1.Text;
       FieldValues['ver']:=edit1.Text;
    end;
      

  4.   

    haha
    with adoquery1 do
     begin
       close;
       sql.Text:='select * from file_update where program='''+combobox1.Text+''' ';
       open;
       edit;
       insert;
       l_FileStream := TFileStream.Create(edit2.Text, fmShareDenyNone);//edit2.text放的是一个文件的路径及名字
       l_FileStream.Position := 0;
       TBlobField(FieldByName('filedata')).loadfromStream(l_FileStream);   FieldByName('filename').Value:=edit3.Text;
       FieldValues['filesize']:=l_fileStream.Size ;
       FieldValues['program']:=combobox1.Text;
       FieldValues['ver']:=edit1.Text;
    end;
      

  5.   

    谢谢大家的热情参与.我已经解决了.
    form1.adoquery1.close;
    form1.adoquery1.sql.clear;
    form1.adoquery1.sql.add('insert into table1 values(:P1,:p2)');
    form1.adoquery1.parameter.parambyname('p1').value:=form1.edit1.text;
    bmpstream.position:=0;//关键一步
    form1.adoquery1.parameter.parambyname('p1').loadfromstream(bmpstrean,ftblob);
    try
     form1.adoquery1.execsql;
    exception    end;