Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
1-1100767996
doma
2004-11-18 11:53
2004.12.05
ToolWindow из Dllины


1-1101101856
ORMADA
2004-11-22 08:37
2004.12.05
bmp 2 ico


9-1091703136
pavel_pavel
2004-08-05 14:52
2004.12.05
TBitmap побыстрее


1-1101032493
PoUlerer
2004-11-21 13:21
2004.12.05
Menu


14-1100786190
Ilya___
2004-11-18 16:56
2004.12.05
Подскажите пожалуйста! У меня есть таблица в которой указано,





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский