On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 59
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 09.04.16 16:34. Заголовок: Internal Error


Я использую LetoDB на 10 различных инсталляций (5-20 клиент). Все работает отлично, но у меня есть одна проблема.Периодически (примерно 1-3 раз в день) программа выдает ошибку на одной из команд, которые имеют доступ к базе данных: SKIP, LOCATE, RecNo()...

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


Ошибка всегда одинакова, но это происходит в разных местах в программе. Проблема в клиенте, так как сервер не сообщает о каких-либо нарушений. Появляется в нескольких местах в программе. Код очень прост во всех местах, например:

USE ModAct
LOCATE FOR Trim(m_mod) == "APP"

Это происходит на разных машинах, различных антивирусных программ ...Чаще бывает на машинах Windows XP.

LetoDB.ini:
Default_Driver = NTX
EnableFileFunc = 1
Optimize = 1
Share_tables = 0

Есть ли у вас какие-либо предложения?

Большое спасибо,

Ненад

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 9 [только новые]


Администратор




Пост N: 3425
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.04.16 08:10. Заголовок: Такие ошибки искать ..


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


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 61
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 11.04.16 17:54. Заголовок: Буду изменять части ..


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

спасибо

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 64
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 13.04.16 03:59. Заголовок: Что это значит ошибк..


Что это значит ошибка на сервере (letodb_0.log):

26.03.16 14:17:31: Error DBFNTX/1001  Open error: e:\podaci\App\SEMAPHOR.DBF


Конечно, этот файл существует.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 65
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 21.04.16 18:41. Заголовок: Я нашел место, где п..


Я нашел место, где произошла ошибка. Эта функция возвращает номер:

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


Эта функция вызывается в основной программе:

USE Programs NEW 

oTB := TBrowseDB (...)
TB:addColumn (TBColumnNew ("Stat", { || IIF (TekPrg() == p_id, "<", " ") } ))
...


Эта программа часто дает ошибку на команды LOCATE. Когда я изменил программу, ошибка не происходит:

USE Programs NEW 
nTekPrg := TekPrg()

oTB := TBrowseDB ()
TB:addColumn (TBColumnNew ("Stat", { || IIF (nTekPrg == p_id, "<", " ") } ))


Это, вероятно, ошибка в LetoDB.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 946
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.04.16 12:35. Заголовок: nbatocanin пишет:Это..


nbatocanin пишет:
 цитата:
Это, вероятно, ошибка в LetoDB


это ваша ошибка:
 
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


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 66
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 23.04.16 05:08. Заголовок: это ваша ошибка: ..



 цитата:
это ваша ошибка:

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:

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; (*)


В случае ошибки команды (*) не выполняются. Сервер не сообщает никакой ошибки, поэтому я думаю, что проблема с клиентом.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 955
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.04.16 08:22. Заголовок: nbatocanin А если в..


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 ?


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 67
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 23.04.16 17:22. Заголовок: Пробовал, но я не мо..


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

Ошибка в которой мы говорим появляется чаще, чем другие (Win Server 2003). Например, вчера появился десять раз подряд. Но сегодня это не так :(

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 72
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 11.05.16 18:32. Заголовок: Я пробовал разные ва..


Я пробовал разные варианты:

не работает:
USE ModArt NEW
GO TOP
SKIP // Internal err

работает!!
USE ModArt NEW
GO TOP
Browse()
SKIP

работает!!
USE ModArt NEW
SKIP

Очевидно, что есть некоторая проблема с GO TOP.

Спасибо за любую помощь.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 675
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет