Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2015, 22:27   #1
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию запретить ввод повторяющихся данных

Всем привет)
быть может кто-нибудь услышит мой крик о помощи)
подскажите как запретить ввод повторяющихся данных?
2 таблицы не связаны!
из одной в другую вставляю
Код:
adoquery1.edit;
adoquery1.fieldbyname('Pole').asstr ing:=adoquery2.fieldbyname('Pole'). asstring
adoquery1.post;

Последний раз редактировалось Stilet; 11.06.2015 в 11:09.
Ernest027 вне форума Ответить с цитированием
Старый 11.06.2015, 10:47   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Для adoquery1 создать процедуру, связанную с событием BeforePost.
В этой процедуре проверить через SQL запрос наличие значения какое в adoquery2.fieldbyname('Pole'). asstring.
Если есть, то вызвать глобальную процедуру Abort.
Что-то в этом роде:
Код:
procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
var Yes : boolean;
begin
  ADOQuery20.SQL.Text :=
     'select * from <Table> where <Pole> = '#39+ADOQuery2['Pole']+#39;
  ADOQuery20.Open;
  Yes := not ADOQuery20.Eof;
  ADOQuery20.Close;
  if Yes then Abort;
end;
Здесь ADOQuery20 - отдельный компонент с пустым SQL и связанный только с ADOConnection; символ #39 используется в случае если Pole текстового типа.
Опять же, такой древний метод записи данных (insert/edit/post) лучше делать через ADOTable или ADODataset. Впрочем, если СУБД позволяет такие вольности, то флаг в руки.
Прик вне форума Ответить с цитированием
Старый 11.06.2015, 11:14   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Либо сделать уникальный индекс, либо
Код:
if VarIsNull(adoquery1.Lookup('Pole',[adoquery2.fieldbyname('Pole'). asstring],'Pole')) then begin
 adoquery1.edit;
 adoquery1.fieldbyname('Pole').asstr ing:=adoquery2.fieldbyname('Pole'). asstring
 adoquery1.post;
end else ShowMessage(Такая запись уже существует);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2015, 23:05   #4
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Спасибо большое))) буду пробовать)
Ernest027 вне форума Ответить с цитированием
Старый 12.06.2015, 19:50   #5
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Ничего не получается(
Может не так объяснил или у меня лыжи не едут)
Если таблица 1 и таблица 2.
Таблица1
Фамилия Имя Отчество

Таблица 2
Фамилия Имя

Нужно чтобы каждый раз когда добавляю из 1ой таблицы во вторую, записи во второй не повторялись(именно в базе).
Как это осуществить?
Сделал в access поле уникальным (индексированное поле - да, совпадения не допускаются). Но при добавлении повторяющейся записи вылетает ошибка

Последний раз редактировалось Ernest027; 12.06.2015 в 20:07.
Ernest027 вне форума Ответить с цитированием
Старый 12.06.2015, 20:30   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну правильно. Ошибку перехватывай в try except конструкции, и выводи гневное сообщение о том что такая запись уже есть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.06.2015, 21:54   #7
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

В try пишу что надо добавить, а в except что писать?
Мне не нужно чтобы выходило сообщение,мне нужно чтобы он просто эту запись не добавлял и переходил к следующей.
Спасибо

Последний раз редактировалось Ernest027; 12.06.2015 в 21:57.
Ernest027 вне форума Ответить с цитированием
Старый 13.06.2015, 07:16   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
В try пишу что надо добавить, а в except что писать?
Ниче. Пустым его оставляй. Если нужно только перехватывать сообщение без обработки то - пустым.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запретить ввод данных в ячейки valerij Microsoft Office Excel 21 03.09.2015 17:30
Программа для ввода строковых данных с клавиатуры. Запретить ввод пробела в строку (Ассемблер) Victor Babin Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 05.12.2012 09:38
Запретить ввод символов в ValueListEditor Renok Общие вопросы Delphi 1 14.03.2012 18:53
Как запретить ввод в memo? xpams Компоненты Delphi 2 24.10.2011 07:05
Запретить ввод более одной десятичной точки в форму ввода("некорректный ввод") adller_one PHP 1 13.01.2011 23:59