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");
}
//---------------------------------------------------------------------------
|
то событие покажет, что мы находимся в режиме редактирования
или вставки.
|
|