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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2013, 18:38   #1
koudelka
Пользователь
 
Аватар для koudelka
 
Регистрация: 22.11.2013
Сообщений: 17
Вопрос DELPHI:вопросик по поводу запрета на внесение повторных данных в таблицу БД

привет, ребят. Есть вопросик по поводу запрета на внесение повторных данных в таблицу БД (Delphi, DBGrid) в режиме редактирования записи.
Код, представленный ниже, полностью рабочий, однако у меня он работает как надо только для ДОБАВЛЕНИЯ ЗАПИСИ, для РЕДАКТИРОВАНИЯ уже существующей записи он работает неправильно, т.к. он проверяет методом locate на дубликат записи, ВКЛЮЧАЯ ТЕКУЩУЮ,КОТОРУЮ МЫ В ДАННЫЙ МОМЕНТ РЕДАКТИРУЕМ, чего быть не должно! Как этого избежать? то есть ИСКЛЮЧИТЬ ИЗ ПОИСКА Locate ТЕКУЩУЮ запись, которую мы редактируем в данный момент?!

Код:
procedure TForm1.BitBtnSAVECHANGESClick(Sender: TObject); 
var LocOpts:TLocateOptions;
    LocFields: String;
    LocValues: Variant;
begin                                                         
IF (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') then ShowMessage('There is an empty field! please check!')  {предупреждение о пустых полях}     
ELSE begin
{проверка на дубликат записи, вот тут и нужно исключить проверку по текущей записи,чтобы проверял только остальные записи в таблице, а эту редактируемую не трогал}
IF   (DataModule2.Table6.Locate('Ylica_N_doma' ,  Edit2.Text , LocOpts)=True) or {ID  я не включаю, т.к. оно у меня под запретом редактирования}
(DataModule2.Table6.Locate('Pochtovii_index' ,  Edit3.Text , LocOpts)=True) 
THEN  ShowMessage('Duplicate record or ID is found. Please check and try again!')
ELSE begin
DataModule2.Table6.Edit;
DataModule2.Table6.FieldByName('ID_Ylici').AsString:=Edit1.Text;
DataModule2.Table6.FieldByName('Ylica_N_doma').AsString:=Edit2.Text;
DataModule2.Table6.FieldByName('Pochtovii_index').AsString:=Edit3.Text;
DataModule2.Table6.Post;
Edit1.Clear; Edit2.Clear; Edit3.Clear;
end;end;end;end;end;

Последний раз редактировалось koudelka; 01.12.2013 в 18:54.
koudelka вне форума Ответить с цитированием
Старый 01.12.2013, 18:54   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

если мы собираемся менять ключевое поле(поля), то проверять надо новый ключ (которого быть не должно).
а если не собираемся менять, то и проверять не зачем. (ведь он уже есть и проверен при его вводе)
Код:
if newkey<>oldkey then ok:=locate(..., newkey,... ) else ok:=true;
проверка ключа только при его изменении(добавление нового ключа).
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 01.12.2013, 18:58   #3
koudelka
Пользователь
 
Аватар для koudelka
 
Регистрация: 22.11.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
проверка ключа только при его изменении(добавление нового ключа).
можно поподробнее?
newkey<>oldkey
не распознает обоих, да и я не совсем понимаю какое значение ( судя по моему коду ) нужно задать этим переменным ...
как интегрировать вашу подсказку в код - не ясно.

Последний раз редактировалось koudelka; 01.12.2013 в 19:20.
koudelka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
внесение данных в комбобокс mojohead Помощь студентам 0 30.05.2011 23:18
Выбор абонента по номеру телефона и внесение его данных в другую таблицу flintus Microsoft Office Access 2 25.03.2011 19:04
Внесение новых данных в таблицу учёта den292 Microsoft Office Excel 8 21.06.2010 13:24
Access 2003. Как исключить ввод повторных данных в форме ? MAN5ON Помощь студентам 0 19.06.2009 23:23
Внесение данных в БД limon PHP 4 26.11.2008 17:00