ADO + DataSetProvider + ClientDataSetでプログラムしています。 ClientDataSetのApplyUpdateでは、これはフィールド・データ型に基づくパラメータを使用してADOコマンドを生成します。ADOのftBCDデータ型パラメータを持つoracleの数値列が "未指定エラー"(Oracle Provider for OleDB)
パラメータがftBCDの場合は、「不特定のエラー」が発生します。 ftFloat、ftExtended、ftCurrencyのデータ型を変更すると、コマンドは正常に実行されます。ただし、ADO + ClientDataSetを使用してパラメータのデータ型を変更することはできません。使用されるプロバイダは「Oracle Provider for OleDB」です。
"MicrosoftプロバイダOleDB for oracle"は問題なく実行されますが、非常に遅くCLOB列に問題があります。オラクルは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);
直接実行されるコマンドの場合、Oracleと互換性のない(またはエラーを生成する)データ型は使用しないでください。問題は、アーキテクチャがADOCommandを自動的に生成する "ADO + DataSetProvider + ClientDataSet"を使用することです。 – cralu