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

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

Исключения [D6, Paradox]


Loco ©   (2002-07-14 16:18:00) 

Приветствую всех! :))
Подскажите, если не сложно, проблема такова:
При активации формы добавляется запись в таблицы (вызывается метод append); при закрытии, для сохранения изменений, метод post. Так вот при закрытии порождается исключение следующего содержания:
Project XXX.exe raised exception class EDatabaseError with message"work: Dataset not in edit or insert mode" Process stopped. Use step or Run to continue.
Кто знает как исправить, подскажите, plizzzzz!

код:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.person.post;
DM.work.post;
DM.doc.post;
DM.kontakt.post;
DM.sobstv.post;
mainmCred.Form1.Visible:=True;
end;

procedure TForm2.FormActivate(Sender: TObject);
begin
mainmCred.form1.Visible:=False;
DM.work.append;
DM.kontakt.append;
DM.doc.append;
DM.sobstv.append;
DM.person.append;
end;


kaif   (2002-07-17 02:19:00) [1]

А сетка (DBGrid) на форме имеется? У нее есть такое свойство (в Options, кажется) - CancelOnExit. Возможно, при смещении фокуса ввода с сетки на кнопку Close происходит автоматический вызов DataSet.Cancel и тогда исключительная ситуация при Post неизбежна.
А вообще Podgoretsky прав. Лучше так не делать. То есть можно так делать, но только для модальной формы.


Lucypher   (2002-07-17 00:23:00) [2]

> Lord Warlock
Это тонкости, которые, насколько я помню одинаково правильны... :)

>Loco
проблема, действительно где-то между OnActivate (кстати, а почему не OnCreate?) и OnClose.


Lord Warlock   (2002-07-15 09:10:00) [3]


> IlyaA (15.07.02 08:39)


наверное имелось в виду
if Table.State in [dsInsert,dsEdit] then
Table.Post;


IlyaA   (2002-07-15 08:39:00) [4]

Возможно, что после вставки в какую-то из твоих таблиц ты сместил в ней указатель (перешёл на др. запись), после чего автоматически вызвался метод Post.
Тогда тебе надо писать
if (Table.State=stInsert) or (Table.State=stInsert) then
Table.Post;


Loco   (2002-07-14 17:09:00) [5]

2Anatoly Podgoretsky
А по какому событию лучше сделать, а ошибка, как я понимаю при вызове post.


Anatoly Podgoretsky   (2002-07-14 16:53:00) [6]

Очень неожиданное применение OnCreate и OnActivate, второе просто нельзя использовать для данной цели, так как может вызываться более одного раза
Но если не брать во внимание вышесказанное, то стоит отметить в приведенном коде ошибка не наблюдается, ошибка где то за пределами этого кода.


Наверх

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