Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.08;
Скачать: CL | DM;

Вниз

Исключения   Найти похожие ветки 

 
Loco   (2002-07-14 16:18) [0]

Приветствую всех! :))
Подскажите, если не сложно, проблема такова:
При активации формы добавляется запись в таблицы (вызывается метод 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;



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

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


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

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


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

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


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


> IlyaA (15.07.02 08:39)


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


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

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2002.08.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
14-24183
^Sanya
2002-07-08 00:11
2002.08.08
Почём нынче лицензионное Delphi? (5,6)


3-23890
Andrew_
2002-07-16 16:34
2002.08.08
Работа с CLOB-полем в Oracle


1-23988
ACR
2002-07-27 00:28
2002.08.08
FastDIB в Builder


3-23887
AFROLOV
2002-07-16 15:22
2002.08.08
Как изменить порядок отображения записей в DBGRID


3-23886
Rustik
2002-07-17 11:05
2002.08.08
Проблема с обновлением данных в гриде при вставке новых строк