pkbasu

Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Спасибо большое за помощь, YuriyRR. Вы меня пнули в верном направлении. Я за основу взял вашу идею с обработкой ошибок (DoRase := true;), но всё остальное оставил прежним (в плане обработка исключений ввода и вывод сообщений об ошибках с указанием на что обратить внимание пользователю). Исходники всего проекта и методанные БД на rghost.ru: пароль стандартный. Исходники ЗДЕСЬ: 4,77 КиБ (7-zip 9.20: LZMA2) Пример, как сделать "удобнее" работу пользователя при вводе данных в cxGrid: не терять данные, есть возможность доредактировать данные и повторно отослать дополненное/измененное в текущей строке ввода cxGrid. Отказался от индивидуальных обработчиков ошибок, привязанных к конкретному TpFIBDataSet, т.к. неудобно, когда в проекте больше 30 таких DataSet (в модуле получается винегрет из обработчиков с выводом сообщений -- центральный куда проще изменять: не надо по проекту туда-сюда ползать и редактировать кусочками): Код: procedure qryStatementEditError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); procedure qryStatementLockError(DataSet: TDataSet; LockError: TLockStatus; var ErrorMessage: String; var Action: TDataAction); procedure qryStatementPostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); procedure qryStatementUpdateError(DataSet: TDataSet; E: EFIBError; UpdateKind: TUpdateKind; var UpdateAction: TFIBUpdateAction); procedure qryStatementGetRecordError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); procedure qryStatementDeleteError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); | Изменил FIB`овский центральный обработчик исключений/ошибок: Код: procedure TfmMain.ehSTATEMENTFIBErrorEvent(Sender: TObject; ErrorValue: EFIBError; KindIBError: TKindIBError; var DoRaise: Boolean); var ... DoRaise := true; // сообщаем компонентам, что возникло исключение // таким образом, блокируем смену фокуса ввода с текущей редактируемой строки в cxGrid Abort; // глушим идущий от FIB`ов вывод пользователю системного сообщения об исключении // есть вероятность, что поведение с вызовом Abort зависит от версии FIB`ов, // т.е. решение больше похоже на грязный хак end; //procedure TfmMain.ehSTATEMENTFIBErrorEvent | Важное замечание с крайним Abort, т.к. возможно решение похоже на "грязный хак", и завязано на конкретную версию фибов с конкретным алгоритмом поведения при обработке данных от центрального обработчика ошибок. В комментариях написано для чего Abort: подавить вывод сообщения об ошибке от ядра FIB (мы своё сообщение вывели, удобоваримое для понимания пользователем). З.Ы. Генерировать исключение (exceptions) на серверной стороне не стал, т.к. плохо пока с этим знаком и пока остановился на более простом варианте (простом в плане изменений в текущем проекте). На будущее почитаю какой выигрыш дает генерация исключения на серверной стороне. Еще раз спасибо :) | Всего записей: 36 | Зарегистр. 18-06-2009 | Отправлено: 18:46 28-09-2011 | Исправлено: pkbasu, 18:49 28-09-2011 |
|