gpt4 book ai didi

delphi - 如何在运行时使用 TFDQuery 的 RecsSkip 和 RecsMax 属性

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

我正在寻找 TFDQuery 中的跳过并选择。我找到的属性是 .FetchOptions.RecsSkip 和 .FetchOptions.RecsMax。我使用 Tokyo 10.2.3 和数据库 Firebird 3

我在运行时进行查询,我想获取 5 处的开始记录并获取接下来的 8 条记录。

我想:

结果不跳过前 5 条记录

var
qryTest: TFDQuery;
begin
qryTest:= TFDQuery.Create(self);
qryTest.Connection := self.FDConnection;

qryTest.sql.Text:= ' select * from salutationdescriptions order by ID';
qryTest.Disconnect();
qryTest.FetchOptions.RecsSkip:= 5;
qryTest.FetchOptions.RecsMax:= 8;
qryTest.Open();

但这给出了前 8 条记录的结果。不会跳过前 5 条记录。

好的,我也一样,但现在我在设计时设置 TFQQuery(表单上的组件),并在组件中添加选择“select * from salutationdescriptions order by ID”。

运行代码:

这里跳过前5条记录

  qryItem.Close;
qryItem.Disconnect();
qryItem.FetchOptions.RecsSkip:= 5;
qryItem.FetchOptions.RecsMax:= 8;
qryItem.Open();

我得到的结果是好的。这会跳过前 5 条记录。当我添加 qryItem.sql.text 时,它不会跳过前 5 条记录

这不会跳过前 5 条记录

  qryItem.Close;
qryItem.sql.Text:= ' select * from salutationdescriptions order by ID';
qryItem.Disconnect();
qryItem.FetchOptions.RecsSkip:= 5;
qryItem.FetchOptions.RecsMax:= 8;
qryItem.Open();

这不会跳过前 5 个记录。

我必须在属性中设置一些东西吗?

我想在运行时使用 RecsSkip 和 RecsMax。有什么建议吗?

发现问题

在 SQL.Text 中,我必须以“Select ...”开头' 和 select 之间没有空格

最佳答案

正如您已经发现的,问题出在 SQL 命令的前导空格中。这是因为命令生成器不考虑前导命令空格。有这样的代码(经过我的修改和广泛简化以供解释):

function TFDPhysCommandGenerator.GenerateLimitSelect(ASkip, ARows: Integer;
AOneMore: Boolean; var AOptions: TFDPhysLimitOptions): string;
begin
if (True) and (CompareText(Copy(FCommandText, 1, 6), 'SELECT') = 0) then
Result := GetLimitSelect(FCommandText, ASkip, ARows, AOptions)
else
Result := FCommandText;
end;

您可能会看到问题所在。仅当从查询命令文本分配的 FCommandText 字段以 SELECT 字开头时,命令生成器才返回 DBMS 的 native LIMIT 命令。这不是你的情况(由于前导空格),因此生成器按原样返回命令。

这是一个 FireDAC 错误,我已报告为 RSP-20403 。由于有更多这样的检查,我认为最简单的解决方法是直接在其构造函数中修剪 SQL 命令,例如:

constructor TFDPhysCommandGenerator.Create(const ACommand: IFDPhysCommand);
begin
...
FCommandText := Trim(ACommand.SQLText);
...
end;

现在轮到 EMBT 如何解决这个问题了。

关于delphi - 如何在运行时使用 TFDQuery 的 RecsSkip 和 RecsMax 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49921281/

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