操作Oracle的xmltype
因为可能插入超过4k的数据,所以需要用流
然后ADOQuery和ADOdataset都用过,发现个问题//Query
  with ADOQry_1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('insert into xmltest (id,xmldoc) values ( :id , xmlType(:clobs))');
    Parameters.ParamByName('id').Value := '0001';
    {//全部测试不通过
    Parameters.ParamByName('clobs').LoadFromStream(strstream,ftBlob);
    Parameters.ParamByName('clobs').LoadFromStream(strstream,ftOraClob);
    TMemoField(Parameters.ParamByName('clobs')).LoadFromStream(strstream);
    }
    Prepared;
    ExecSQL;
  end;
而先查询,再在field里面导入流,然后保存进中间表,再调用存储过程xmltype(clob)强制转换导入却是可以的
  with ADOQry_1 do
  begin
    Close;
    Parameters.Clear;
    SQL.Clear;
    SQL.Add('select * from insertxml_tmp');
    Open;
  end;  with ADOQry_1 do
  begin
    Edit;
    Append;
    FieldByName('id').value := '0001';
    TMemoField(FieldByName('xmlclob')).LoadFromStream(strstream);
    Post;
    ADOQry_1.UpdateStatus;
  end;  with Adsp_1 do
  begin
    Close;
    ProcedureName := 'XmlInsertClob';
    ExecProc;
  end;当时就想能不能调用底层一点的API什么的,控件用着是真不放心啊
然后又疑惑了,貌似查询操作记录也是调用的语句,流是怎么调用的呢select sql_text as "简略SQL语句",sql_fulltext as "SQL字串",parsing_schema_name as "执行者",module as "执行程序",last_active_time as "作用时间" 
from v$sqlarea 
where parsing_schema_name = '' and module = '' --执行者为parsing_schema_name ,执行程序为module 
order by last_active_time desc

解决方案 »

  1.   

    控件又是调用的什么呢……
    ADO连接的时候一开始用的MS的 Provider OLE for oracle,各种报错,网上查了说是连接的问题,遂改成oracle的查oracle操作也基本都是说的OraADO控件的操作,全是封装起来的……有没有类似API说明之类,或者delphi直连的接口之类的?
    公司用的D6,F1一下返回的东西实在是和MSDN没的比啊,而且描述上也是各种模糊……delphi控件的好使导致搜索数据连接相关完全都是拖个控件设置属性之类的教程,某些稍微下层点的东西完全找不到资料啊……控件不好使的时候人直接闷了
      

  2.   

    同郁闷我发现d7的Tfield对于varchar(max)也只能支持到8k内容,再大就不行了
    初看vcl代码,也没能找到它在哪里定义了一个8k的buffer
      

  3.   

    這是因為受到SQL數據庫的限制,請看SQL SERVER 2000幫助:字符串
    char固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。varchar可变长度的非 Unicode 数据,最长为 8,000 个字符。text可变长度的非 Unicode 数据,最大长度为 2^31 - 1 (2,147,483,647) 个字符。Unicode 字符串
    nchar固定长度的 Unicode 数据,最大长度为 4,000 个字符。 nvarchar可变长度 Unicode 数据,其最大长度为 4,000 字符。sysname 是系统提供用户定义的数据类型,在功能上等同于 nvarchar(128),用于引用数据库对象名。ntext可变长度 Unicode 数据,其最大长度为 2^30 - 1 (1,073,741,823) 个字符。
    varchar[(n)]长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。
      

  4.   

    D6的控件有源码没……VCL代码在哪看的……
      

  5.   

    企业版应该都带标准控件的源码
    \Delphi7\Source\Vcl\