gpt4 book ai didi

sql-server - TADOQuery : Passing null as parameter and getting the resultset

转载 作者:行者123 更新时间:2023-12-03 08:17:21 29 4
gpt4 key购买 nike

我正在研究 Delphi7 和 SQlserver 2008 R2。
我有一个表格,上面有一些数据,如下所示。\

CREATE TABLE dbo.tstTable (
ID int IDENTITY(1,1) PRIMARY KEY,
Name varchar(255) NOT NULL,
Eid int null,
Pid int null
);

insert into tstTable(Name,Eid,Pid) values ('name1',1,null);
insert into tstTable(Name,Eid,Pid) values ('name2',2,null);
insert into tstTable(Name,Eid,Pid) values ('name3',3,null);
insert into tstTable(Name,Eid,Pid) values ('name4',null,4);
insert into tstTable(Name,Eid,Pid) values ('name5',null,5);
insert into tstTable(Name,Eid,Pid) values ('name4',null,6);
insert into tstTable(Name,Eid,Pid) values ('name7',null,null);

现在我想获得 Eid 等于 1 的记录。在 sql server 中我能够得到结果。

Sql result

当我在delphi中尝试同样的方法时,我没有得到任何结果。
在 Delphi 中,我使用了 TADOConnection、TADOQuery、TDataSource 和 TDBGrid。
SET TADOQuery.Query = 'select Name from tstTable where Eid=:Eid and Pid =:Pid'

with ADOQuery1 do
begin
Parameters.ParamByName('Eid').Value := 1;
Parameters.ParamByName('pid').Value := NULL;//i tried with Unassigned also
Close;
open;
end; //with

当我打开 AdoQuery 时,在网格中它没有显示任何记录。
下面的代码也没有返回任何记录。
  with ADOQuery1 do
begin
Parameters.ParamByName('Eid').Value := NULL;
Parameters.ParamByName('pid').Value := NULL;//i tried with Unassigned also
Close;
open;
end; //with

如何处理这种情况?

最佳答案

您不应该为参数分配任何内容,而是将其清除以将其设置为 NULL

Parameters.ParamByName('Eid').Clear;

更新。不幸的是,这不适用于 TADOxxx 组件,因为 TParameter 没有 Clear() 方法。

所以解决方案
  ADOQuery1.SQL.Add('SELECT * FROM mytable');
ADOQuery1.SQL.Add('WHERE mycol = :Param1 OR (:Param1 IS NULL AND mycol IS NULL)';
ADOQuery1.Parameters.ParamByName('Param1').Attributes :=
ADOQuery1.Parameters.ParamByName('Param1').Attributes + [paNullable];
ADOQuery1.Parameters.ParamByName('Param1').Value := Null();
ADOQuery1.Open;

使用 Delphi 7/SQL Server 2014 测试正常

由于兼容性问题和全局 session 范围,请尽量不要更改任何 SET ANSI_XXX 设置。如果你 真的需要更改 session 默认设置,在连接开始时进行。当 SET ANSI_NULLS OFF在查询之前执行,这将更改整个 session (连接)的设置。

关于sql-server - TADOQuery : Passing null as parameter and getting the resultset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46970587/

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