1

我有最奇怪的问题:一个 Dataset.Locate 说他找到了一条记录并跳转到它,但该记录不符合标准。

这是我的代码:

procedure TFZoekEmp.edtZoekNaamEmpChange(Sender: TObject);
var
  lFound:boolean;
begin
  lFound:=FDataSet.Locate('EMNM', edtZoekNaamEmp.Text, [loCaseInsensitive, loPartialKey]);
  if lFound then
    WWMessageDlg('Looking for:'+edtZoekNaamEmp.Text+'/found:'+ FDataset.fieldbyname('EMNM').asstring,mtWarning,[mbOK],0)
  else
    WWMessageDlg('Looking for:'+edtZoekNaamEmp.Text+'/but alas, not found.',mtWarning,[mbOK],0);
end;

这是输出的屏幕截图:

在此处输入图像描述

这是一个简单的过程,用于在覆盖中输入员工姓名(屏幕截图中的“Zoek 员工”窗口)并跳转到包含搜索字符串的第一条记录(主窗体上的网格,在左侧)

我正在使用德尔福 10.3。FDataset 是一个 TADODataset,它连接到本地 Access 数据库,由动态创建的 SQL 字符串提供。除了该 SQL 语句中的 WHER 之外,数据集还由数据集的“过滤器”属性进一步过滤。

有一个选项可以更改网格的排序顺序。当它实际上按名称排序时(ORDER BY 子句),一切正常;当它按出生日期排序时,会出现上述结果。

我可以不再信任 TDataset 的“定位”过程吗?

4

0 回答 0