Автор | Сообщение |
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 13.06.06 22:30. Заголовок: Странные ошибки !
Не стого ни с сего возникают непредсказуемые ошибки при компиляции кода . Траблы заключаются в том что компилятор выкидывает на совершенно нормальных строках ошибки вроде неправильного синтаксиса и т д . Странно - но куски кода уже не менялись там несколько лет . Собственно что-то в модуле правлю - но не там где ошибка .... Выгружаю из памяти NG.EXE - и всё становится нормально . Код ЕХЕшника уже под 1 мег . Блинкер 7 CLIPPER 5.3 .... Что скажут ГУРУ ? Следующая ошибка - уже видно где-то я недосмотрел или не дочитал : Есть индекс CDX и вот иногда (пока не выяснил) выскакивает что-то вроде - "повреждены данные" .... это когда пытаюсь изненить какое-то поле - например логическое значение ...
|
|
|
Новых ответов нет
, стр:
1
2
3
All
[см. все]
|
|
|
| |
Пост N: 278
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.06.06 07:47. Заголовок: Re:
|
|
|
|
| |
Пост N: 39
Зарегистрирован: 30.05.05
|
|
Отправлено: 14.06.06 10:49. Заголовок: Re:
Это ерунда! Вот когда начнет писать memory overbloker, тогда придеться помучиться: дробить PRG, уменьшать количество definoв, задавать rmakeу дополнительные параметры /XS /XW....
|
|
|
|
| |
Пост N: 23
Зарегистрирован: 27.04.06
|
|
Отправлено: 14.06.06 11:42. Заголовок: Re:
... или отправиться к xHarbour, как Patric Виталий, "повреждены данные": подробнее: система, сеть, среда...
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 14.06.06 14:55. Заголовок: Re:
saulius Могу скинуть на мыло кусочек кода с описанием - может поможешь ? А ошибка - _DBFCDX/8006 - Обнаружено разрушение данных . Вкратце : && Так я организую индексный файл USE "JROPT" ALIAS "LANJROPT" && Открыли журнал ОПТОВЫХ ПРОДАЖ INDEX ON CODE TAG CODE TO ("LANJROPT") FOR !DELETED() && код товара INDEX ON DATEP TAG DATEP TO ("LANJROPT") FOR !DELETED() && дата продажи INDEX ON OPTCODE TAG OPTCODE TO ("LANJROPT") FOR !DELETED() && код оптовика INDEX ON DATEP TAG DATEPU TO ("LANJROPT") FOR !DELETED() UNIQUE && все даты продаж (для быстрого меню ДАТЫ) INDEX ON OPL TAG OPL TO ("LANJROPT") FOR !DELETED() && Олачено/нет INDEX ON STR(OPTCODE,5,0)+DTOC(DATEP) TAG DPROD TO ("LANJROPT") FOR !DELETED() UNIQUE && все уникальные даты для каждого клиента - для меню КЛИЕНТ->ДАТА INDEX ON X_KASSE TAG XKASSE TO ("LANJROPT") FOR !DELETED() && номера кассовых чеков INDEX ON OPTCODE TAG OPTNEOPL TO ("LANJROPT") FOR (!DELETED() .AND. !OPL ) && по кодам клиентов только НЕОПЛАЧЕННОГО ТОВАРА SET INDEX TO ("LANJROPT") ********************************** && Убиваю стандартный обработчик ошибок bErrorHandler:={|oError| MyError(oError) } bLastHandler:=ERRORBLOCK(bErrorHandler) SELECT TABLE && Тут у нас список товара на оплату && CODE:N:6 - код товара && DAT:D:8 - дата продажи GO TOP DO WHILE !EOF() && пробегаем по списку на оплату S_C:=CODE && Код товара S_D:=DAT && Дата SELECT LANJROPT SET ORDER TO SET ORDER TO TAG OPTCODE && На индекс КЛИЕНТЫ SET SCOPE TO (KLIENT) && Видим только нужного GO TOP DO WHILE !EOF() && Пробегаем по данным нашему клиенту && МЕТКА-1 IF DATEP=S_D .AND. CODE=S_C .AND. !OPL .AND. OPTCODE=KLIENT && товар соответствует ?? RLOCK() NEOPL:=(KOL*CENA)-SUMOPL && Неоплаченная сумма для этой детали XX:=OST_DEN-NEOPL IF XX<0 && Денег на оплату меньше, чем нужно REPLACE LANJROPT->OPL WITH .F. && признак что не до конца оплачен REPLACE DOPL WITH DATE() && дата оплаты REPLACE SUMOPL WITH SUMOPL+OST_DEN && прибавляем денюжки к тому что уже могло быть New_OPL:=New_OPL+OST_DEN && Сумма уже разнесенная OST_DEN:=0 && Нет больше денег DBUNLOCK() ELSE && Денег на оплату этой позиции хватает && Проверяем нужно-ли оплачивать полностью или нет REPLACE DOPL WITH DATE() && Дата оплаты DOB:=(KOL*CENA)-SUMOPL && Добавленная сумма REPLACE SUMOPL WITH SUMOPL+DOB OST_DEN:=OST_DEN-DOB && Уменьшим остаток денег на сумму добавленных денег New_OPL:=NEW_OPL+DOB && Добавили сумму на сумму добавленных денег && МЕТКА-2 REPLACE LANJROPT->OPL WITH .T. && Признак что эта позиция оплачена полностью ENDIF EXIT && раз этот товар проплатили && значит нефиг искать дальше ENDIF SELECT LANJROPT && Ищем дальше SKIP ENDDO SELECT TABLE && Следующая деталька на оплату SKIP ENDDO ************************* вот тут если в алиасе LANJROPT сделать какие-либо движения (SKIP,GO TOP , DBCLOSEAREA()...) - возникает ошибка : _DBFCDX/8006 Обнаружено разрушение данных:OPL Я предполагаю что когда вошли в оплату (МЕТКА-1) по условию : !OPL - тоесть признак что товар не оплачен - а затем в теле делаем изменение этого флага (МЕТКА-2) и вываливается .
|
|
|
|
| |
Пост N: 279
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.06.06 15:54. Заголовок: Re:
Pager пишет: тогда как это объяснить ? Виталий пишет: цитата: | Выгружаю из памяти NG.EXE - и всё становится нормально |
|
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 14.06.06 17:07. Заголовок: Re:
Видать что-то там в памяти мешает - может переменные какие "накладываются" ? Но это ошибки скорее системные . Меня интересует тема - как убрать [ОШИБКА _DBFCDX/8006 ]?
|
|
|
|
| |
Пост N: 60
Зарегистрирован: 28.06.05
|
|
Отправлено: 14.06.06 17:29. Заголовок: как убрать
1. после создания CDX ОБЯЗАТЕЛЬНО закрыть DBF - это относится ко всем CDX-драйверам 2. CDX в 5.3 кривые. лучше пользовать 5.2e + Six (или xHarbour)
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 14.06.06 21:02. Заголовок: Re:
Попробую - но вроде я так и делаю ! Дело в том что создание индекса - рано утром при первом пуске .... да и другие станции в сети НИЧЕГО не создают - а все равно вылетает . И именно при изменении ЛОГИЧЕСКОГО поля ....
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 14.06.06 21:04. Заголовок: Re:
А дрова у меня не DBFCDX а именно COMIX : _DBFCDX
|
|
|
|
| |
Пост N: 24
Зарегистрирован: 27.04.06
|
|
Отправлено: 14.06.06 23:37. Заголовок: Re:
Виталий, в ветке ELSE (где МЕТКА-2) невижу DBUNLOCK()
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 15.06.06 09:49. Заголовок: Re:
Я просто порезал текст - там действительно небыло DBUNLOCK() . Я поставил - всё равно "ошибается" ! Блин - надоело мне заглушки выставлять на ERROR ! Стек жрёт !
|
|
|
|
|
| |
Пост N: 61
Зарегистрирован: 28.06.05
|
|
Отправлено: 15.06.06 12:12. Заголовок: Re:
а строить индекс по DTOC - неправильно. надо пользовать DTOS _Date_Format_ меняется - и кирдык. UNIQUE индексы также неприменимы (обсуждалось уж на форуме).
|
|
|
|
| |
Пост N: 25
Зарегистрирован: 27.04.06
|
|
Отправлено: 15.06.06 13:11. Заголовок: Re:
Виталий, Можно сделать кусок программы и локально получить стабильную ошибку ? Надо выяснить суть проблеммы. Какие заглушки ?
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 15.06.06 14:06. Заголовок: Re:
Заглушки - это в смысле перехват ошибок на процедуру польщователя ... Кстати а что там про UNIQUE ??? Неприменимы в смысле когда ? Если вместе с логическим полем (составной индекс) или как ? По поводу построения DTOC-DTOS - у меня в программе формат ДАТЫ не меняется .... извините - 10 лет работает
|
|
|
|
| |
Пост N: 62
Зарегистрирован: 28.06.05
|
|
Отправлено: 15.06.06 14:45. Заголовок: про UNIQUE - это пора в FAQ, однако
PROC main FIELD qq dbCreate( "test1", {{'qq','C',10,0}}) use test1 aEval( Array(5),{|_1,_2| _1 := StrZero(_2,10), ; __dbAppend(), Field->qq := _1, ; __dbAppend(), Field->qq := _1 }) index on qq to test1 UNIQUE FOR !DELETED() dbGoTop() dbDelete() // удаляю запись 1 (qq == '0000000001') // замечу, что есть запись 2 (qq == '0000000001') dbEval({|| QOut(Field->qq) }) // где '0000000001' от 2-й записи? return
|
|
|
|
| |
Пост N: 63
Зарегистрирован: 28.06.05
|
|
Отправлено: 15.06.06 15:02. Заголовок: Re:
PROC main FIELD qq LOCAL i SET DELETED OFF dbCreate( "test1", {{'qq','C',10,0}}) use test1 aEval( Array(5),{|_1,_2| _1 := StrZero(_2,10), ; __dbAppend(), Field->qq := _1, ; __dbAppend(), Field->qq := _1 }) index on qq to test1 UNIQUE FOR !DELETED() index on qq to test2 UNIQUE ADDITIVE dbGoTop() dbDelete() // удаляю запись 1 (qq == '0000000001') // замечу, что есть запись 2 (qq == '0000000001') For i := 1 to 2 ? OrdSetFocus(i) dbEval({|| QOut(Field->qq), QQOut(STR(RecNo())+IIF(Deleted(),' Deleted','')) }) Next return
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 15.06.06 15:40. Заголовок: Re:
SergeJa И что из твоего кода ? Когда делаю удаление - привычка SKIP(0) ....
|
|
|
|
| |
Пост N: 64
Зарегистрирован: 28.06.05
|
|
Отправлено: 15.06.06 17:09. Заголовок: Re:
Про SKIP(0) не понял. 10 лет программе? Мой тестик запусти. Sapienti sat.
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 15.06.06 18:02. Заголовок: Re:
SKIP(0) - иногда чтоб рефрешик был записей ... Моя программулинка уже с 1995 года крутится .... начиналось с 5.0 и дошло до 5.3 . Думал уйти в винду ... да появился PageScript ... и пришлось остаться .... Про тестик расскажи поподробнее - а то не понял что где должно показать ?
|
|
|
|
| |
Пост N: 65
Зарегистрирован: 28.06.05
|
|
Отправлено: 15.06.06 18:23. Заголовок: Re:
рефреш бессмысленен в данном случае. для сборки теста сохранить мой примерчик в qqq.prg и ... clipper qqq.prg /m/n/a/w rtlink fi qqq ------- результат 0000000002 3 0000000003 5 0000000004 7 0000000005 9 0000000001 1 Deleted 0000000002 3 0000000003 5 0000000004 7 0000000005 9 ---- Диагноз уникальным индескам ставь сам. В анамнезе: после удаления записи данные индекса не соответствуют желаемым. Надеюсь, что твоя программа не обслуживает нужды стратегических объектов (живу я на северо-западе РФ :) ). Успехов!
|
|
|
Новых ответов нет
, стр:
1
2
3
All
[см. все]
|
|