- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找 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/
我想使用组件编辑器设计我的 TFDQuery,即在设计时设置 SQL 字符串、选项等,然后在线程中使用查询。 我的问题是线程的每个运行实例都需要自己的查询实例 - 否则它将不是线程安全的。 我是否应该
问题 我想知道是否有任何方法可以通过只知道表的主键来移动到数据集中的特定记录(FDQuery)。 我所知道的 我知道我可以使用 FDQuery.Next; FDQuery.Prior; 移至下一条/上
简而言之,我如何知道哪些(主要和唯一)键唯一标识 FireDAC 查询记录? 我正在使用 Delphi 10.1 & FireDAC & Firebird。 我正在使用代码生成来生成一个包含我的应用程
我想从 TFDQuery.Delta 中删除一个特定的 usModified 记录,但不恢复它。与 TFDQuery.CommitUpdates 相同,但不是针对所有数据集,仅针对一个选择的记录。有人
我正在尝试异步执行 SQL 查询。我已经检查了 http://docwiki.embarcadero.com/RADStudio/XE5/en/Asynchronous_Execution_(Fire
任何人都可以帮助我在运行时克隆 TFDQuery 吗?我在 Delphi Tokyo 中编码,我有一个带有 TFDQuery 的数据模块,其中我在设计时使用字段编辑器定义了所有字段属性,这样我的 DB
我在 Delphi XE5 中使用 TFDQuery 组件从 PostgreSQL 数据库的表中插入和更新记录。我在添加字段(在 DFM 中持续存在)时遇到的一个缺点是它没有检测到某些表字段为 NOT
我使用的是 Delphi 10 Seattle,下面是示例代码。 unit Unit1; interface uses Winapi.Windows, Winapi.Messages, Syste
我正在寻找 TFDQuery 中的跳过并选择。我找到的属性是 .FetchOptions.RecsSkip 和 .FetchOptions.RecsMax。我使用 Tokyo 10.2.3 和数据库
使用 Delphi 10.2、SQLite 和 Teecharts。我的 SQLite 数据库有两个字段,创建方式为: CREATE TABLE HistoryRuntime ('DayTime' D
使用 Delphi 10.2、SQLite 和 Teecharts。我的 SQLite 数据库有两个字段,创建方式为: CREATE TABLE HistoryRuntime ('DayTime' D
我是一名优秀的程序员,十分优秀!