Проверка уникальности поля записи (метод DBTables.TBDEDataSet.Lookup) - PullRequest
3 голосов
/ 05 января 2012

Я хочу проверить, является ли значение записи в поле «число_поле» уникальным, поэтому я нахожу запись с тем же значением в поле «число_поля».Я использую метод Lookup, потому что я редактирую запись:

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

Конечно, в некоторых случаях это даст мне текущий идентификатор записи.Как я могу пропустить редактирование записи?

Редактировать: я не хочу отключать сохранение документа с тем же номером в базе данных - я просто хочу сообщить пользователю, что номер, который он написал, уже находится в системеи пусть он решит, что делать

Edit2: я работаю только с загруженными данными - без DB

Ответы [ 2 ]

4 голосов
/ 05 января 2012

вы можете использовать TQuery и проверить, есть ли у вас запись в БД:

select count(*) from my_table where DOCUMENT_NUMBER=CurrentDocNumber

EDIT: То же самое можно сделать с TDataSet. Вы можете либо select count, либо select * проверить, если RecordCount > 0

EDIT2: просто чтобы быть справедливым обратите внимание, что если это так I operate only in loaded data - no DB (это было обновление после того, как вы приняли мой ответ), то мое решение не будет работать, потому что записи еще не опубликованы в оперативной базе данных. тем не менее, вы должны использовать этот запрос, если к базе данных подключено более одного клиента и выполняется запись в БД.

1 голос
/ 05 января 2012

Хорошей практикой является установка поля DOCUMENT_NUMBER как уникального на уровне базы данных, тогда во время публикации будет автоматически сгенерировано исключение, которое запретит публикацию записи. Вы также можете перехватить исключение и повторно вызвать его с вашей собственной ошибкой, такой как «Номер документа уже существует» и т. Д.

Если вы не можете сделать это, вам нужно будет создать другой компонент таблицы, и перед постом найти запись во вторичной таблице, и, если она существует, вызвать исключение.

...