gpt4 book ai didi

oracle - 带有ADO中ftBCD数据类型参数的oracle中的Number列出现“未指定的错误”(Oracle Provider for OleDB)

转载 作者:行者123 更新时间:2023-12-03 18:51:32 24 4
gpt4 key购买 nike

我已经用ADO + DataSetProvider + ClientDataSet编写了一个delphi。在ClientDataSet的ApplyUpdates中,这将使用基于字段数据类型的参数来生成ADO命令。

当参数为ftBCD时,发生“未指定错误”。如果更改ftFloat,ftExtended或ftCurrency的数据类型,则命令将成功执行。但是,使用ADO + ClientDataSet不能更改参数的数据类型。使用的提供程序是“ Oracle Provider for OleDB”。

“ Microsoft提供程序用于Oracle的OleDB”执行没有问题,但是非常慢,并且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);

最佳答案

这并不是真正的解决方案,但可以解决。

尝试使用TADOCommand代替TADOQuery;并且不创建参数,让ADO使用ParseSQL为您完成。一个例子:

qryUpdPrioridade:= TADOQuery.Create(nil)
try
qryUpdPrioridade.Connection:= vAdo;
qryUpdPrioridade.SQL.Add('UPDATE HD_PRIORIDADE SET');
qryUpdPrioridade.SQL.Add(' TEMPORESPOSTA = :TEMPORESPOSTA');
qryUpdPrioridade.SQL.Add('WHERE HANDLE = :HANDLE');
qryUpdPrioridade.Parameters.ParseSQL(qryUpdPrioridade.SQL.Text, True);

qryUpdPrioridade.Parameters.ParamByName('TEMPORESPOSTA').Value:= 12.3;
qryUpdPrioridade.Parameters.ParamByName('HANDLE').Value:= 1;

try
qryUpdPrioridade.ExecSQL;
except
On E: Exception do
raise Exception.CreateFmt('Falha na atualização:'#13#10'%s: %s', [E.ClassName, E.Message]);
end;
finally
qryUpdPrioridade.Free;
end;


注意:我暂时没有IDE,可能是一些错误的代码。我明天早上可以纠正。

关于oracle - 带有ADO中ftBCD数据类型参数的oracle中的Number列出现“未指定的错误”(Oracle Provider for OleDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6821703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com