想把excel里的内容读到流里,再保存到oracle的BLOB里,但报错。
从excel读到流:
    Close;
    SQL.Clear;
    SQL.Add('select blob from [Sheet1$]');
    Open;
    proc_memStr:=ADOQuery1.CreateBlobStream(fIELDbYnAME('BLOB'),bmRead);
再保存到blob里:
    close;
    sql.Clear;
    sql.Add('insert into TEST_FOR_BLOG (RTF_FILE) VALUES (:RTF_FILE)');
    Parameters.ParamByName('RTF_FILE').LoadFromStream(proc_memStr,ftblob);
    ExecSQL;
运行到最后一句时报错:“不正常定义参数对象。提供了不一致或不完整的信息”;如果把proc_memStr先写到rtf文件里,再用loadfromfile加载的话就没问题。

解决方案 »

  1.   

    流到数据库delphi的操作是不能通过参数的需要通过数据集方法qry1.select;//查询语句
    qry1.open;
    qry1.append;
    TBlobField(Qry1.FieldByName('字段')).loadfromstream(流);
    qry1.post;
      

  2.   

    现在有个新问题,如果我在EXCEL中的内容太少了,比如单元格内容就是“测试文本”四个汉字,再用我上面的:
      Close;
      SQL.Clear;
      SQL.Add('select blob from [Sheet1$]');
      Open;
      proc_memStr:=ADOQuery1.CreateBlobStream(fIELDbYnAME('BLOB'),bmRead);
    或把最后一句改成:
      TBlobField(fieldbyname('RTF_FILE')).LoadFromStream(proc_memStr);
    就会报错:“Invalid class typecast”; 
    怎样才能把这种短字符串读到流中去呢?