gpt4 book ai didi

delphi - 如何在TADOQuery中使用RecordSet.Find?

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

在这个问题上:

Delphi ADO : Locate with dataset filter on bug

描述了一个ADO错误,其中在.Locates期间忽略了筛选字符串。

这给我们从BDE迁移带来了问题,因为我们有很多代码会根据用户输入更改过滤器。

我们曾期望TADOQuery提供一个可行的迁移路径。我们错了。

当然,我们可以将当前的过滤器更改为WHERE语句,但这需要大量工作,并且有可能将过滤器字符串连接到无过滤器的WHERE语句等。

上面链接的问题的公认答案表明可以使用TCustomADODataSet.Recordset.Find

我们可以安全地在TADOQuery中使用RecordSet.Find来实现.Locates吗?即RecordSet.Find是否更新TADOQuery封装在TADOQuery周围的内容?

如果是这样,有人可以显示从Delphi XE5到RecordSet的示例调用吗?我很难弄清楚这些论点。

最佳答案

最好的选择是查看ADODB.pas TCustomADODataSet.LocateRecord的源代码。您将看到Locate的实现方式。

对于单个条件,它使用RecordSet Find方法。对于多个条件,它使用Filter属性。

使用Find非常简单:

uses ..., ADODB, ADOInt;

procedure TForm1.Button1Click(Sender: TObject);
var
bm: TBookmarkStr;
begin
bm := ADODataSet1.Bookmark;
// for partial condition use e.g. ItemName LIKE 'He*'
ADODataSet1.Recordset.Find('ItemName = ''Hello''', 0, adSearchForward, adBookmarkFirst);
if ADODataSet1.Recordset.EOF then // not found
ADODataSet1.Bookmark := bm // restore bookmark
else
ADODataSet1.Resync([rmExact, rmCenter]); // set active record and trigger dataset change event
end;


由于 TADOQueryTCustomADODataSet的后代,因此使用 RecordSetTADODataSet相同就没有问题

关于delphi - 如何在TADOQuery中使用RecordSet.Find?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31075278/

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