|
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
|
|||
---|---|---|---|
#18+
Ну т.е. постараюсь описать суть. 1. Под конец события Form_Load (т.е. когда все типа готово уже к работе) запускается таймер: Все готово к работе означает, что ADODB.Connection подключено к БД, все Listview загружены данными из таблиц этой БД, все интерфейсы пользователя облагорожены тематически и т.п., все сабклассинги инициализированы и т.п. Код: plaintext 1. 2.
2. Смысл таймера(Interval=1000): сделать несколько "умных" запросов к БД и на основании этого обновить отдельные строчки в ListView. Код: plaintext 1. 2. 3. 4. 5.
3. Ошибка возникает после выполнения следующего кода но только если вызвать контекстное меню "очень быстро после запуска формы" по ощущениям: если вызвать контекстное меню до первого срабатывания таймера то ошибка будет в момент его срабатывания. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
если HTest выдаст ошибку, значит мы находимся не на строчке ListView и выходим. если мы находимся на строчке, то запускается ф-ция ConfigureMenu, кот. в завис. от содержания выделенной строчки делает отдельные пункты меню(а также сопряженного Toolbar и т.п.) enable/disable если кнопка мыши правая, то контекстное меню сразу после выводится на экран в месте щелчка. Смысл в чем: если этот код (правая кнопка мыши и на строчке Listview) выполнить до первого срабатывания Timer, то ReadApplyChanges_BD вышибет программу: ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll Почему так думаю... msjet яно намекает на общение с БД, а с БД после загрузки больше ничего не работает. Если увеличить время таймера до 2сек, то ошибка не наблюдается Если убрать ConfigureMenu из ListView1_MouseUp, то ошибка не наблюдается Умный человек подскажет: надо добавить ключик /verbose. Нет проблем, добавил: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Я встречался с такими ситуациями, когда внесение миллисекундной задержки посредством включения дебага полностью устраняет проблему ради обнаружения которой этот дебаг включался. Че вообще делать в таком случае? Для устранения ну скажем наверно могу запустить таймер c нек. "отсрочкой". Надо ли пытаться понять? Или надо обойти, "как получится" и забыть? Ошибка возникает как в VB-среде, так и в случае exe. Прога достаточно навернута, но с БД ранее не работала...можно конечно попытаться набросать тестовый проект, но не уверен что сумею "высечь искру". ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 00:07 |
|
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
|
|||
---|---|---|---|
#18+
Вот еще... искра без труда вышибается на любой 32-битной OS (XP, Vista,7), но положить прогу таким образом на Vista x64, win7 x64 мне не удается. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 00:51 |
|
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
|
|||
---|---|---|---|
#18+
Пока удалось выяснить, что 1) так не вылетает Код: plaintext 1. 2. 3. 4.
2) так вылетает Код: plaintext 1. 2. 3. 4.
-вылетает не обязательно при "первом срабатывании", но обязательно 1) после вызова контекстного меню 2) в течении относительно короткого времени после старта и сдается мне это "относительно короткое время"=="относительно длинному времени" (на которое я ругался в своем предыдущем топике, что синхронизация connection и БД происходит несколько секунд). Где-то тут очередная дохлая собака зарыта... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 01:23 |
|
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
|
|||
---|---|---|---|
#18+
big-dukeПочитайте про раннее связывание VS позднее связывание. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 02:10 |
|
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
|
|||
---|---|---|---|
#18+
big-dukeПочитайте про раннее связывание VS позднее связывание. Да уж. Иногда лучше быть безграмотным и не читать умных книжек. Не хотел я с этим "связываться", но "связался". Короче так: Было: Microsoft Jet and Replication Objects 2.6 Library (msjro.dll) included Код: plaintext
Стало: Microsoft Jet and Replication Objects 2.6 Library (msjro.dll) included Код: plaintext 1. 2. 3.
Как вариант, Код: plaintext 1. 2. 3.
но CreateObject() считаю надежней. Ссылки на ADODB тоже видимо буду выкидывать...от греха подальше. Честно нет желания подобные глюки разгребать... Вот те и философские беседы...к чему приводють панимаешь ли. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2011, 02:30 |
|
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
|
|||
---|---|---|---|
#18+
Такая же ошибка возникла в другом (менее навороченном!) модуле в совершенно другом контексте и не при старте (не успел убрать As New JRO.JetEngine) при промежуточном тестировании. Применение позднего связывания через CreateObject сразу вылечило. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2011, 00:51 |
|
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
|
|||
---|---|---|---|
#18+
Если у тебя подключена " Microsoft Jet and Replication Objects 2.6 Library ". То при старте программы, еще до выполнения первой команды программы, сам VB-runtime попытается подключить библиотеку " Microsoft Jet and Replication Objects 2.6 Library " и обязательно именно версии 2.6. Если библиотека не подключена а ты используешь CreateObject("JRO.JetEngine") , то runtime соответственно не будет подключать библиотеку заранее, а во время исполнения этой команды попытается создать объект любой доступной версии (будь это 2.6, 2.10 или 1.0) Та которая у юзера была проинсталлирована последней и захватила себе главный стэм - JRO.JetEngine. Можно в принципе указывать и версию CreateObject("JRO.JetEngine.2.6") , но это может не сработать если данной конкретной версии у юзера нет. За списком возможных имен ходи в регистри в HCR. Если ты пишешь Public my_JRO As New JRO.JetEngine это объявляет объект как принадлежащий определенному классу и создает этот объект (что-то типа первичной инициализации) Если ты пишешь Public my_JRO As JRO.JetEngine это объявляет объект как принадлежащий определенному классу, но не создает объект (ему надо будет потом отдельно дать команду new) В обоих случаях это требует подключения библиотеки. Иначе runtime при загрузке не сможет узнать тип объекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2011, 01:33 |
|
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
|
|||
---|---|---|---|
#18+
Иногда предпочтительнее раннее связывание. Тогда лучше устанавливать reference на библиотеку с наименьшим номером, который устраивает, например, на 2.1 Ну и придется её установить на время компиляции. В таком случае скомпилированная программа при запуске подключится к более поздней зарегистрированной библиотеке, установленной на конкретном компьютере пользователя, например, к 2.6, если нет 2.1, но не подключится к 1.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2011, 05:46 |
|
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
|
|||
---|---|---|---|
#18+
Все рассуждения и объяснения по поводу того на какую версию делать Reference и какая версия при этом будет задействована, безусловно полезны и дополняют багаж знаний, но это скорее дополнение к пониманию ответа на мой предыдущий вопрос об ADODB. /topic/823344&pg=2 (вот эта тема в конце) =============================================== Если говорить непосредственно по теме вопроса случайный crash msjetoledb40.dll в момент Код: plaintext
White OwlЕсли ты пишешь Public my_JRO As New JRO.JetEngine это объявляет объект как принадлежащий определенному классу и создает этот объект (что-то типа первичной инициализации) Если ты пишешь Public my_JRO As JRO.JetEngine это объявляет объект как принадлежащий определенному классу, но не создает объект (ему надо будет потом отдельно дать команду new) В обоих случаях это требует подключения библиотеки. Иначе runtime при загрузке не сможет узнать тип объекта. В любом из этих случаев на ошибку нарываешься. Она исчезает только если "я пишешь" как не принадлежащий определенному классу : Код: plaintext
При этом любой вариант: 1) Set my_JRO = New JRO.JetEngine \'(библиотека подключена ) 2) Set my_JRO = CreateObject("JRO.JetEngine") \'библиотека неважно подключена или нет глюков не дает. Причем глюк имеет место быть 1) На любой OS 32-bit включая ту XP-32 на которой установлен VB и на кот. делаешь проект 2) как в случае exe так и в случае среды VB 3) нет нормального объяснения, т.е. не делаю ничего незаконного и носит странно-произв. характер. По поводу версий разных: одна только версия Microsoft Jet and Replication Objects 2.6 Library (msjro.dll). Не из чего выбирать. А вот на любой x64 глюков нет при любых вариантах. Видимо там используется "другая"- "безглючная" библиотека. Т.е. как бы наверно ищу косвенного подтверждения что в данном случае правильно делаю 1) Не привязывать библиотеку 2) Делаю позднее связывание без указания версии. Ну, если это устраняет проблему... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2011, 11:56 |
|
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
|
|||
---|---|---|---|
#18+
Дмитрий77Она исчезает только если "я пишешь" как не принадлежащий определенному классу : Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2011, 17:56 |
|
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
|
|||
---|---|---|---|
#18+
White OwlЕсли хочешь изначально объект, то и надо объявлять как абстрактный объект... Хочу чтоб было надежно и не глючило. А как оно там называется это вопрос второстепенный... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2011, 18:44 |
|
|
start [/forum/topic.php?fid=60&msg=37089642&tid=2156664]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 158ms |
0 / 0 |