问题一:
环境:WIN2K、D6、ORACEL9I、ADO
表picture中有字段picfile 为blob字段
代码如下:
var
  testStream,mStream :TMemoryStream;begin
    ADOConnection1.ConnectionString := sconstr;
    ADOConnection1.Connected := true;
    ADOQuery1.Connection := ADOConnection1;
    testStream := TMemoryStream.Create;
    Image1.Picture.Graphic.SaveToStream(testStream);
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoQuery1.SQL.Add('Insert into picture(id,otherID,PICFILE) values(:v_recid,:v_keyid,:v_picFile)');
    adoQuery1.Parameters.ParamByName('v_id').Value:=edit1.Text;
    adoQuery1.Parameters.ParamByName('v_otherID').Value:=edit2.Text;
    adoQuery1.Parameters.ParamByName('v_picFile').LoadFromStream(teststream,ftblob);
    adoquery1.ExecSQL;
    testStream.Free;报错如下:
“ORA-01460:转换请求无法实现或不合理”问题二:
代码如下:
ADOConnection1.ConnectionString := sconstr;
    ADOConnection1.Connected := true;
    ADOQuery1.Connection := ADOConnection1;
    ADOQuery1.Close;
    ADOQuery1.SQL.Text := 'select * from picture';
    ADOQuery1.Open;
报错如下:
“数据类型不被支持”
请有这方面经验的朋友解释一下这是什么问题引起的,如何解决,谢了先。

解决方案 »

  1.   

    --保存JPG图片
    var fname,s:string;
     jpg:TJPEGImage;
     Stm:TMemoryStream;    jpg:=TJPEGImage.Create;
        Stm:=TMemoryStream.Create;
        jpg.LoadFromFile(fname);
        jpg.SaveToStream(Stm);
        Stm.Position:=0;
        TBlobField(adoQuery1.FieldByName('v_picFile')).LoadFromStream(Stm);
        jpg.Free;
        Stm.Free;
      

  2.   

    TO wxmwxmwxm(毛毛毛毛):
    首先谢谢你了,但好象还是不行呢,
    要结合 SQL语句 INSERT INTO TABLE 那个该怎么写呢,就如我上面的代码那样
    adoquery1.Close;
        adoquery1.SQL.Clear;
        adoQuery1.SQL.Add('Insert into picture(id,otherID,PICFILE) values(:v_recid,:v_keyid,:v_picFile)');
        adoQuery1.Parameters.ParamByName('v_id').Value:=edit1.Text;
        adoQuery1.Parameters.ParamByName('v_otherID').Value:=edit2.Text;
        adoQuery1.Parameters.ParamByName('v_picFile').LoadFromStream(teststream,ftblob);
    //这里总不好用
    //adoQuery1.FieldByName('v_picFile')).LoadFromStream(Stm);
    //因为我这里没有v_picFile这个字段啊?
    adoquery1.ExecSQL;
      

  3.   

    给你个例子,自己看把function TfrmSbManager.InsertSbTb: Boolean;
    var
    sqltext : string;
    begin
       //添加设备
       sqltext := '';
       Memo1.Lines.SaveToFile('c:\tempMemo.txt');
       with dtmd.qyinsertsb do
       begin
         Close;
         SQL.Clear;     if PicterFilename <> '' then
         begin
           SQL.Add('insert into sbtb(sbid,sbname,gmdate,dj,sl,fpsl,cjname,cfdb,tel,bz,tp)');
           SQL.Add('values(:#sbid,:#sbname,:#gmdate,:#dj,:#sl,:#fpsl,:#cjname,:#cfdb,:#tel,:#bz,:#tp)');
         end else begin
           SQL.Add('insert into sbtb(sbid,sbname,gmdate,dj,sl,fpsl,cjname,cfdb,tel,bz)');
           //
           SQL.Add('values(:#sbid,:#sbname,:#gmdate,:#dj,:#sl,:#fpsl,:#cjname,:#cfdb,:#tel,:#bz)');
           //  
         end;
         Parameters.ParamByName('#sbid').Value := Trim(edSbid.Text);
         Parameters.ParamByName('#sbname').Value := Trim(edSbname.Text);
         Parameters.ParamByName('#gmdate').Value := FormatDateTime('yyyy-mm-dd',dtpkGmrq.Date);
         Parameters.ParamByName('#dj').Value := StrToFloat(edDj.Text);
         Parameters.ParamByName('#sl').Value := StrToFloat(EdSl.Text);
         Parameters.ParamByName('#fpsl').Value := 0;
         Parameters.ParamByName('#cjname').Value := Trim(edCj.Text);
         Parameters.ParamByName('#cfdb').Value := Trim(edDb.Text);
         Parameters.ParamByName('#tel').Value := Trim(edTel.Text);
       //  Parameters.ParamByName('#memo').DataType := ftMemo;
         Parameters.ParamByName('#bz').Value := Memo1.Text;
         if PicterFilename <> '' then
           Parameters.ParamByName('#tp').LoadFromFile(PicterFilename,ftBlob);//这是图片
         try
           ExecSQL;
           Result := true;
         except
           Result := false;
         end;   end;
    end;
      

  4.   

    TO WUDI1982
    我和你的代码基本上是一致的关键是 Parameters.ParamByName('#tp').LoadFromFile(PicterFilename,ftBlob);//这是图片在execsql时 报错如下:
    “ORA-01460:转换请求无法实现或不合理”
    我就搞不懂了。
      

  5.   

    TO WUDI1982:
    你用的ORACLE数据库吗?字段是BLOB型吗?
      

  6.   

    我把原来的ORACLE10G 改成ORACLE 9I 
    后 报错如下:
    ORA-12571:TNS package writer failure这个是什么错误啊?