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

时间:2012-01-05 10:52:59

标签: delphi delphi-xe2

我想检查字段“number_field”中的记录值是否唯一,因此我在number_field中找到具有相同值的记录。我使用Lookup方法,因为我正在编辑记录:

id := SomeTable.Lookup('DOCUMENT_NUMBER', CurrentDocNumber, 'ID');

当然在某些情况下它会给我当前的记录ID。如何跳过编辑记录?

编辑:我不想禁用将相同编号的文档保存到数据库中 - 我只是想告诉用户他写的编号已经在系统中并让他决定做什么

Edit2:我只在加载的数据中运行 - 没有DB

2 个答案:

答案 0 :(得分:4)

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

select count(*) from my_table where DOCUMENT_NUMBER=CurrentDocNumber

修改 使用TDataSet也可以做到这一点。您可以select countselect *来测试RecordCount > 0

<强> EDIT2: 公平地说: 请注意,如果是这种情况I operate only in loaded data - no DB(这是您接受我的答案后的更新),那么我的解决方案将无法工作,因为记录尚未发布到实时数据库。从来没有,如果有超过1个客户端连接并写入数据库,必须使用此查询。

答案 1 :(得分:1)

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

如果你不能这样做,那么你必须创建另一个表组件,beforepost在辅助表中找到记录,如果它存在,则引发异常。