powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
12 сообщений из 12, страница 1 из 1
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
    #37089565
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну т.е. постараюсь описать суть.

1. Под конец события Form_Load (т.е. когда все типа готово уже к работе) запускается таймер:
Все готово к работе означает, что ADODB.Connection подключено к БД, все Listview загружены данными из таблиц этой БД, все интерфейсы пользователя облагорожены тематически и т.п., все сабклассинги инициализированы и т.п.
Код: plaintext
1.
2.
Private Sub Form_Load()
...'инициализация всего
    Timer1.Enabled = True 'под конец запуск таймера на отслеживание изменений

2. Смысл таймера(Interval=1000): сделать несколько "умных" запросов к БД и на основании этого обновить отдельные строчки в ListView.
Код: plaintext
1.
2.
3.
4.
5.
Private Sub Timer1_Timer()
    Timer1.Enabled = False 'самоотключаем себя на время исполнения
    ReadApplyChanges_BD 'обновляем ListView(s) из БД если есть чего обновлять
...
    Timer1.Enabled = True 'самовозобновление
End Sub

3. Ошибка возникает после выполнения следующего кода но только если вызвать контекстное меню "очень быстро после запуска формы" по ощущениям: если вызвать контекстное меню до первого срабатывания таймера то ошибка будет в момент его срабатывания.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub ListView1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim HTest As String
    On Error GoTo SkipSelect1:
    HTest = ListView1(Index).HitTest(x, y)
    ConfigureMenu
    GoTo SkipSelect2
SkipSelect1:
    SelectNone_Click
    Exit Sub
SkipSelect2:
    If Button = vbRightButton Then
        PopupMenu EditMenu
    End If
End Sub
Смысл кода в следущем (кажется):
если 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.
Private Sub Timer1_Timer()
    Timer1.Enabled = False
    If InStr(Command, "/verbose") >  0  Then
        AddLog Now & Chr( 9 ) & "before ReadApplyChanges_BD"
    End If
    ReadApplyChanges_BD
    If InStr(Command, "/verbose") >  0  Then
        AddLog Now & Chr( 9 ) & "after ReadApplyChanges_BD"
    End If
 ...
Дык вот...этих 2-х строчек "дебага" достаточно для того чтоб ошибка более не наблюдалась...
Я встречался с такими ситуациями, когда внесение миллисекундной задержки посредством включения дебага полностью устраняет проблему ради обнаружения которой этот дебаг включался.

Че вообще делать в таком случае? Для устранения ну скажем наверно могу запустить таймер c нек. "отсрочкой". Надо ли пытаться понять? Или надо обойти, "как получится" и забыть?

Ошибка возникает как в VB-среде, так и в случае exe. Прога достаточно навернута, но с БД ранее не работала...можно конечно попытаться набросать тестовый проект, но не уверен что сумею "высечь искру".
...
Рейтинг: 0 / 0
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
    #37089593
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще...
искра без труда вышибается на любой 32-битной OS (XP, Vista,7),
но положить прогу таким образом на Vista x64, win7 x64 мне не удается.
...
Рейтинг: 0 / 0
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
    #37089617
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока удалось выяснить, что
1) так не вылетает
Код: plaintext
1.
2.
3.
4.
Public Sub ReadApplyChanges_BD()
...
        AddLog Now & Chr( 9 ) & "before my_JRO.RefreshCache"
        my_JRO.RefreshCache adoConn
        'AddLog Now & Chr( 9 ) & "after my_JRO.RefreshCache"

2) так вылетает
Код: plaintext
1.
2.
3.
4.
Public Sub ReadApplyChanges_BD()
...
        'AddLog Now & Chr(9) & "before my_JRO.RefreshCache"
        my_JRO.RefreshCache adoConn
        AddLog Now & Chr( 9 ) & "after my_JRO.RefreshCache"
3) my_JRO.RefreshCache adoConn -место ошибки
-вылетает не обязательно при "первом срабатывании", но обязательно
1) после вызова контекстного меню
2) в течении относительно короткого времени после старта и сдается мне это
"относительно короткое время"=="относительно длинному времени" (на которое я ругался в своем предыдущем топике, что синхронизация connection и БД происходит несколько секунд).
Где-то тут очередная дохлая собака зарыта...
...
Рейтинг: 0 / 0
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
    #37089628
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-dukeПочитайте про раннее связывание VS позднее связывание.
...
Рейтинг: 0 / 0
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
    #37089642
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-dukeПочитайте про раннее связывание VS позднее связывание.
Да уж. Иногда лучше быть безграмотным и не читать умных книжек.
Не хотел я с этим "связываться", но "связался".
Короче так:

Было:
Microsoft Jet and Replication Objects 2.6 Library (msjro.dll) included
Код: plaintext
Public my_JRO As New JRO.JetEngine
И глючило, в точности как описано выше.

Стало:
Microsoft Jet and Replication Objects 2.6 Library (msjro.dll) included
Код: plaintext
1.
2.
3.
Public my_JRO 'As New JRO.JetEngine
Public Sub DataBaseConnect()
...
    Set my_JRO = CreateObject("JRO.JetEngine")
И глюки исчезли...

Как вариант,
Код: plaintext
1.
2.
3.
Public my_JRO 'As JRO.JetEngine
Public Sub DataBaseConnect()
...
      Set my_JRO = New JRO.JetEngine
но нельзя изначально определять как "As JRO.JetEngine"

но CreateObject() считаю надежней.

Ссылки на ADODB тоже видимо буду выкидывать...от греха подальше. Честно нет желания подобные глюки разгребать...
Вот те и философские беседы...к чему приводють панимаешь ли.
...
Рейтинг: 0 / 0
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
    #37096683
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такая же ошибка возникла в другом (менее навороченном!) модуле в совершенно другом контексте и не при старте (не успел убрать As New JRO.JetEngine) при промежуточном тестировании.
Применение позднего связывания через CreateObject сразу вылечило.
...
Рейтинг: 0 / 0
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
    #37096719
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у тебя подключена " 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 при загрузке не сможет узнать тип объекта.
...
Рейтинг: 0 / 0
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
    #37096789
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иногда предпочтительнее раннее связывание.
Тогда лучше устанавливать reference на библиотеку с наименьшим номером, который устраивает, например, на 2.1
Ну и придется её установить на время компиляции.
В таком случае скомпилированная программа при запуске подключится к более поздней зарегистрированной библиотеке, установленной на конкретном компьютере пользователя, например, к 2.6, если нет 2.1, но не подключится к 1.0
...
Рейтинг: 0 / 0
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
    #37097484
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все рассуждения и объяснения по поводу того на какую версию делать Reference и какая версия при этом будет задействована, безусловно полезны и дополняют багаж знаний, но это скорее дополнение к пониманию ответа на мой предыдущий вопрос об ADODB.
/topic/823344&pg=2 (вот эта тема в конце)

===============================================
Если говорить непосредственно по теме вопроса
случайный crash msjetoledb40.dll в момент
Код: plaintext
my_JRO.RefreshCache adoConn 

White OwlЕсли ты пишешь
Public my_JRO As New JRO.JetEngine
это объявляет объект как принадлежащий определенному классу и создает этот объект (что-то типа первичной инициализации)
Если ты пишешь
Public my_JRO As JRO.JetEngine
это объявляет объект как принадлежащий определенному классу, но не создает объект (ему надо будет потом отдельно дать команду new)
В обоих случаях это требует подключения библиотеки. Иначе runtime при загрузке не сможет узнать тип объекта.
В любом из этих случаев на ошибку нарываешься.
Она исчезает только если "я пишешь" как не принадлежащий определенному классу :
Код: plaintext
Public my_JRO \'т.е. as просто object

При этом любой вариант:
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) Делаю позднее связывание без указания версии.

Ну, если это устраняет проблему...
...
Рейтинг: 0 / 0
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
    #37098520
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Она исчезает только если "я пишешь" как не принадлежащий определенному классу :
Код: plaintext
Public my_JRO 'т.е. as просто object
Вообще-то, в данном случае не my_JRO объявляется как Variant а не как Object. Если хочешь изначально объект, то и надо объявлять как абстрактный объект:
Код: plaintext
Public my_JRO as Object
...
Рейтинг: 0 / 0
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
    #37098580
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЕсли хочешь изначально объект, то и надо объявлять как абстрактный объект...
Хочу чтоб было надежно и не глючило. А как оно там называется это вопрос второстепенный...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
    #38489486
Клевер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

я глянул свой код. там вообще нет ни одного объявления через As new. но dllка отказывалась обслуживать мою прогу
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Странная ...обнаружена ошибка. Приложение будет закрыто ModName: msjetoledb40.dll
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]