Я программирую delphi с помощью ADO + DataSetProvider + ClientDataSet. В ApplyUpdates ClientDataSet это создает команду ADO с параметрами, основанными на типах полей.
Когда параметром является ftBCD, возникает «Неуказанная ошибка». Если вы измените тип данных для ftFloat, ftExtended или ftCurrency, команда будет выполнена успешно. Но тип данных параметра не может быть изменен с помощью ADO + ClientDataSet. Используется поставщик «Oracle Provider for OleDB».
«Поставщик Microsoft OleDB для оракула» выполняется без проблем, но очень медленно, и у меня проблемы со столбцом 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);