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

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

Как избежать повторного ввода данных в базу? [D7, XP]


Страницы:   1 2

unknow ©   (2010-08-11 14:10:00) 

Здравствуйте Мaстера Delphi! Помогите решить такую проблему.
Имеется база подшипников. Ввод данных выполняется через DBGrid.
При добавлении записи необходимо делать проверку - не введен ли уже такой подшипник, если в базе (Interbase) уже имеется такой подшипник, то должно выдаваться соответствующее сообщение. Я представляю процесс так: берем только что введенное в DBGrid значение и проводим поиск по базе, если такое значение есть - выдается сообщение, если нет - происходит запись в базу. вопрос в том, где взять то значение, которое будем искать, в каком свойстве DBGrid оно находится.


Игорь Шевченко   (2010-08-19 13:38:00) [1]

Kolan ©   (19.08.10 12:30) [30]

Ты почитай, как СУБД работают, о транзакциях, уровнях изоляции, целостности данных, и т.п. Сразу просветление наступит и дурацких советов не будешь давать.


Юрий Зотов   (2010-08-19 12:58:00) [2]


> Kolan ©   (19.08.10 12:30) [30]

Вполне нормальное решение, ничего хренового. А вот поиск по мере ввода - решение действительно хреновое. Потому что зазря грузит и клиента, и сервер, и сетку - а реальных преимуществ никаких не дает. Особеннно хорошо получится, когда клиентов тысяч эдак несколько.


> unknow   (18.08.10 14:06) [21]
> Но если выдается сообщение: violation of primary or UNIQUE KEY
> constraint "UNQ1_STANKI" on table "STANKI", значит ошибка уже возникла?

Конечно возникла. Но записи в БД не произошло, правильность данных не нарушена. Вы выдаете юзеру сообщение "такой уже есть", юзер закрывает его и после этого может либо изменить вводимые данные, либо отказаться от ввода. И все тип-топ.


Kolan   (2010-08-19 12:30:00) [3]

Вот без таких штук как у unknow'а.
on Exception do ShowMessage ('Такой есть!');


Anatoly Podgoretsky   (2010-08-19 12:28:00) [4]

> Kolan  (19.08.2010 11:34:27)  [27]

Без сообщения
и тут же сообщать о нём

Логика не нарушена?


Игорь Шевченко   (2010-08-19 11:42:00) [5]


> Можно искать дубликат по мере ввода и тут же сообщать о
> нём, не прерывая работу пользователя


Хреновое решение


Kolan   (2010-08-19 11:34:00) [6]

«если в базе (Interbase) уже имеется такой подшипник, то должно выдаваться соответствующее сообщение.»
Хреновое решение, надо без сообщения. Можно искать дубликат по мере ввода и тут же сообщать о нём, не прерывая работу пользователя.


Anatoly Podgoretsky   (2010-08-19 10:05:00) [7]

> unknow  (18.08.2010 14:06:21)  [21]

Ошибку выдает сервер.


12   (2010-08-19 08:30:00) [8]


> а при чем фибы к IBX?

да, автор, сори, вообще невснимателен стал


Виталий Панасенко(дом)   (2010-08-18 19:00:00) [9]


> 12 ©   (18.08.10 14:31) [23]
>
>

а при чем фибы к IBX? Судя по названию компонент как раз последнее автор и использует.
Автору - см. событие OnPostError(кажись)


12   (2010-08-18 14:31:00) [10]


> то такое FIBErrorHandler и где его посмотреть?

в гугле пробовал?


unknow   (2010-08-18 14:10:00) [11]

Удалено модератором


unknow   (2010-08-18 14:06:00) [12]

У меня именно и установлено ограничение на колонку, чтобы нельзя было ввести одинаковое значение (модель станка).
> Так на BeforePost и не должна ошибка вываливаться, она позже
> возникает.

Но если выдается сообщение: violation of primary or UNIQUE KEY constraint "UNQ1_STANKI" on table "STANKI", значит ошибка уже возникла?
А что позже BeforePost? Post? Но это уже слишком поздно сообщать об ошибке!
Или есть еще какое-то событие до Post?
Что такое FIBErrorHandler и где его посмотреть?


12   (2010-08-18 11:28:00) [13]


> на BeforePost и не должна ошибка вываливаться, она позже
> возникает.

хотя, да


12   (2010-08-18 11:18:00) [14]

значит, не дохожит до сюда
см. FIBErrorHandler


engine   (2010-08-18 11:15:00) [15]

Так на BeforePost и не должна ошибка вываливаться, она позже возникает.


Anatoly Podgoretsky   (2010-08-18 10:55:00) [16]

У тебя наверно на колонку наложено ограничение по уникальности.


unknow   (2010-08-18 08:49:00) [17]

Добрый день всем. dialogs в uses я добавил - Delphi теперь не "ругается",  но и сообщение мое выдавать не желает. Выдает только свое: violation of primary or UNIQUE KEY constraint "UNQ1_STANKI" on table "STANKI"


12   (2010-08-17 17:20:00) [18]


> Что я делаю не правильно? Messages в uses я добавил.
>

dialogs в uses


unknow   (2010-08-17 16:51:00) [19]

У меня есть такая процедура, находится в модуле :

procedure TDataModule2.IBQStanki1BeforePost(DataSet: TDataSet);
begin
if IBQStanki1.State in [dsInsert] then
   begin
   
     IBSProcStanki.ExecProc;
     IBQStanki1.FieldByName('NPP').AsInteger:=IBSProcStanki.Params[0].AsInteger;
   
   end;{if}
end;


Пытаюсь добавить try ... except

procedure TDataModule2.IBQStanki1BeforePost(DataSet: TDataSet);
begin
if IBQStanki1.State in [dsInsert] then
   begin
   try
     IBSProcStanki.ExecProc;
     IBQStanki1.FieldByName('NPP').AsInteger:=IBSProcStanki.Params[0].AsInteger;
   except
    on Exception do ShowMessage ('Такой есть!');
   end;
   end;{if}
end;


Ругается на ShowMessage - говорит:
[Error] Module2.pas(102): Undeclared identifier: 'ShowMessage'

Что я делаю не правильно? Messages в uses я добавил.


Anatoly Podgoretsky   (2010-08-16 19:32:00) [20]

> unknow  (16.08.2010 15:23:10)  [10]

Вводи данные через форму ввода.


Страницы:   1 2

Наверх

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