C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как отменить событие Post
Kelf
Отправлено: 14.08.2005, 00:02


Не зарегистрирован







Есть связка pIBDataBase->pIBDataSet->Datasource->DBGridEh прюс 2 транзанкции. Настроены как написано тут. Работает все отлично, но при вставке новой записи или после редактирования, при переходе на другую запись автоматически происходит POST и если одно поле остается пустое, то вылетает ошибка так как поле описано 'notnull'.
В событии BeforePost() делаю проверку, и если поле пустое выдается сообщение пользвателю.
Как предотвратить POST и вернуть пользователя в редактируюмую запись?
Метод Cancel() для DataSet не работает, говорит что не в режиме Insert или Edit.
ONik
Отправлено: 14.08.2005, 23:31


Ученик-кочегар

Группа: Участник
Сообщений: 4



Делай так
CODE

void __fastcall TForm1::Table1BeforePost(TDataSet *DataSet)

{
 if ("поле пусто")
   Abort();
}

Это работает
Или не пользуйся компонентами DB***, а забирай из обычных Edit и т.п.
Guest
Отправлено: 15.08.2005, 13:09


Не зарегистрирован







Правильно насчет Abort() и предварительной редактирования/проверки
данных в обычных компонентах типа TEdit но все таки странно, что у
вас:
QUOTE

Метод Cancel() для DataSet не работает, говорит что не в режиме Insert или Edit.


потому как если мы проверим -
CODE

//---------------------------------------------------------------------------
void __fastcall TForm1::pFIBDataSet1BeforePost(TDataSet *DataSet)
{
     if(DataSet->State == dsInsert || DataSet->State == dsEdit)
     ShowMessage("dsEdit or dsInsert");
}
//---------------------------------------------------------------------------


то событие покажет, что мы находимся в режиме редактирования
или вставки.

Вернуться в Работа с базами данных в C++Builder