![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как избежать повторного ввода данных в базу? [D7, XP]
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]
Вводи данные через форму ввода.