Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DELPHI:запрет на внесение повторных данных в таблицу БД [D7]


Koudelka ©   (2013-12-01 19:41:00) 

привет, ребят. Есть вопросик по поводу запрета на внесение повторных данных в таблицу БД (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('ID_Ylici' ,  Edit1.Text , LocOpts)=True) or   {проверка на дубликат записи, вот тут и нужно исключить проверку по текущей записи}
(DataModule2.Table6.Locate('Ylica_N_doma' ,  Edit2.Text , LocOpts)=True) or
(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;


sniknik   (2013-12-02 08:00:00) [1]

раздражают воинствующие ламеры.


brother   (2013-12-02 05:13:00) [2]

странно, что темку ущу не колуз...


Koudelka   (2013-12-02 03:14:00) [3]

Удалено модератором
Примечание: Я предупреждал, с этим на помойку


Koudelka   (2013-12-02 03:14:00) [4]

Удалено модератором
Примечание: Теме даун


Jeer   (2013-12-02 01:23:00) [5]

Все надлежащее сказано чуть выше.
Если это вне рамок вашего понимания - читать учебники по БД.


Koudelka   (2013-12-02 00:05:00) [6]

Необходимо осуществить проверку ключа только при его изменении(добавление нового ключа)


Koudelka   (2013-12-02 00:02:00) [7]

Удалено модератором
Примечание: Повежливей


Jeer   (2013-12-01 22:46:00) [8]

Переводя с греческого на арамейский, могу дополнить парой фраз на понятном ТС языке:
- может помочь уникальный индекс;
- до тех пор и пока запись не отредактирована на сервере логическим методом Post, ее вообще не существует, кроме воспаленного воображения юзера и его клиентского приложения.


[ВладОшин]   (2013-12-01 22:04:00) [9]

Это лучше сделать наложением ограничения на таблицу БД


Наверх

Титульная страница Поиск, карта сайта Написать письмо