Мое приложение использует QuantumGrid (v6.56) и TSimpleDataSet в качестве источника данных.
Проблема: возникает исключение, если пользователь вводит нечисловое значение в числовое поле. Код не достигает обработчика OnBeforePost.
Как приложение может перехватить ошибку (и отобразить сообщение пользователю), если исключение выдается до OnBeforePost?
Трассировки стека:
exception class : EDatabaseError
exception message : '...' is not valid Integer value for Field <somefieldname>
main thread ($504):
00526c7e +082 EditBooking.exe DB DatabaseError
00526d0f +04b EditBooking.exe DB DatabaseErrorFmt
0052c428 +07c EditBooking.exe DB TIntegerField.SetAsString
0052af30 +00c EditBooking.exe DB TField.SetText
0052abf9 +021 EditBooking.exe DB TField.SetEditText
007c3a3f +053 EditBooking.exe cxDBData
007e14a8 +018 EditBooking.exe cxGridDBDataDefinitions TcxGridDBDataController.UpdateData
006f8159 +039 EditBooking.exe cxCustomData TcxCustomDataProvider.DoUpdateData
007c1c18 +008 EditBooking.exe cxDBData TcxDBDataLink.UpdateData
0053325d +021 EditBooking.exe DB TDataLink.UpdateRecord
005333f8 +0d8 EditBooking.exe DB TDataLink.DataEvent
007c1683 +00f EditBooking.exe cxDBData TcxDBDataLink.DataEvent
00533973 +03f EditBooking.exe DB TDataSource.NotifyLinkTypes
005339a2 +01e EditBooking.exe DB TDataSource.NotifyDataLinks
005339cf +023 EditBooking.exe DB TDataSource.DataEvent
005392ad +131 EditBooking.exe DB TDataSet.DataEvent
00553d7c +058 EditBooking.exe DBClient TCustomClientDataSet.DataEvent
00539396 +042 EditBooking.exe DB TDataSet.UpdateRecord
0053a356 +006 EditBooking.exe DB TDataSet.Post
0055677c +054 EditBooking.exe DBClient TCustomClientDataSet.Post
OnUpdateData
событие источника данных, находящегося между набором данных и сеткой? - person Sertac Akyuz   schedule 10.08.2011OnSetText
(как в моем удаленном ответе) не зависит от метода публикации. Это должно работать, даже если сетка время от времени решит публиковать сообщения сама по себе. Во всяком случае, для TDBNavigator вы можете легко поставить обработчик для событияBeforeAction
и проверить там значение (если «Кнопка» — это «nbPost») и прервать, если необходимо. - person Sertac Akyuz   schedule 11.08.2011