![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Общие сведения о проге:
У меня есть 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
|
||||
|
||||
|
Код на проверку дубликата записи я вам уже дал. Если вы получаете исключение при запуске кода программы в Дельфи - это нормально. Можно выключить выдачу этих сообщений в настройках, но лучше не стоит. Запускайте исполняемый файл, там уже будет нормальное поведение в случае дубликата записи.
|