【问题标题】:Delphi FireDAC TFDQuery Parameters - SQL Server Native Client 11.0 - Numeric value out of rangeDelphi FireDAC TFDQuery 参数 - SQL Server Native Client 11.0 - 数值超出范围
【发布时间】:2021-09-08 10:33:48
【问题描述】:

我无法简单地访问 MS SQL Server 表,并在尝试打开时遇到“数值超出范围”错误消​​息。

表格如下:

CREATE TABLE [dbo].[ZREZUDET](
    [RZLID] [int] NOT NULL,
    [RZLPOSID] [int] NOT NULL,
    [ZID] [int] NOT NULL,
    [ANTEIL_QUID] [float] NULL,
    [ANTEIL] [float] NULL,
    [KREDID] [int] NULL,
    [ARTNR_SRC] [nvarchar](20) NULL,
PRIMARY KEY CLUSTERED 
(
    [RZLID] ASC,
    [RZLPOSID] ASC,
    [ZID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

为了打开,我使用没有特殊属性设置的 TFDQuery:

 FDQparas.Close;
 FDQparas.SQL.Clear;
 FDQparas.SQL.Add('select * from ZREZUDET where RZLID = :P0 and RZLPOSID = :P1');
 FDQparas.Params[0].Value := 1;
 FDQparas.Params[1].Value := -1;
 FDQparas.Open();

自动参数创建将 :P0 创建为 ftByte,将 :P1 创建为 ftShortint,而实际字段为 INT 类型。

来自 ADO/dbGo,这适用于 TADOQuery(创建了 ftInteger 参数)。

是否有任何设置有助于确定正确的参数数据类型?

【问题讨论】:

  • 自动输入做了一个“最好的猜测”,你的实现是错误的。您必须自己在属性检查器中更改参数的数据类型。将它们设置为您知道这些参数的正确类型的类型(整数)。
  • @nolaspeaker 谢谢。我希望在这里获得与 ADO 一样的舒适感。作为一种解决方法,我在 FDQuery.OnBeforeOpen 时遍历所有给定的参数,检查它是否在 ftByte、ftSmallint、ftShortint 中并改为设置 ftInteger...
  • 你可以通过FDQparas.Params[0].AsInteger指定自己
  • @EirikA。当然。但是,自动确定在 ADO 中运行良好,但在 FireDAC 中似乎“不是最佳的”,我有数百个这样的查询。因此,为每个人定义它成为一项繁重的任务......

标签: delphi firedac


【解决方案1】:

而不是FDQparas.Params[0].Value 你试过FDQparas.Params['PARAM_NAME_HERE'].Value?此外,在包含值-1 的行中放置一个括号,返回错误?

【讨论】:

  • 我尝试了 FDQparas.ParamByName('P0').Value := 1 ,结果相同。 ErrorMsg 在打开查询时上升,而不是在我分配值时上升。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多