Delphi 检查记录字段是否唯一(DBTables.TBDEDataSet.Lookup方法)

Delphi 检查记录字段是否唯一(DBTables.TBDEDataSet.Lookup方法),delphi,delphi-xe2,Delphi,Delphi Xe2,我想检查字段“number\u field”中的记录值是否唯一,所以我正在查找number\u字段中具有相同值的记录。我使用查找方法是因为我正在编辑记录: id := SomeTable.Lookup('DOCUMENT_NUMBER', CurrentDocNumber, 'ID'); 当然,在某些情况下,它会给我当前的记录ID。我如何跳过编辑记录 编辑:我不想禁用将具有相同编号的文档保存到数据库-我只想通知用户,他所写的编号已经在系统中,并让他决定要做什么 Edit2:我只在加载的数据中操

我想检查字段“number\u field”中的记录值是否唯一,所以我正在查找number\u字段中具有相同值的记录。我使用查找方法是因为我正在编辑记录:

id := SomeTable.Lookup('DOCUMENT_NUMBER', CurrentDocNumber, 'ID');
当然,在某些情况下,它会给我当前的记录ID。我如何跳过编辑记录

编辑:我不想禁用将具有相同编号的文档保存到数据库-我只想通知用户,他所写的编号已经在系统中,并让他决定要做什么


Edit2:我只在加载的数据中操作-无DB

最好在数据库级别将文档编号字段设置为唯一,然后在过帐期间自动引发异常,这将不允许过帐记录。您还可以捕获异常并用自己的错误重新引发,例如“文档编号已存在”等


如果无法执行此操作,则必须创建另一个表组件,并在POST之前在辅助表中找到该记录,如果该记录存在,则引发异常。

您可以使用TQuery并检查数据库中是否有该记录:

从my_表中选择count(*),其中DOCUMENT_NUMBER=CurrentDocNumber

编辑: 对于TDataSet也可以这样做。您可以
select count
select*
来测试
RecordCount>0

EDIT2: 公平地说:
请注意,如果是这种情况,
我只在加载的数据中操作-没有DB
(这是在您接受我的回答后进行的更新),那么我的解决方案将无法工作,因为记录尚未发布到live DB。尽管如此,如果连接到数据库并写入数据库的客户端超过1个,则必须使用此查询。

关键是我不想禁用使用相同号码保存文档-我只想通知用户他写入的号码已经在系统中,并让他决定搜索辅助表时最好做什么:)辅助具有已删除/筛选记录id的表?但是表可以是bigNo,您只需在辅助表上进行定位。。无需过滤,并确保文档编号有索引。实际上
其中doc\u nb=当前文档编号和id cur\u id
,但我想使用内存数据集然后使用内存数据集。这是sameOk,但它会移动我当前编辑的数据集的记录指针。不会。您正在使用另一个TDataSet或TQuery。最好是在运行时创建它。@JustMe TxQuery组件是一个TDataSet子体组件,可用于使用SQL语句查询一个或多个TDataSet子体组件。可从以下地址获得: