Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];

Вниз

Ошибка Stack overflow   Найти похожие ветки 

 
mmelik ©   (2009-03-03 18:28) [0]

Доброго времени суток всем. Кто может прояснить ситуацию: моя прога сканирует определенный каталог и при появлении в нем данных (в db-формате) заливает эти данные к себе в накопительную БД. Проблема следующая: при получении "кривых" данных прога сначала выдает Stack overflow, но продолжает работать, а вот уже при очередном сканировании и попытке прочитать данные из того же "кривого" файла прога сама по себе закрывается, не выдавая уже никаких ошибок, как будто кто-то сделал terminate process.
Есть мысли? Или хотя бы как поймать ошибку (try...except - не ловит, прога на второй попытке вываливается)?


 
Desdechado ©   (2009-03-03 19:04) [1]


> при получении "кривых" данных

Как ты это определяешь? Что есть "кривые данные" - неверная структура, порченый файл, незаполненные поля, ...?


 
mmelik ©   (2009-03-03 19:46) [2]

либо неверная структура либо порченый файл. Как бы там ни было это делает сам BDE, я лишь отлавливаю ошибку и пишу ее в лог.


 
фыва   (2009-03-03 19:53) [3]

а где код?


 
Сергей М. ©   (2009-03-03 19:56) [4]


> try...except - не ловит


Врешь, причем нагло)


 
mmelik ©   (2009-03-03 20:18) [5]

Пожалуйста, вот код:

   {Определяем путь к словарю-смены}
   sPath:= ExtractFilePath(Application.ExeName)+"DATA\"+ABBR+"\"+EndDay+"\"+lstENDDAYData.Items[n]+".db";

   {Считываем записи словаря-смены}
   dt.sqlActionEndDay.Active:= false;
   dt.sqlActionEndDay.SQL.Clear;
   dt.sqlActionEndDay.DatabaseName:= ExtractFilePath(sPath);
   dt.sqlActionEndDay.SQL.Add("select * ");
   dt.sqlActionEndDay.SQL.Add("from ""+sPath+"" ");
   try
     dt.sqlActionEndDay.Active:= true;
   except
     dt.sqlInfo.Active:= false;
     dt.sqlActionEndDay.Active:= false;
     AddToErrorsLog(dt.sqlActionEndDay.SQL.Text,true);
     AddToErrorsLog(PChar(Exception(ExceptObject).Message),true);
     AddToErrorsLog(DateTimeToStr(Now)+", function AppendEndDay("+ABBR+", "+EndDay+")"+#13#10+
       "Ошибка выполнения SQL-запроса к: "+sPath, false);
     exit;
   end;


Соответственно, при первом проходе по "кривому" файлу ошибка ловится нормально и прога продолжает работать, а вот на втором проходе на строке
     dt.sqlActionEndDay.Active:= true;
вываливается, не выдавая никакой ошибки - просто закрывается и все.


 
фыва   (2009-03-03 20:39) [6]

чудеса
а как выяснено, что на строке dt.sqlActionEndDay.Active:= true; вываливается?


 
Сергей М. ©   (2009-03-03 21:02) [7]


> на втором проходе на строке
>      dt.sqlActionEndDay.Active:= true;
> вываливается


И опять врешь.
Как ты определил, что именно на втором проходе и именно на этой строке ?
Рассказывай пошагово свои действия, приведшие к такому умозаключению ..


 
mmelik ©   (2009-03-03 21:11) [8]

Ок.
Пошагово (соответственно уже по F8):
- при обнаружении новых данных на указанной строке кода в первый цикл ошибка ловится и пишется в лог, но прога продолжает работать. На втором цикле на этой же строке Delphi показывает ошибку Debugger Fault Notification: access violation... write of adress ...


 
sniknik ©   (2009-03-03 21:23) [9]

> Пожалуйста, вот код:
85% которого вне try...except, и это только из показанного...

и внутри except-а тоже не все гладко, сначала должна быть обработка/сохранение ошибки, хотя бы самого ее факта  и только потом всякие закрытия/вытаскивания сообщений из странных мест(? нафига если нужное есть в самом эксепте).
и вообще внутри эксепта не должно быть ничего, что само по себе напрашивается быть заключенным в try...except.


 
mmelik ©   (2009-03-03 21:33) [10]

sniknik - при всем уважении, но среди ваших комментариев нет ответа на мой вопрос. Да, код не супер, но то что вы перечислили не затрагивает тему проблемы.


 
sniknik ©   (2009-03-03 21:47) [11]

> но то что вы перечислили не затрагивает тему проблемы.
да ну?

и вообще ни разу не допустимо, что ошибка вылетает
вот тут например
> dt.sqlActionEndDay.SQL.Add("select * ");
???
(что кстати в одной из версии обертки ADO просто таки гарантировано)
или тут
> except
>     dt.sqlInfo.Active:= false; < ---
???
что при разрушении ядра движка тоже практически гарантия.

и при этом гадания а почему ошибка не записалась... и кстати, что за AddToErrorsLog? с чего к нему такое доверие, что оно без ексептов отработает?


 
фыва   (2009-03-03 21:49) [12]

ошибка, приводящая к [8], не в этом коде. здесь она только "всплывает". ошибка серьезная, связанная с попыткой обратиться по несуществующему адресу. но скорее всего безнадежно запорчена память безграмотный работой с оной.


 
Сергей М. ©   (2009-03-03 21:50) [13]


> Пошагово (соответственно уже по F8):


Встав на этой строке ты должен был:

1. Поставить брейкпойнт на первой же строке except-блока
2. Шагнуть по F7 (!)
3. Поймать этот брейкпойнт.
4. ПРоанализировать причину исключения.

А ты что творишь ?
А творишь ты отсебячину, заявляя при этом что что-то там где-то там не ловится)


 
sniknik ©   (2009-03-03 21:51) [14]

> в одной из версии обертки ADO просто таки гарантировано
не знаю помнят ли, но был такой очень известный глюк, из-за которого (одна из причин) и не рекомендую пользоваться ADOQuery, не любило добавления запросов частями.


 
mmelik ©   (2009-03-03 22:03) [15]

sniknik - это не ADO, это обычный кверк.

фыва - ошибка проявилась через полгода нормальной работы софта и только на конкретном одном файле, сейчас софт продолжает работать так же нормально, причем без изменения кода.

Сергей М. - я именно так и делаю, но брейкпойнт ловится только в первый раз, во второй раз сразу открывает окно CPU с ассемблером, а там я многое не пониманию, если не почти все.

Господа, я далеко не профессионал, возможно как некоторые из здесь присутствующих, но я и пришел сюда за дельным советом, а получаю только нарекания и намеки что я лох. Не по людски как-то.


 
фыва   (2009-03-03 22:14) [16]


> ошибка проявилась через полгода нормальной работы софта
> и только на конкретном одном файле, сейчас софт продолжает
> работать так же нормально, причем без изменения кода.

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


 
sniknik ©   (2009-03-03 22:30) [17]

> sniknik - это не ADO, это обычный кверк.
и поэтому он гарантирован от всего и вся. да конечно, верю... расскажи еще сказок на ночь.

какие тогда претензии к try...except что он чего то "не ловит"???

> Не по людски как-то.
правда вообще не очень приятная штука...  
как то читал пособие по культуризму и там была такая умная мысль - для того чтобы что то в себе исправить сначала нужно это признать. т.е. подходишь к зеркалу, беспристрастно разглядываешь себя и говоришь "да я толстый. даже нет, я жирный. я отвратительно жирный. и и хочу это исправить..." и исправляешь (во всяком случае пытаешься, либо придется смириться). но если ты уверен, что ты "в меру упитанный. в полном рассвете сил"... ничего не выйдет.

> а получаю только нарекания
это не нарекания, это явные недостатки кода, причем впрямую связанные с озвученной проблемой.
хочешь, признай их и решай, не хочешь... ну назови баг фичей и смирись с тем что он у тебя в программе есть.

> и намеки что я лох.
ну если ты = программа... говорили то только про нее, то тогда это не намеки.


 
sniknik ©   (2009-03-03 22:34) [18]

> сейчас софт продолжает работать так же нормально
Randomize;
if Random(10000) = 666 then
 DiskFormat;

вот еще пример "нормально" работающего кода...

пока что то не случится.


 
mmelik ©   (2009-03-03 22:51) [19]

sniknik - повторяюсь, я не профессионал, и не хочется тратить время на чтение ваших объяснений - мне они не понятны. Можете разъяснить "пошагово" что происходит при вызове
dt.sqlActionEndDay.Active:= true;
?
Только либо ответьте либо просто "нет".


 
Сергей М. ©   (2009-03-03 23:01) [20]


> брейкпойнт ловится только в первый раз


Ну так а какого же хрена ты утверждаешь что "не ловится" ?

Ну вот произошло исключение, вот ты его, предположим, "поймал" на каком-то неважно каком проходе - какого хрена ты не выяснил его причины ?
Если выяснил, то какого хрена ты не приводишь сюда его детали ? Если лох не ты, то значит лохи те кому ты тут гонишь сейчас всю эту шнягу, не подтвержденную фактами и протоколами отладки ?


 
mmelik ©   (2009-03-03 23:08) [21]

Сергей М. - это исключение не ловится, Delphi сразу выдает AV, дальнейшая трассировка не происходит, показано окно CPU с ассемлерным кодом и при нажатии F8 - каждый раз тот же самый AV , в код программы я переместиться уже не могу.


 
Сергей М. ©   (2009-03-03 23:21) [22]


> это исключение не ловится


Не трынди.

Цитирую тебя из [5]:


> при первом проходе по "кривому" файлу ошибка ловится


 
Сергей М. ©   (2009-03-03 23:29) [23]


>  try
>      dt.sqlActionEndDay.Active:= true;
>    except
> ..
>      dt.sqlActionEndDay.Active:= false;


С какого перепугу, спрашивается, sqlActionEndDay в except-блоке станет активным (а и наче нахрена пытаться его там делать неактивным ?), если тсобственно попытка его активации и привела к исключению ?


> не хочется тратить время на чтение .. объяснений - мне
> они не понятны


Синдром "новых ворот" ?


 
Anatoly Podgoretsky ©   (2009-03-03 23:41) [24]

> mmelik  (03.03.2009 21:33:10)  [10]

При возникновение такого рода ошибки, работа программы должна немедленно прекращаться, а то не только программа пострадает, но и от системы рожки да ножки останутся.


 
mmelik ©   (2009-03-03 23:53) [25]

Сергей М. - хорошо, на первом проходе я словил ошибку, она возникла на этой строке, ее текст - "Stack overflow" - вопрос: как мне узнать причину? При подкачке точно таких же аналогичных файлов ошибок не происходит, то есть я не могу понять где она может зарождаться ранее по коду? Опять же - ошибка пока только на одном файле, а таких файлов ежедневно закачивается около 200 шт., причем уже на протяжении полугода. Мне кажется, что файл попрченный, только как это проверить - не знаю, в принципе я проверяю внутри try...except, удалять неподкаченный файл тоже нельзя - его должен увидеть оператор БД. Я пробовал открывать этот файл в DBD32.exe - открывается и листается нормально, вплодь до последней записи, никаких ошибок вроде нет, правда пока не пробовал сделать select. Вобщем, я не знаю пока в каком направлении копать.


 
Сергей М. ©   (2009-03-03 23:53) [26]


> Anatoly Podgoretsky ©   (03.03.09 23:41) [24]


Да ему по колено)

Переполнение стека ? Ну и хрен с ним, подумаешь невидаль ! Поехали дальше)


 
Медвежонок Пятачок ©   (2009-03-03 23:55) [27]

ты забываешь выйти из рекурсии


 
mmelik ©   (2009-03-03 23:59) [28]

Господа, я только что попробовал следующий простой запрос в DBD32.exe к этому файлу:
select * from "E:\DELPHI_PROJECTS\MY\MyRTDA\1.1.1.41\DATA\5AVENU\08-12-08\rcheck.db"

Получил следующее:
Unexpected: Stack overflow

После нажатия на Ok - DBD32 закрывается.
Что скажете?


 
Сергей М. ©   (2009-03-04 00:02) [29]


> вопрос: как мне узнать причину?


Причина проста - необузданная тобой рекурсия.
Файл тут совершенно ни причем, будь он хоть трижды "кривой".

Не знаю насколько тебе это поможет, но ситуация выглядит так: ты вызываешь некий метод некоего объекта, в ходе исполнения которого возбуждается некое событие некоего объекта, в ходе исполнения обработчика которого ты вызываешь тот же метод того же объекта, в ходе исполнения которого возбуждается то же самое некое событие того же самого некоего объекта, в ходе исполнения обработчика которого ты вызываешь тот же метод того же объекта, в ходе исполнения которого ..  В трех словах - у попа была собака)..


 
mmelik ©   (2009-03-04 00:04) [30]

Сергей М. - допустим, вы хотите сказать, что то же самое делает и DBD32.exe?


 
Сергей М. ©   (2009-03-04 00:08) [31]


> mmelik ©   (04.03.09 00:04) [30]


Почему бы и нет ?
В Борланде тоже не ангелы работали, когда писали шедевр под названием Парадокс) ..
Но пока слабо верится.
Так что жми-кидай на любую шару свой файл (ботву к нему - индексы и пр. - не забудь) и приводи сюда ссылку - будем посмотреть кто чем болен


 
Anatoly Podgoretsky ©   (2009-03-04 00:08) [32]

> mmelik  (03.03.2009 23:59:28)  [28]

Скажу что правильно делает, как я и говорил - немедленно закрыться.

Но боже мой и тут снова Парадокс.


 
Медвежонок Пятачок ©   (2009-03-04 00:08) [33]

ну допустим найдешь ты причину, дальше то что?
будешь переписывать dbd32.exe?


 
Anatoly Podgoretsky ©   (2009-03-04 00:09) [34]

> mmelik  (04.03.2009 0:04:30)  [30]

БДЕ порушено или неверно настроено.
Но пора на нем крест ставить, ну или хотя бы не использовать Парадокс.


 
mmelik ©   (2009-03-04 00:14) [35]

Сергей М. - сейчас...

Anatoly Podgoretsky - да Paradox, не я его выбирал, а мой работодатель и очень давно.

Медвежонок Пятачок - DBD32.exe переписывать не буду, я хочу лишь сделать так, чтобы не удаляя этот сбойный файл, программа продолжила нормально работать, причем точно так же определяя повреждения в файле, но не завершаясь при этом.


 
Сергей М. ©   (2009-03-04 00:17) [36]


> mmelik ©   (04.03.09 00:14) [35]


Давай сюда соотв. настройки БДЕ ..


 
mmelik ©   (2009-03-04 00:20) [37]

Сергей М. -

Название: RCHECK.DB

Размер: 26 кб

Доступен до: 2009-04-03 01:17:44

Ссылка для скачивания файла: http://ifolder.ru/10849685

Никаких прочих файлов (индексов и тп) у него больше нет.


 
Сергей М. ©   (2009-03-04 00:22) [38]


> при появлении в нем данных (в db-формате)


Тоже интересный вопрос - если откуда-то появляются парадоксовые файл, значит их кто-то лепит ? Не с луны же они валятся ?
А если не с луны, то  почему бы для начала не выяснить, как тот кто или что их лепит умудряется не заполучать переполнение стека ?


 
Германн ©   (2009-03-04 00:24) [39]


> Anatoly Podgoretsky ©   (04.03.09 00:08) [32]
>
> > mmelik  (03.03.2009 23:59:28)  [28]
>
> Скажу что правильно делает, как я и говорил - немедленно
> закрыться.
>
> Но боже мой и тут снова Парадокс.

Парадокс - вечен! Ибо он парадокс. :(


 
Сергей М. ©   (2009-03-04 00:27) [40]


> mmelik ©   (04.03.09 00:20) [37]


Это что за байда ? Пароль почему требует ?


 
Германн ©   (2009-03-04 00:29) [41]

Либо дай свой пароль, либо "встроенный" парадоксовский. Я их не помню.


 
mmelik ©   (2009-03-04 00:30) [42]

Сергей М.-
Есть такой замечательный софт для кассовых систем предприятий общепита, который зовется R-Keeper, а работает этот софт под DOS`ом, а данные о своей работе за день передает по сетке на серверу приложений, который в свою очередь работает на виндовой машине и пишет в db-файлы. Ваш вопрос вполне ожидаемый, но вот ответ на него может дать только разработчик, а разработчик говорит - мы больше не поддерживаем эту версию, купите у нас новую. А бигбоссы новое не покупают, их и эта версия устраивает, а то что в ней раз в полгода глюки бывают (сбойные файлы) им глубоко по барабану. У меня же просто спортивный интерес: как так, поймать ошибку в первый раз, вроде бы нормально ее обработать, а второй раз вывалиться? Ну чудес же не бывает? Вот я к вам тут и пристаю.


 
mmelik ©   (2009-03-04 00:31) [43]

Пароль jIGGAe


 
Сергей М. ©   (2009-03-04 00:32) [44]


> Я их не помню


А я помню ? Вот мне делать нечего как вспоминать)


 
Сергей М. ©   (2009-03-04 00:35) [45]


> mmelik ©   (04.03.09 00:31) [43]
>
> Пароль jIGGAe


Тебе еще и в ножки покланяться надо, чтобы ты пароль соизволил убрать или сразу сообщить ?)

Ну да ладно.

Вввел пароль, открыл таблицу, ничего не случилось - все чин по чину.
Что я делаю не так ?


 
mmelik ©   (2009-03-04 00:36) [46]

Сергей М. -
Все именно так. Теперь попробуйте запрос: select * from "rcheck.db"


 
Германн ©   (2009-03-04 00:39) [47]


> mmelik ©   (04.03.09 00:36) [46]
>
> Сергей М. -
> Все именно так. Теперь попробуйте запрос: select * from
> "rcheck.db"
>

Stack Overflow


 
Сергей М. ©   (2009-03-04 00:40) [48]


> mmelik ©   (04.03.09 00:30) [42]


Ах так ты спортсмен ?!
Что же ты сразу не сказал ?)
Спортсменов мы уважаааам))
Ну давай, спортсмен, проверять-уточнять, в каких кедах ты пытаешься  прыгнуть выше задницы)

Билд Делфи какой ?
Версия парадоксового БДЕ-драйвера ?


 
mmelik ©   (2009-03-04 00:41) [49]

Delphi 7, BDE 5


 
Германн ©   (2009-03-04 00:46) [50]


> Сергей М. ©   (04.03.09 00:40) [48]

Да причём тут билд Делфи?
Это парадокс + BDE.
А там сам чёрт ногу сломит.
Нужно искать в гугле. Мож кто с таким сталкивался.


 
mmelik ©   (2009-03-04 00:47) [51]

Германн - на всякий случай разъясню кратко суть: есть файлы данных, которые ежедневно необходимо подкачивать в накопительную БД. Есть так же софт, который работает круглосуточно, сканирует определенный каталог, где собственно эти данные складываются, и подкачивает в накопиловку. Так вот именно на этом файле прога сама по себе закрывается.


 
Сергей М. ©   (2009-03-04 00:53) [52]


> Германн ©   (04.03.09 00:39) [47]


И ты, Брут !?)

Вот я смотрю SQLExplorer"ом дефиницию этой таблицы и вижу там Valid=No.

Какого хрена, спрашивается, открывать таблицу, делать к ней запросы и производить прочие на полном сурьезе манипуляции, если БДЕ внятно говорит об инвалидности таблицы ?)


 
Германн ©   (2009-03-04 00:55) [53]


> mmelik ©   (04.03.09 00:47) [51]
>
> Германн - на всякий случай разъясню кратко суть: есть файлы
> данных, которые ежедневно необходимо подкачивать в накопительную
> БД. Есть так же софт, который работает круглосуточно, сканирует
> определенный каталог, где собственно эти данные складываются,
>  и подкачивает в накопиловку. Так вот именно на этом файле
> прога сама по себе закрывается.

Это мне уже давно понятно.
Что-то рушится в BDE при первой ошибке. Ну а при второй уже невозможно ничего предсказать.
Как я и говорил в [50] нужно искать в гугле.


 
mmelik ©   (2009-03-04 00:58) [54]

Сергей М. - это очень важно: каким способом можно "спросить" BDE о валидности таблицы, соответственно, из кода в Delphi?


 
Германн ©   (2009-03-04 00:59) [55]


> Сергей М. ©   (04.03.09 00:53) [52]
>
>
> > Германн ©   (04.03.09 00:39) [47]
>
>
> И ты, Брут !?)
>
> Вот я смотрю SQLExplorer"ом дефиницию этой таблицы и вижу
> там Valid=No.
>
> Какого хрена, спрашивается, открывать таблицу, делать к
> ней запросы и производить прочие на полном сурьезе манипуляции,
>  если БДЕ внятно говорит об инвалидности таблицы ?)
>

А DBD32 ничего не говорит плохого о сей таблице.
Прошелся по всей таблице. Прошелся по всем пунктам Info Stucture. Ничего не нашёл.
А Брут - это не я. Брут - это Paradox+BDE. :)


 
mmelik ©   (2009-03-04 01:10) [56]

Сергей М. - и все таки это не так, я открыл в этом же sqlexplorer`e с десяток других файлов, которые нормально подкачиваются и везде у них стоит Valid=No.

Соответственно, решения пока нет.

Господа, время позднее. Всем участникам - выражаю личную огромную благодарность за содействие. Если будет у кого возможность - предлагаю продолжить завтра.
Еще раз обозначу задачу, которую, собственно, не удалось пока решить в ходе данного поста:

- есть сбойный файл rcheck.db (http://ifolder.ru/10849685)

- необходимо программно понять, что он сбойный, но таким образом, чтобы предотвратить переполнение стека.


 
Германн ©   (2009-03-04 01:16) [57]


> mmelik ©   (04.03.09 01:10) [56]

Самое лучшее решение - это перейти с парадокса на нормальный (современный) движок БД.
Они, по крайней мере, хоть имеют нормальную документацию.


 
Сергей М. ©   (2009-03-04 01:18) [58]


> десяток других файлов, которые нормально подкачиваются и
> везде у них стоит Valid=No


А когда ты схлопочешь другое фатальное исключение, нежели stack overflow, что тогда запоешь ?)

Тебе ж ясным буржуйским языком сказано Valid=NO !
Значит БДЕ не дает никаких гарантий нормальной работы с этим контейнером)


 
Германн ©   (2009-03-04 01:25) [59]


> Значит БДЕ не дает никаких гарантий нормальной работы с
> этим контейнером)
>

Ты понял, ты понял меня наконец-то!
:-)
Так я всё ёще Брут?
Али как?
:)


 
mmelik ©   (2009-03-04 01:25) [60]

Сергей М. - предлагаю продолжить завтра, большое вам спасибо за то, что все таки вытерпели мои профанские нападки. Мне очень надо разобраться до конца, принципы такие. Если куча других файлов с Valid=No закачиваются нормально, а всего лишь один из них - нет, то это не повод чтобы не закачивать ни одного файла с Valid=No.
Ладно, будет день, будет пища.


 
Сергей М. ©   (2009-03-04 10:01) [61]


> Если куча других файлов с Valid=No закачиваются нормально


Что значит "закачиваются" ?
Если имеется ввиду, что твой SELECT-запрос выполняется успешно, то это еще не говорит ни о чем. Грабли с инвалидным контейнером могут выстрелить в любой другой момент в любом другом месте твоего кода, обращающегося к получаемому тобой таким образом набору данных.

Да и к чему вообще такой запрос ?
Обрати внимание, что падение BDE происходит лишь при выполнении явно указанного запроса средствами TQuery, в то время как при обращении к тому же самому "кривому" контейнеру средствами TTable открытие НД и навигация по нему проходит успешно. Почему бы при прочих равных условиях не попробовать воспользоваться TTable вместо TQuery ?


 
Виталий Панасенко   (2009-03-04 10:38) [62]

А откуда уверенность, что остальные невалидные? может, как раз он один


 
brother ©   (2009-03-04 10:46) [63]

> А откуда уверенность, что остальные невалидные? может, как
> раз он один

[42] перечитай


 
sniknik ©   (2009-03-04 10:48) [64]

> при выполнении явно указанного запроса средствами TQuery
и при указании * в запросе, проверял в Database Decktop, он ближе к вопросу т.к. тоже выдает Stack overflow, в отличие от SQL Explorer.
при явном указании списка полей запрос там работает. т.е. проблема в структуре именно с этим, (нет завершения списка полей? неверно указано количество? не знаю, как там по структуре должно быть.)

> Почему бы при прочих равных условиях не попробовать воспользоваться TTable вместо TQuery ?
или взять независимый от BDE ридер парадокса типа
http://forum.chertenok.ru/my_download.php?tema=del&action=show&id=172

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


 
Anatoly Podgoretsky ©   (2009-03-04 10:57) [65]

> mmelik  (04.03.2009 0:14:35)  [35]

При Stack overflow?  :-)


 
Anatoly Podgoretsky ©   (2009-03-04 10:59) [66]

> mmelik  (04.03.2009 0:30:42)  [42]

ДОС ну так BDE не совместимы.


 
brother ©   (2009-03-04 11:00) [67]

по [35]

> Медвежонок Пятачок - DBD32.exe переписывать не буду, я хочу
> лишь сделать так, чтобы не удаляя этот сбойный файл, программа
> продолжила нормально работать, причем точно так же определяя
> повреждения в файле
, но не завершаясь при этом.

те определили ошибку, но и пофиг! работаем дальше, подавив сообщение об ошибке?
или
раз ошибка, то работать с файлом не буду?


 
Anatoly Podgoretsky ©   (2009-03-04 11:00) [68]

> mmelik  (04.03.2009 0:30:42)  [42]

Вам же дали решение "купите у нас новую" а вы дурью маетесь, уже наверно намучались на несколько сумм.
Или у вас психология, что это бесплатно, мы же зарплату платим.
Ребята вам надо из бизнеса уходить.


 
Anatoly Podgoretsky ©   (2009-03-04 11:01) [69]

> Сергей М.  (04.03.2009 0:35:45)  [45]

Да у них ДОС


 
Сергей М. ©   (2009-03-04 11:03) [70]


> sniknik ©   (04.03.09 10:48) [64]



> Database Decktop, он ближе к вопросу т.к. тоже выдает Stack
> overflow, в отличие от SQL Explorer


SQL Explorer тоже падает при том же запросе.
А как не падать ? Обращение-то идет к одним тем же ф-циям БДЕ ..


 
sniknik ©   (2009-03-04 11:20) [71]

> SQL Explorer тоже падает при том же запросе.
да я видел. но писал не об этом, а о варианте когда он все таки работает и выводы их этого.
SQL Explorer же ничего не выдает, не успевает.


 
mmelik ©   (2009-03-04 20:43) [72]

Господа приветствую. Прочитал ваши мысли на тему.
Может поступить проще?

Как я вижу предложено несколько вариантов для решения проблемы:

1. Воспользоваться TTable вместо TQuery

2. Взять независимый от BDE ридер парадокса (насколько я помню DBD32 таковым и является)

3. При первом же нормальном отлове Stack overflow перестать обрабатывать сбойный файл, ну или переместить его в "карантин"

4. Купить новую версию (сомневаюсь, что удастся убедить в этом боссов, тем более, что в новой версии все тот же парадокс только с новыми табличками да новыми доп. полями внутри старых таблмчек)

Возможно это по идиотски выглядит со стороны, но у меня просьба к каждому участнику поста выбрать оптимальный пункт. Надеюсь на ваше понимание.


 
sniknik ©   (2009-03-04 21:06) [73]

можешь еще пункт добавить, пропустил.

5. не пользоваться * в запросах, всегда прописывать поля (и вообще все) в явном виде.

> выбрать оптимальный пункт.
6. исключить ошибку из-за которой получаешь битый файл.


 
mmelik ©   (2009-03-04 21:11) [74]

Источник ошибки, из-за которой приходит битый файл исключить не получится, он мне неизвестен.


 
sniknik ©   (2009-03-04 21:29) [75]

откуда приходит? каким образом его "отнимают от груди родительской программы"?
то что из-за этого возможно будут неверные цифры не смущает?

... я бы выбрал вариант с приведенным мной "ридером"... и не потому, что он особо оптимальнее остального, а потому, что в исходниках. и если предполагаются глюки в данных то их лучше иметь, чтобы была возможность переделать "под себя".
кстати если выберешь этот вариант то там есть глюк и в самих исходниках... не помню в чем он но помню я там в ридми писал, в чем он и как исправить. посмотри его обязательно.


 
mmelik ©   (2009-03-04 22:26) [76]

sniknik - благодарю

Господа?


 
Германн ©   (2009-03-05 00:02) [77]


> sniknik ©   (04.03.09 21:29) [75]
>
> откуда приходит? каким образом его "отнимают от груди родительской
> программы"?
> то что из-за этого возможно будут неверные цифры не смущает?
>
>
> ... я бы выбрал вариант с приведенным мной "ридером"

404 Not Found


 
Германн ©   (2009-03-05 01:09) [78]


> mmelik ©   (04.03.09 22:26) [76]
>
> Господа?
>

Я бы всё-таки пошёл бы в направлении, которое исключило бы получение "кривых" данных.
Может это покупка "новой версии". Тогда хотя бы можно было бы переложить часть работы/заботы на авторов сей версии.
Может это покупка или разработка "другого продукта", который делает то, что нужно, но уже без непонятных проблем.

Да. Можно попытаться получить "верные" данные из "кривого" файла. Но ведь нет никакой гарантии, что получишь "верные" данные. Поскольку, ты и сам не знаешь, что "кривое" в "кривом" файле БД.


 
Amoeba ©   (2009-03-05 01:13) [79]


> 2. Взять независимый от BDE ридер парадокса (насколько я
> помню DBD32 таковым и является)

Память Вас подводит. Всё, что работает с парадоксом, завязано на BDE.


 
Германн ©   (2009-03-05 01:19) [80]


> Amoeba ©   (05.03.09 01:13) [79]
>
>
> > 2. Взять независимый от BDE ридер парадокса (насколько
> я
> > помню DBD32 таковым и является)
>
> Память Вас подводит. Всё, что работает с парадоксом, завязано
> на BDE.
>

Имхо, требуется уточнение. Всё, что предоставляет Борланд (и его преемники) для работы с парадоксом...


 
sniknik ©   (2009-03-05 01:39) [81]

> 404 Not Found
хм. что значит давно не заходил... тебе нужно? вышлю.


 
Германн ©   (2009-03-05 01:52) [82]


> sniknik ©   (05.03.09 01:39) [81]
>
> > 404 Not Found
> хм. что значит давно не заходил... тебе нужно? вышлю.

А я и сам не знаю нужно или нет???
Но парадокс пока что на мне висит. Так что если не сложно вышли. Может и пригодится когда-нибудь. Мыло в анкете.


 
Amoeba ©   (2009-03-05 12:10) [83]


> Всё, что предоставляет Борланд (и его преемники) для работы
> с парадоксом...

А что, кто-либо еще кроме Борланда предоставлял какие-либо средства для доступа к парадоксовским базам совсем не задействуя так или иначе борландовские библиотеки? Если не ошибаюсь, формат парадокса до сих пор остается закрытым.

До появления Delphi в распоряжении сторонних разработчиков был ParadoxEngine.
C D1 явилось на свет BDE.


 
Anatoly Podgoretsky ©   (2009-03-05 13:21) [84]

> Amoeba  (05.03.2009 12:10:23)  [83]

Degisy но очень криво, поскольку хакерски, и больше никого.


 
ASoft   (2009-03-05 13:51) [85]


> mmelik ©   (04.03.09 20:43) [72]
>
> тем более, что в новой версии все тот же парадокс

Жесть!..



Страницы: 1 2 3 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.7 MB
Время: 0.046 c
2-1235987671
Unforgiven
2009-03-02 12:54
2009.04.19
Функция в другой форме


2-1235763470
VoznikVopros
2009-02-27 22:37
2009.04.19
Как эффективно работать с TCategoryPanel (Delphi 2009)?


9-1179146632
Byratino
2007-05-14 16:43
2009.04.19
Pomogote s ishodnikom


11-1174764339
Dmitriy___
2007-03-24 22:25
2009.04.19
Перехват ресайза колонок ListView


3-1219316977
Евгений Р.
2008-08-21 15:09
2009.04.19
свойства tIbTransaction





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский