Форум » LetoDB, HbNetio. » Internal Error » Ответить

Internal Error

nbatocanin: Я использую LetoDB на 10 различных инсталляций (5-20 клиент). Все работает отлично, но у меня есть одна проблема.Периодически (примерно 1-3 раз в день) программа выдает ошибку на одной из команд, которые имеют доступ к базе данных: SKIP, LOCATE, RecNo()... [pre2]Application Internal Error - D:\wings\App\app.exe Terminated at: 2016.04.06 14:47:37 Unrecoverable error 6005: Exception error: Exception Code:C0000005 Exception Address:77BD2AE4 EAX:01F62000 EBX:003DEC68 ECX:01F61FE5 EDX:00000043 ESI:003D3B90 EDI:00000064 EBP:0022F498 CS:EIP:001B:77BD2AE4 SS:ESP:0023:0022F478 DS:0023 ES:0023 FS:003B GS:0000 Flags:00010202 CS:EIP: 8A 10 40 84 D2 75 F9 2B C1 89 45 E4 8D 45 10 50 SS:ESP: 01F61FE4 77E72741 01F61FE4 00000049 002F000E 033B0025 000407E0 000E0006 008A4352 004185EE 01F61FE4 008A4352 0022F4E4 FFFFFFFF 017F1CEC 00000000 C stack: EIP: EBP: Frame: OldEBP, RetAddr, Params... 77BD2AE4 0022F498 008A4352 004185EE 01F61FE4 008A4352 0022F4E4 FFFFFFFF 017F1CEC 00000000 0022F59C 004A2E2C Modules: 0x00400000 0x00ACB000 D:\wings\App\app.exe 0x7C800000 0x000C3000 C:\WINDOWS\system32\ntdll.dll 0x77E40000 0x00104000 C:\WINDOWS\system32\kernel32.dll 0x7D1E0000 0x0009C000 C:\WINDOWS\system32\ADVAPI32.DLL 0x77C50000 0x000A1000 C:\WINDOWS\system32\RPCRT4.dll 0x76F50000 0x00013000 C:\WINDOWS\system32\Secur32.dll 0x762B0000 0x00049000 C:\WINDOWS\system32\COMDLG32.DLL 0x77BA0000 0x0005A000 C:\WINDOWS\system32\msvcrt.dll ... Called from __DBLOCATE(0) Called from TEKPRG(0) in PROG.PRG Called from (b)PROGSEL(0) in PROG.PRG Called from TBROWSE:DOCONFIGURE(0) in ../../../tbrowse.prg Called from APP:EXECUTE(0) in oapp.prg Called from MAIN(0) in app.prg [/pre2] Ошибка всегда одинакова, но это происходит в разных местах в программе. Проблема в клиенте, так как сервер не сообщает о каких-либо нарушений. Появляется в нескольких местах в программе. Код очень прост во всех местах, например: USE ModAct LOCATE FOR Trim(m_mod) == "APP" Это происходит на разных машинах, различных антивирусных программ ...Чаще бывает на машинах Windows XP. LetoDB.ini: Default_Driver = NTX EnableFileFunc = 1 Optimize = 1 Share_tables = 0 Есть ли у вас какие-либо предложения? Большое спасибо, Ненад

Ответов - 9

Pasha: Такие ошибки искать сложнее всего. __dbLocate вызывает стандартный метод waLocate из rdd workarea. Этот метод вызывает методы letoGotop и letoSkip rdd LETO. То есть, используются только операции gotop и skip из rdd LETO, возможно еще goto. Что может в этих операциях глючить - не могу сказать, они же давно вылизаны.

nbatocanin: Буду изменять части программы где ошибки случаются, может быть, я буду получать больше информации. спасибо

nbatocanin: Что это значит ошибка на сервере (letodb_0.log): [pre2]26.03.16 14:17:31: Error DBFNTX/1001 Open error: e:\podaci\App\SEMAPHOR.DBF[/pre2] Конечно, этот файл существует.


nbatocanin: Я нашел место, где произошла ошибка. Эта функция возвращает номер: [pre2]FUNC TekPrg LOCAL nRet := NIL, Sel Sel := Select() USE ModAct NEW LOCATE FOR Trim(ma_mod) == "APP" // <--- IF Found() nRet := ma_id END IF CLOSE ModAct SELECT (Sel) RETURN nRet [/pre2] Эта функция вызывается в основной программе: [pre2]USE Programs NEW oTB := TBrowseDB (...) TB:addColumn (TBColumnNew ("Stat", { || IIF (TekPrg() == p_id, "<", " ") } )) ... [/pre2] Эта программа часто дает ошибку на команды LOCATE. Когда я изменил программу, ошибка не происходит: [pre2]USE Programs NEW nTekPrg := TekPrg() oTB := TBrowseDB () TB:addColumn (TBColumnNew ("Stat", { || IIF (nTekPrg == p_id, "<", " ") } )) [/pre2] Это, вероятно, ошибка в LetoDB.

SergKis: nbatocanin пишет:Это, вероятно, ошибка в LetoDB это ваша ошибка:[pre2] FUNC TekPrg LOCAL nRet := NIL, Sel // надо 0 или -1 Sel := Select() USE ModAct NEW LOCATE FOR Trim(ma_mod) == "APP" // <--- IF Found() nRet := ma_id // или тут ELSE nRet := 0 END IF CLOSE ModAct SELECT (Sel) RETURN nRet [/pre2]

nbatocanin: это ваша ошибка: FUNC TekPrg LOCAL nRet := NIL, Sel // надо 0 или -1 Sel := Select() USE ModAct NEW LOCATE FOR Trim(ma_mod) == "APP" // <--- IF Found() nRet := ma_id // или тут ELSE nRet := 0 END IF CLOSE ModAct SELECT (Sel) RETURN nRet Почему? NIL == p_id работает и возвращает FALSE. Но, эта функция не является проблемой (TekPrg() является более сложным, но я упростил ее из-за этого случая). Ошибка (Unrecoverable error 6005: Exception error) возникает в команде: LOCATE FOR Trim(ma_mod) == "APP" При включении Debug = 10: [pre2]open_i;2;App\PROGRAMS; goto;2;-1;programs;A; goto;2;-1;programs;A; skip;2;1;3;programs;A; setf;2;AScan ({2112,2113,2118,2123,2124}, p_id) <> 0; goto;2;-1;programs;A; goto;2;3;programs;A; goto;2;-1;programs;A; skip;2;1;3;programs;A; open;/App\ModAct;ModAct;TF;; goto;3;-1;;A; skip;3;1;1;;A; (*) close;3; (*) [/pre2] В случае ошибки команды (*) не выполняются. Сервер не сообщает никакой ошибки, поэтому я думаю, что проблема с клиентом.

SergKis: nbatocanin А если вместо LOCATE FOR Trim(ma_mod) == "APP" использовать GO TOP nRet := 0 DO WHILE ! EOF() If Trim(ma_mod) == "APP" nRet := ma_id EXIT EndIf SKIP ENDDO будет Internal Error ?

nbatocanin: Пробовал, но я не могу генерировать ошибку. Ошибка возникает периодически (иногда 1-3 раза в день) в различных местах в программе, только на некоторых машинах (как правило, XP). Это всегда происходит в какой-то из команд RecNo(), SKIP, LOCATE, SEEK... Ошибка в которой мы говорим появляется чаще, чем другие (Win Server 2003). Например, вчера появился десять раз подряд. Но сегодня это не так :(

nbatocanin: Я пробовал разные варианты: не работает: USE ModArt NEW GO TOP SKIP // Internal err работает!! USE ModArt NEW GO TOP Browse() SKIP работает!! USE ModArt NEW SKIP Очевидно, что есть некоторая проблема с GO TOP. Спасибо за любую помощь.



полная версия страницы