|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Уникальность поля в DBGrid
Общие сведения о проге:
У меня есть DbGrid, который подсоединён к БД Oracle через ADOTable. Добавление записи совершается при помощи вызова новой формы, на которой используются компоненты DBEdit. И, наконец-то, сам вопрос: Как мне сделать проверку на уникальность поля? То есть, мне надо, чтобы при создании новой записи выводилось сообщение, что такое "Имя" уже есть! Заранее благодарен! |
#2
|
|||
|
|||
Проверять нужно (наверное) не уникальность поля, а значение какого-то
поля. И не в DBGrid, а в DataSet (скорее всего). В зависимости от DataSet - можно или FindKey или Locate. Код:
if Query1.Locate('ID', MyID, []) then begin ShowMessage('Значение ID='+IntToStr(MyID)+' уже есть'); end; Но это не оч.надежно (для Locate, во всяком случае), если таблица открыта с фильтрацией. Надежнее завести отдельный TQuery и делать соотв.запрос, типа: Код:
SELECT ID FROM MyTable WHERE ID = :MyID или Код:
SELECT COUNT( * ) FROM MyTable WHERE ID = :MyID И проверять результат. А еще надежнее проверять уникальность на стороне сервера. Последний раз редактировалось roamer, 20.11.2010 в 01:47. |
#3
|
||||
|
||||
У вас клиент-серверное приложение. Принято все проверки проводить на стороне сервера. В вашем случае надо просто создать уникальный индекс для вашей таблицы. А на стороне клиента, обработать сообщение об ошибке сгенерированное сервером в случае нарушения уникальности.
Например так: Код:
procedure TForm1.ADOTable1PostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); begin ShowMessage('Такое имя уже есть'); Action := daAbort; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
|||
|
|||
Цитата:
CREATE UNIQUE INDEX <index_type> <index_name> ON <table_name> ( <column_name1> <index_order>, <column_name2> <index_order>, ) |
#5
|
||||
|
||||
Верно. Либо через скрипт, либо в режиме дизайнера таблицы.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
|||
|
|||
Цитата:
|
#7
|
||||
|
||||
Код на проверку дубликата записи я вам уже дал. Если вы получаете исключение при запуске кода программы в Дельфи - это нормально. Можно выключить выдачу этих сообщений в настройках, но лучше не стоит. Запускайте исполняемый файл, там уже будет нормальное поведение в случае дубликата записи.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
|||
|
|||
Цитата:
|