Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Всем привет)
быть может кто-нибудь услышит мой крик о помощи)
подскажите как запретить ввод повторяющихся данных?
2 таблицы не связаны!
из одной в другую вставляю
Код:

adoquery1.edit;
adoquery1.fieldbyname('Pole').asstr ing:=adoquery2.fieldbyname('Pole'). asstring
adoquery1.post;


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

Для 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, 12:14   #3
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию

Либо сделать уникальный индекс, либо
Код:

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 вне форума   Ответить с цитированием
Старый 12.06.2015, 00:05   #4
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
Репутация: 20
По умолчанию

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

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

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

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

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

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

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

Последний раз редактировалось Ernest027; 12.06.2015 в 22:57.
Ernest027 вне форума   Ответить с цитированием
Старый 13.06.2015, 08:16   #8
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запретить ввод данных в ячейки valerij Microsoft Office Excel 21 03.09.2015 18:30
Программа для ввода строковых данных с клавиатуры. Запретить ввод пробела в строку (Ассемблер) Victor Babin Assembler 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 14.01.2011 00:59


15:01.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru