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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2010, 18:26   #1
hackmegrom
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 10
По умолчанию Добавление в базу не повторяясь (Делфи)

Здравствуйте. Я видел однажды пример с ADO, где при добавлении записи, если в базе есть похожие то, она не добавляет. И код вроде не сложный был. А в голове он не остался. Уже что только не перепробовал, и edit и insert и т.п. update. Что-то не могу сформировать код. Подскажите пожалуйста, если знаете несложный код.
hackmegrom вне форума Ответить с цитированием
Старый 11.10.2010, 18:34   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

В Access есть такой тип поля - "Счетчик". Это своего рода уникальный идентификатор записи. Наличие этого поля априори исключает дублирование записей в БД. Добавьте в БД поле и поставьте его тип в "Счетчик".
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.10.2010, 18:39   #3
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию

Код действительно не сложный... Делал через AdoTable... Смысл таков: при добавлении записи Delphi считывает значение поля Edit и ищет совпадения по определённому столбцу базы (допустим ФИО), если совпадение есть то выдаёт ошибку, в ином случае добавляет
Код:
  if AdoTable.Locate('ФИО',Edit.Text,[]) then
    ShowMessage('Запись уже существует!')
    else begin
      ADOTable.Insert; 
      ADOTAble.FieldByName('ФИО').AsString:=Edit.Text;
      ..................................................................
    end;
TaYgA вне форума Ответить с цитированием
Старый 11.10.2010, 18:55   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

TaYgA, это если по одной записи добавлять, то можно так делать. А если их циклом нужно заносить по 20000? Делая проверку прога будет тормозить. Лучше все таки на стадии проектирования БД создать уникальное поле.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.10.2010, 20:59   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
А если их циклом нужно заносить по 20000? Делая проверку прога будет тормозить
Но если в поле <Name> не может быть двух одинаковых значений и сделать поле <Name> ключевым, то при добавлении записей циклом просто вылетит ошибка "Повторяющиеся значения в индексе...". Я обычно проверку делаю запросом
select count(*) from <table> where name = "mystring"
if count > 0 then...
_SERGEYX_ вне форума Ответить с цитированием
Старый 11.10.2010, 21:18   #6
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

Надо сделать уникальный индекс Фамилия+Имя+Отчество+ДатаРождения и процедуру внесения записи post защитить try...except, чтобы обработать ошибку в случае добавления дубля.

Код:
try
table1.Insert;
table1['fam']:='Пупкин';
table1.Post;
except
showmessage('Такая запись имеется');
end;
P.S. секция try сработает только в скомпилированном приложении.
SELECT BEST FROM LIFE

Последний раз редактировалось artemavd; 12.10.2010 в 03:31.
Dimasw вне форума Ответить с цитированием
Старый 11.10.2010, 21:48   #7
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
секция try сработает только в скомпилированном приложении
Ну, почему, отлично работает при отключенном "Stop On Delphi Exception"
_SERGEYX_ вне форума Ответить с цитированием
Старый 11.10.2010, 22:25   #8
hackmegrom
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 10
По умолчанию

Спасибо за ответы, мне они были важны, но!
Есть и индексное поле и все остальное. Давайте подумаем примерно над такой ситуацией. База с полями index, tovar, vid - это примерно такое (навскидку) 1|Процессор|Интел
Если я буду вводить значения Процессор и AMD то все нормально. А если введу еще раз Процессор и Интел вот тут то мне и надо, чтобы запись не добавилась, либо заменились, чтобы стопятьдесятштук похожих записей не было.
Мне просто нужен такой код 1,2 строчки. Просто это уже дело принципа пошло, не могу я вспомнить настолько легкий код... Где-то я брал с delphiexpert, но сейчас шарить те сайты не могу т.к. скорость 33,6 плюс деньги улетают на лету.
hackmegrom вне форума Ответить с цитированием
Старый 12.10.2010, 12:32   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

создай в своей базе уникальный индекс по этому полю и все - дубль не добавится
soleil@mmc вне форума Ответить с цитированием
Старый 13.10.2010, 12:15   #10
BeJIuKuu_Hexo4yxa
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 96
По умолчанию

Здесь скорее нужен уникальный индекс по паре полей tovar, vid
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (Стив Макконнелл)
BeJIuKuu_Hexo4yxa вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление текста с русскими символами MySQL в базу Яр|/||< (^_^) SQL, базы данных 5 03.07.2010 00:08
Добавление строки в базу данных из visual studio Жендопыр Помощь студентам 0 24.07.2009 02:32
Случайно но не повторяясь! uraura Общие вопросы Delphi 8 30.11.2008 19:46
Помогите создать базу SQL на Делфи photozaz БД в Delphi 3 01.11.2008 20:30
добавление массива чисел в базу kate158 БД в Delphi 3 24.09.2008 11:00