【发布时间】: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 中似乎“不是最佳的”,我有数百个这样的查询。因此,为每个人定义它成为一项繁重的任务......