Текущий архив: 2004.12.05;
Скачать: CL | DM;
ВнизУникальность поля, при попытке вставить новую запись. Как? Найти похожие ветки
← →
Hmm © (2004-11-07 18:33) [0]Подскажите, как в программе, при попытке вставить новую запись (набор данных Query), проверить соблюдается ли уникальность ключевого поля (тип string)?
Пробовал Locate в BeforPost, кричит об ошибке, собтвенно сейчас понимаю почему...
Пробовал следующий код, тоже в BeforPost:
try
ibquery4.Post;
except
on EDatabaseError do begin
messagedlg("!",mtConfirmation,[mbOk],0);
ibquery4.Cancel;
abort;
end;
end;
... таже ошибка (правда теперь не совсем понятна суть)
Подскажите, возможно ли применение предложенных мною способов, если да, то на каком событии их вызывать.
Или же если они не верны, подскажите, пожалуйста, другие варианты.
← →
jack128 © (2004-11-07 19:54) [1]Создай уникальный ключ..
← →
DrPass © (2004-11-07 19:57) [2]Если используешь IBQuery - у него специально для обработки ошибок есть событие OnPostError. А в общем случае то, что ты написал, нужно помещать в обработчик OnClick кнопки "Сохранить"
← →
Hmm © (2004-11-07 20:19) [3]2 jack128
Ключ уникальный создан, посему и ошибочка выскакивает. Без него всё гладко было бы... и криво.
2 DrPass
Можно подробнее? Что конкретно писать в OnPostError, мой код не работает. Хотя тут еще вопрос: в коде я заменил EIBInterbaseError (который собственно и выскакивает) на EDatabaseError, пробовал указать 1-ое в данном коде, но пишет, что EIBInterbaseError - не знакомый идентификатор.
OnClick - не подходит, т.к. кешировать изменения в данной базе неприемлимо, посему все данные сохраняются мгновенно (перемещение по DBGrid). Пытался писать сей код в Befor/After scroll... не выходит.
← →
DrPass © (2004-11-07 20:31) [4]
> Что конкретно писать в OnPostError, мой код не работает
ShowMessage("Не могу сохранить данные"). Больше ничего не нужно.
А чтобы отлавливать EIBInterbaseError, добавь в uses модуль IB
← →
Hmm © (2004-11-07 20:39) [5]procedure TForm1.IBQuery4PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
messagedlg("!",mtConfirmation,[mbOk],0);
end;
на что мне в ответ:
"EIBDatabaseError... уникальный ключ и т.д."
← →
Johnmen © (2004-11-08 01:58) [6]try
Post;
except
<облом>
end;
← →
Hmm © (2004-11-08 12:18) [7]Ну а чем [6] отличается от [1], вставелнного в OnPostError?
Вот что пишу я:
procedure TForm1.IBQuery4PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
try
IbQuery4.Post;
except
on EIBInterbaseError do begin
ibquery4.Cancel;
abort;
messagedlg("!",mtError,[mbOk],0);
end;
end;
end;
Ошибка как была, так и осталась.
ЗЫ: Как ни странно, если запускать прогу не в компиляторе, а отдельно от Delphi ошибки не возникает... т.е. происходит нечто вроде IBQuery.Cancel без каких либо сообщений. Т.е. по сути проблемма сейчас стоит не особенно остро, тем неменее на будушее, есть ли у неё решение? Кто нибудь может поделится им в нормальной (куда и что писать) форме?
← →
YurikGL © (2004-11-08 12:28) [8]>Как ни странно, если запускать прогу не в компиляторе, а
>отдельно от Delphi ошибки не возникает..
Потому что в этом случае ее отлавливает except.
Т.е. реально ошибка возникает, просто ты ее не видишь
← →
Соловьев © (2004-11-08 12:30) [9]
> procedure TForm1.IBQuery4PostError(DataSet: TDataSet; E:
> EDatabaseError;
> var Action: TDataAction);
> begin
> try
> IbQuery4.Post;
> except
> on EIBInterbaseError do begin
> ibquery4.Cancel;
> abort;
> messagedlg("!",mtError,[mbOk],0);
> end;
> end;
> end;
А зачем делать пост еще раз, если есть ошибка? Может сначала исправить не мешало бы ошибочку?
← →
Hmm © (2004-11-08 22:45) [10]2 YurikGL
Ошибку я вижу при компиляции в делфе (несмотря на попытку отлова). Но не вижу запуская экзешник отдельно.
2 Соловьев
>А зачем делать пост еще раз, если есть ошибка? Может сначала >исправить не мешало бы ошибочку?
Не понял к чему вообще ваши строки? Возможно, вы не поняли меня?
← →
Плохиш © (2004-11-08 22:55) [11]
> Hmm © (08.11.04 12:18) [7]
> ЗЫ: Как ни странно, если запускать прогу не в компиляторе,
> а отдельно от Delphi ошибки не возникает...
Сообщение не показывается, потому что у тебя стоит аборт перед вызовом. Рассказывать, что такое аборт, надо?
← →
Hmm © (2004-11-08 23:47) [12]Нет, не нужно.
Страницы: 1 вся ветка
Текущий архив: 2004.12.05;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.036 c