- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的查询,它返回以下行:
Name Value
Peter 1
Peter 2
Peter 3
John 1
John 2
应用过滤器:
ADO.Filter := 'Name="John"';
ADO.Filtered := True; // Now, its only 2 rows in dataset
ADO.Locate('Value', 2);
光标应该指向“John 2”,但它指向“Peter 2”(已被过滤器过滤掉)。并且locate返回True。
在 Delphi 7、Rad studio XE 6 上尝试过。看来这个错误在过去 15 年里一直存在有什么解决办法吗?
最佳答案
TCustomADODataSet.Locate
的问题是它内部使用 Recordset.Clone
并尝试在克隆记录集中查找记录,而不将过滤器设置为克隆记录集(请参阅 ADODB TCustomADODataSet.LocateRecord
)。
摘自文档中的备注:
The Filter property of the original Recordset, if any, will not be applied to the clone. Set the Filter property of the new Recordset to filter the results. The simplest way to copy any existing Filter value is to assign it directly, as follows. rsNew.Filter = rsOriginal.Filter The current record of a newly created clone is set to the first record.
我一直在使用自己的简单Locate
函数来过滤ADO数据集:基本上,存储当前书签,移动到第一条记录并迭代数据集直到找到匹配项。如果未找到匹配项,则恢复之前的书签。
波纹管是一个对我有用的非常有限的实现(为了完美的解决方案还有很多待办事项):
class function TData.Locate(DataSet: TDataSet; const KeyFields: string;
const KeyValues: Variant; Options: TLocateOptions): Boolean;
{ a very simple Locate function - todo: TLocateOptions & multiple KeyFields/KeyValues }
var
BM: TBookmarkStr;
begin
Result := False;
if DataSet.IsEmpty then Exit;
BM := DataSet.Bookmark;
DataSet.DisableControls;
try
DataSet.First;
while not DataSet.Eof do
begin
if DataSet.FieldByName(KeyFields).Value = KeyValues then
begin
Result := True;
Break;
end;
DataSet.Next;
end;
if not Result then DataSet.Bookmark := BM;
finally
DataSet.EnableControls;
end;
end;
另一个选项是修补 ADODB.pas TCustomADODataSet.LocateRecord
并设置 FLookupCursor.Filter
以匹配当前数据集过滤器。只要您将 ADODB.pas 修补为放置在项目文件夹中的新副本,此选项就可以接受。
另一种选择是使用 TCustomADODataSet.Recordset.Find
方法(另请参阅:How to use a RecordSet.Find with TADOQuery?)。
关于德尔福ADO : Locate with dataset filter on bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28231727/
作为内部研究项目的一部分,我们正在尝试从 Bugzilla 数据库中收集一些指标;我们已经找到了一个工具来帮助我们从中收集一些指标 ( BugzillaMetrics ) 但我们现在问自己应该收集哪些
我想向 Mantis Bug 跟踪器添加一个名为“On Hold”的自定义状态。根据我在网上找到的一些博客,我在 config_local.php 中添加了以下几行: $g_status_enum_s
我安装了Mantis BT,并在成功安装后重定向到登录页面。它说默认用户是“管理员”,但没有提供有关其密码的提示。 Documentation也未指定默认密码。有什么线索吗? 最佳答案 Aah ..明
我遇到了一些复杂的C++模板代码的编译错误,将其简化如下: struct MyOptions { static const size_t maxArray = 2; static co
我试图编译一些使用 Boost (1.49) 的代码,使用 trunk 中的 Clang(& libc++)。有问题的代码归结为以下内容: #include #include int main()
我在这里设置了一个 CSS 菜单: http://pans.saebermedia.com/ 问题是,我注意到 IE 无法正确显示菜单,现在我又开始使用装有 IE8 的计算机来修复它。我正在使用兼容模
我检查了 GCC buglist和 Clang buglist并且还没有看到任何相关内容。 This Wandbox link显示一些 C++11/C++14 代码为各种类型的 x 执行 declty
所以我有这个简洁的小 javascript 函数,我用它以很酷的命令提示符样式将文本打印到浏览器窗口。它接受一个字符串并以设定的时间间隔一次将一个字符打印到窗口。这是:(我已经删除了所有不必要的部分,
在我的 Galaxy Tab 2(三星)上启动我的应用程序时,我不断收到此错误消息。我正在开发的应用程序非常复杂,很难追踪此错误的来源。所以我开始逐个剥离我的应用程序,最后只剩下一个 map View
我正在使用 Workbench 在 Mathematica 中开发一个应用程序包,它开始变得复杂,包含多个版本和组件。我在一些 mathematica 文档(http://reference.wolf
我选择了四种免费工具用于基于 Web 的缺陷跟踪。它们是: 错误说明 螳螂 错误跟踪器 .NET 来自 Project Locker 软件的 Trac 考虑到以下因素,我正在尝试在这四种工具之间做出决
我正在尝试将 mysqlclient 安装到我的 Python 3.6 上。最初我想安装的是 MySQLdb,但是它说 MySQLdb 不能与 Python 3 一起使用(还是?)。所以我切换到mys
我正在尝试将 mysqlclient 安装到我的 Python 3.6。最初我要安装的是 MySQLdb,但是它说 MySQLdb 不能与 Python 3 一起使用(仍然?)。所以我切换到mysql
我正在尝试将 mysqlclient 安装到我的 Python 3.6。最初我要安装的是 MySQLdb,但是它说 MySQLdb 不能与 Python 3 一起使用(仍然?)。所以我切换到mysql
**摘要:**为了保障华为云GaussDB产品的可靠性,每一款产品发布前都要通过多轮严苛的测试用例。 说明:本文中的MySQL,如果不做特殊说明,指的是开源社区版MySQL。 华为云数据库新版本在发布
我有一个程序,它打开一个程序,然后将一个字符串复制并粘贴到该程序中,一段时间后,它使用带有 ctrl+c 的机器人将一个字符串从程序复制到剪贴板。然后我的程序检查复制的字符串是否包含单词,但不是检查最
所以我尝试为 cocos2d-x 构建项目。我目前在 cmd 中,当我键入 python android-build.py -p 19 cpp-tests 时,它开始制作项目,但随后出现构建失败的错误
我是开发物理模型的团队中唯一的软件工程师(大约 30,000 行代码)。团队的其他成员由开发代码库大约 20 年的科学家组成。我的工作流程是这样的: 科学家请求新功能 我实现 通过测试和验证,我在数字
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 2年前关闭。 Improve this
当我运行 时,以下代码抛出 ExecutionEngineException发布 构建可执行文件(启动 exe 文件 )。这是错误还是正常行为? 包大小 = 1 的值类型: [StructLayout
我是一名优秀的程序员,十分优秀!