Здраствуйте. Может кто нибудь сталкивался со следующей проблемой. Есть две программы, которые успешно работают под Firebird 2.1.0.15692 Alfa 1. Работает в реальных условиях уже с момента появления Альфы 1. Почему говорю о двух программах, потому, что код в котором возникают проблемы одинаков, а одна работает а в другой проблемы. Я понимаю всю нелепость такаго описания, однако:
Попытался запустить из под Firebird 2.1.0.16102 Beta 1 (на предыдущих 2-х бетах такой же результат). Базы данных пробывал востанавливал, как рестором так и через скрипт. Одна программа работает без проблем, а вот со второй следующие проблемы: Программа выдает ошибку следующего содержания: Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements. Message length error (encountered 4, expected 28). На предыдущих бета версиях возникала ошибка(точно сейчас непомню), что то типа, что потерян хендл транзакции, а далее сообщала об ошибке в fibclient.dll. Версии клиента всегда соответствовали версии сервера. Честно говоря, времени детально разбираться не было, займусь позже, как появится время. Откатил все назад, сроки поджимают. Навскидку удалось установить, что программа вылетает на следующем коде ниже (if( DM->DostupFnYes(270, false) > 0)/ ************************************************/): Перед формой TBirtdDay_Fm функции DM->DostupFnYes вызываются нормально, после воникает ошибка. Если форму TBirtdDay_Fm убрать, все равно ошибка возникнет позже. //--------------------------------------------------------------------------- void __fastcall TMainFm::FormShow(TObject *Sender) { TCursor Save_Cursor = Screen->Cursor; Screen->Cursor = crHourGlass; // I?iaa?ea ia iaee?ea iaiiaeaiee UpdateProgram(this); MNSpravka->Enabled = DM->DostupFnYes(20, false); PlastikCartMN->Visible = DM->DostupFnYes(193, false); MNSprService->Enabled = DM->DostupFnYes(70, false); FinToolBtn->Visible = DM->DostupFnYes(190, false); TBirtdDay_Fm *BirtdDay_Fm = new TBirtdDay_Fm(this); BirtdDay_Fm->ShowModal(); delete BirtdDay_Fm; if( DM->DostupFnYes(270, false) > 0)/ ************************************************/ { TMsgDepozitFm *MsgDepozitFm = new TMsgDepozitFm(this); MsgDepozitFm->ShowModal(); delete MsgDepozitFm; }//if( DM->DostupFnYes(1) > 0) ... Screen->Cursor = Save_Cursor; } Функция в которой ошибка ниже: bool __fastcall TDM::DostupFnYes( int iCodFn, bool bMsg = true ) { Screen->Cursor = crHourGlass; bool bResult; AnsiString sSql = "select * from GET_PRAVA_USER_FN ("+ IntToStr(iCodFn) +")"; if(FIBDb->QueryValue(sSql, 0) > 0) bResult=true; else { if( bMsg == true) { .... bResult=false; } Screen->Cursor = crDefault; return bResult; } а именно ошибка возникает тогда, когда вызывается следующая функция FIBDb->QueryValue(sSql, 0) Но главная странность в том, что несколько первых вызовов эта функция отрабатывает нормально. Пробовал с компонентами FibPlus 4.5 и FibPlus 4.7. Но мне кажется, что проблема в сервере, а не в FibPlus, или в программе, хотя кто знает. Ниже приведен лог SQL монитора, из которого видно, что функция неотработала на 6-й раз [19.07.2007 19:24:22]: [Execute] select * from GET_PRAVA_USER_FN (270) Первые 5-ть раз функция отработала нормально. Лог SQL монитора. . [19.07.2007 19:24:15] FIBDb: [Connect] [19.07.2007 19:24:15] FIBTrR: [Start transaction](1461) [19.07.2007 19:24:16] : [Execute] select * from GET_PRAVA_USER_FN (1) Execute tick count 0 [19.07.2007 19:24:16] FIBTrW: [Start transaction](1462) [19.07.2007 19:24:16] TmpFIBQry: [Execute] INSERT INTO LOG_TABLE ( ID, MSG) VALUES ( NULL, :MSG) MSG = 'Запуск программы' Rows Affected: 1 Execute tick count 0 [19.07.2007 19:24:16] FIBTrW: [Commit (Hard commit)](0) [19.07.2007 19:24:16] : [Execute] select * from GET_PRAVA_USER_FN (20) Execute tick count 0 [19.07.2007 19:24:16] : [Execute] select * from GET_PRAVA_USER_FN (193) Execute tick count 0 [19.07.2007 19:24:16] : [Execute] select * from GET_PRAVA_USER_FN (70) Execute tick count 0 [19.07.2007 19:24:16] : [Execute] select * from GET_PRAVA_USER_FN (190) Execute tick count 15 [19.07.2007 19:24:19] VipiskaQr.SelectQuery: [Execute] SELECT ID, ID_XXI, ID_XXI_0, DATA, SUMMA, NO_DOC, NAZNACHENIE, KONTRAGENT, BANK_KONTRAGENTA, KONTRAGENT_INN, KONTRAGENT_ACCOUNT, BIC_BANK_KONTRAGENT, DEBET, KREDIT, OSTATOK FROM KLIENT_ACCOUNT_PROVODKI_S(:ID_ACCOUNT, :BEG_DATE, :END_DATE) ID_ACCOUNT = <NULL> BEG_DATE = '18.07.2007' END_DATE = '20.07.2007' Execute tick count 0 [19.07.2007 19:24:22] : [Execute] select * from GET_PRAVA_USER_FN (270) Execute tick count 32 [19.07.2007 19:24:22] : [Execute] Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements. Message length error (encountered 4, expected 28). [19.07.2007 19:24:22] FIBTrR: [Rollback](0) [19.07.2007 19:24:24] : [Start transaction](1467) [19.07.2007 19:24:24] : [Execute] select NAME from GET_CURRENT_USER_NAME Execute tick count 16 [19.07.2007 19:24:24] : [Commit (Hard commit)](0)