gpt4 book ai didi

Delphi TADOQuery 选择前 N 个

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

我试图只选择顶部 TADOQuery 中的项目,但是当我激活查询时它给了我和错误。似乎找到了top参数就好了,但是执行的时候没能替换掉。如果我不使用“Top N”限制 SQL 语句,则代码可以正常工作。

这是代码的基本思想。

const SQL_STR = 'SELECT TOP :cnt name from dSomeTable where done = FALSE';

var
dbCon : TADOConnection;
toSolveQry : TADOQuery;
getCnt : TParameter;
names : TField;
threadCnt : Integer;

begin
threadCnt := 3;
dbCon := TADOConnection.Create(nil);
...
dbCon.Open();

toSolveQry := TADOQuery.Create(nil);
toSolveQry.Connection := dbCon;
toSolveQry.SQL.Add(SQL_STR);
toSolveQry.ParamCheck := True;
getCnt := toSolveQry.Parameters.ParamByName('cnt');
getCnt.Value := threadCnt;

toSolveQry.Active := true; //Error here

names := toSolveQry.FieldByName('name');
...
end

最佳答案

参数不能用于 SELECT 中的列名或 WHERE条款。这排除了在 TOP x 中的使用。也是。

使用 Format代替功能:

const SQL_STR = 'SELECT TOP %d name from dSomeTable where done = FALSE';

toSolveQry.SQL.Text := Format(SQL_STR, [threadCnt]);
toSolveQry.Open;

使用整数格式说明符 ( %d ) 可以防止 SQL 注入(inject),因为如果您提供除整数值以外的任何内容作为 Format 的参数,Delphi 将引发异常。 .

关于Delphi TADOQuery 选择前 N 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28220235/

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