我用 ADO + DataSetProvider + ClientDataSet 编写了一个 delphi。在 ClientDataSet 的 ApplyUpdates 中,这会生成带有基于字段数据类型的参数的 ADO 命令。
当参数为 ftBCD 时,发生“未指定错误”。如果您更改 ftFloat、ftExtended 或 ftCurrency 的数据类型,则该命令将成功执行。但是使用 ADO+ClientDataSet 不能改变参数的数据类型。使用的提供程序是“Oracle Provider for OleDB”。
“Microsoft provider OleDB for oracle”执行没有问题,但速度很慢,而且我的 CLOB 列有问题。oracle是11g,客户端是11.2.0.2。
Delphi 是 Delphi XE。错误示例代码:
vAdo := TADOConnection.Create(nil);
vAdo.LoginPrompt := false;
vAdo.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Password=;Persist Security Info=True;User ID=HR;Data Source=server/orcl;Extended Properties=""';
vAdo.Connected := True;
vAdoCommando := TADOCommand.Create(nil);
vAdoCommando.Connection := vAdo;
vAdoCommando.CommandText := 'UPDATE HD_PRIORIDADE SET TEMPORESPOSTA = ? WHERE HANDLE = ? ';
vParametro := vAdoCommando.Parameters.AddParameter;
vParametro.DataType := ftBCD;
vParametro.Value := 12.3;
vParametro := vAdoCommando.Parameters.AddParameter;
vParametro.Value := 1;
vAdoCommando.ExecuteOptions := [eoExecuteNoRecords];
vAdoCommando.Execute(vResult, EmptyParam);