|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
31.05.2007, 14:12 | #1 |
Регистрация: 31.05.2007
Сообщений: 9
|
Не работает try except!!!
Добрового всем времени суток! Помогите, пожалуйста! Подскажите, где я не права.
Есть БД-Access, пишу приложение к ней. Мне нужно в таблицу с одним ключевым полем(nam) вставить новую строку. Делаю следующим образом:ставлю кнопку "новая строка". Для нее определяю процедуру: Table1.Open; Table1.Edit; Table1.Insert; Далее вводим данные и нажимаем на кнопку "Сохранить": try Table1.Post; except On E:EDatabaseError do if E.message='Key violation' then MessageDlg('Такая точка уже существует!',mtError,[mbOk],0); end; Но при выполнении программы в except даже не заходит, а вылетает и выдает свое сообщение с тем же смыслом. Где ошибка? |
31.05.2007, 15:28 | #2 |
Форумчанин
Регистрация: 15.02.2007
Сообщений: 183
|
Насколько мне известно в try записывается, то что мы хотим проверить, т.е. try необходимо написать перед Table1.insert
Знать все невозможно, в силу того, что жить бы стало неинтересно.
|
31.05.2007, 17:40 | #3 |
Регистрация: 31.05.2007
Сообщений: 9
|
А что не правильно в следующей конструкции:
try QueryIns.SQL.Clear; QueryIns.SQL.Add('INSERT INTO доход(Точка,Дата,Сумма) '); QueryIns.SQL.Add('VALUES ("'+TochkaName+'",#'+newDate+'#,'+S um+')'); QueryIns.ExecSQL; ShowMessage('Данные сохранены!'); Summa.Text:=''; except On e : EADOError do if E.message='Key violation' then MessageDlg('Такая точка уже существует!',mtError,[mbOk],0); end; |
31.05.2007, 20:54 | #4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
если ты нажимаешь F9 и возникает ошибка, то так и будет. попробуй как обычную прогу в проводнике запустить...
|
31.05.2007, 21:10 | #5 |
Регистрация: 31.05.2007
Сообщений: 9
|
Вот в этом случае все проходит, и при F9, и если просо запустить 'exe':
try begin Table1.Post; ShowMessage('Данные о точке '+DBEdit13.Text+' записаны'); DBEdit13.Visible:=false; ComboToch.ListSource.DataSet.Active :=false; ComboToch.ListSource.DataSet.Active :=true; ComboToch.Visible:=true; Form2.ActiveControl:=Form2.ComboToc h; end except On E:EDatabaseError do begin e.message:='Такая точка уже существует!'; messageDlg(e.message, mtError,[mbOK],0); end end; А вот здесь вылетает и на F9, и если просто запустить: try begin QueryIns.SQL.Clear; QueryIns.SQL.Add('INSERT INTO доход(Точка,Дата,Сумма) '); QueryIns.SQL.Add('VALUES ("'+TochkaName+'",#'+newDate+'#,'+S um+')'); QueryIns.ExecSQL; end except On E:EDatabaseError do begin e.message:='Такая точка уже существует!'; messageDlg(e.message, mtError,[mbOK],0); end end; В чем разница??? |
01.06.2007, 03:17 | #6 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
ну видимо у тебя в QueryIns.ExecSQL; возникает ошибка...
|
01.06.2007, 09:14 | #7 |
Регистрация: 31.05.2007
Сообщений: 9
|
Ругается именно на нарушение уникальности. То есть, если запись новая, то запрос работает.
|
01.06.2007, 09:20 | #8 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
ну смотри или структуру таблицы (мож там с ограничениями че намудрил) или данные, которые вводишь...
|
01.06.2007, 13:10 | #9 |
Регистрация: 31.05.2007
Сообщений: 9
|
В таблице всего 3 поля, 2 из них ключевые. Ввожу новую строку-все нормально, ту же самую - вылетает. Это, крнечно, понятно, но мне же надо, чтоб красиво обрабатывалось, чтоб пользователю нормальное сообщение выдавалось.
|
01.06.2007, 13:22 | #10 |
Форумчанин
Регистрация: 15.02.2007
Сообщений: 183
|
попробуй компилятор отключить
Знать все невозможно, в силу того, что жить бы стало неинтересно.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как работает win rar? | Altera | Свободное общение | 2 | 30.03.2008 08:05 |
не работает! | RECREATOR | Общие вопросы Delphi | 6 | 29.11.2007 12:42 |
не работает glColorTable | n01z | Компоненты Delphi | 0 | 20.11.2007 18:31 |
Цикл не работает...? | Иринкаа | Помощь студентам | 6 | 17.11.2007 00:27 |