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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2010, 23:17   #1
flyinsky
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 21
По умолчанию DBGRID одинаковые строки

Здраствуйте всем. Есть у меня DBgrid данные в него ввожу через Edit

Код:
 begin
datamodule1.ADOTable4.Append;
datamodule1.ADOTable4.FieldByName('Фамилия').AsString:=edit1.text;
datamodule1.ADOTable4.FieldByName('Имя').AsString:=edit2.text;
datamodule1.ADOTable4.FieldByName('Отчество').AsString:=edit3.text;
datamodule1.ADOTable4.FieldByName('Документ').AsString:=combobox1.Text;
datamodule1.ADOTable4.FieldByName('Номер').AsString:=edit4.text;
datamodule1.ADOTable4.Post;
      end;
Возник вопрос - Как запретить ввод в Грид, если у меня в Гриде уже существует строка с теми данными которые я собираюсь туда добавить
и видя это Грид проигнорировал бы ввод данных, а просто выделил существующюю строку. Заранее благодарен за ответы
flyinsky вне форума Ответить с цитированием
Старый 10.12.2010, 05:07   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

сначала провести поиск,если соответствий не найдено, то записывать.
используя Locate
Код:
if not ADOTable1.Locate('Фамилия;Имя;Отчество;Документ;Номер',VarArrayOf([Edit1.Text,Edit2.Text,edit3.text,combobox1.Text,edit4.text]),[loCaseInsensitive,loPartialKey]) then
 begin
datamodule1.ADOTable4.Append;
datamodule1.ADOTable4.FieldByName('Фамилия').AsString:=edit1.text;
datamodule1.ADOTable4.FieldByName('Имя').AsString:=edit2.text;
datamodule1.ADOTable4.FieldByName('Отчество').AsString:=edit3.text;
datamodule1.ADOTable4.FieldByName('Документ').AsString:=combobox1.Text;
datamodule1.ADOTable4.FieldByName('Номер').AsString:=edit4.text;
datamodule1.ADOTable4.Post;
 end;

используя Lookup
Код:
if ADOTable1.Lookup('Фамилия;Имя;Отчество;Документ;Номер',VarArrayOf([Edit1.Text,Edit2.Text,edit3.text,combobox1.Text,edit4.text]),'Фамилия')<>null then
Showmessage('такая запись уже есть')
else
 begin
datamodule1.ADOTable4.Append;
datamodule1.ADOTable4.FieldByName('Фамилия').AsString:=edit1.text;
datamodule1.ADOTable4.FieldByName('Имя').AsString:=edit2.text;
datamodule1.ADOTable4.FieldByName('Отчество').AsString:=edit3.text;
datamodule1.ADOTable4.FieldByName('Документ').AsString:=combobox1.Text;
datamodule1.ADOTable4.FieldByName('Номер').AsString:=edit4.text;
datamodule1.ADOTable4.Post;
end;
правда используя Lookup курсор не перемещается на найденую запись

Последний раз редактировалось vovk; 10.12.2010 в 09:22. Причина: добавил метод
vovk вне форума Ответить с цитированием
Старый 10.12.2010, 09:35   #3
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

А не легче при создании БД запретить ввод повторяющихся значений. И тогда не надо никаких проверок
SERG1980 вне форума Ответить с цитированием
Старый 10.12.2010, 09:53   #4
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от SERG1980 Посмотреть сообщение
А не легче при создании БД запретить ввод повторяющихся значений. И тогда не надо никаких проверок
Это даже нужно, но проверка и перемещение на существующую запись, или сообщение о том что такая запись есть, предпочтительнее сообщения об ошибке. Мне так кажется по крайней мере)
В общем одно другому не мешает, уникальный ключ обеспечит уверенность в нормальном содержании таблицы, а проверка даёт возможность настраивать поведение приложения при попытке добавить клон уже существующей записи.
vovk вне форума Ответить с цитированием
Старый 10.12.2010, 10:22   #5
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Ну опять же добавление записи можно заключить в блок try except и там сообщить что запись есть. Просто лишние проверки особенно в большой БД на мой взгляд не очень хорошо
SERG1980 вне форума Ответить с цитированием
Старый 10.12.2010, 18:13   #6
flyinsky
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 21
По умолчанию

to Vovk
Спасибо за помощь проблема решена.

to SERG1980
Возьму на заметку
flyinsky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одинаковые строки Memo Dima_D Общие вопросы Delphi 12 15.07.2012 09:03
работа с excel в delphi.Выявить одинаковые строки betirsolt БД в Delphi 1 03.06.2010 22:57
строки в dbgrid tela БД в Delphi 2 24.02.2010 14:16
Одинаковые строки Македонский Общие вопросы Delphi 3 05.10.2007 14:40