powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
12 сообщений из 37, страница 2 из 2
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38420115
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
Может я не в теме, какого кеша в дотнете?
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38420269
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиAntonariy,
Может я не в теме, какого кеша в дотнете?
конечно не в теме - эти изверги мучают аксессную базу (mdb/accdb) через жопу JRO и ADODB
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38420327
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилчерез жопумежду прочим это стандартный задокументированный способ
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38420491
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
всегда считал, что в диезе наиболее рационально пользоваться нет провайдерами для этой среды, итерфейсный подход полностью размывает понятие тип базы, при условии что он реализован прально..
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38420815
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErmakВот жутко интересно, под скромным комментарием 'работаем с записью, что скрывается?
В данном конкретно примере ничего интересного нет-строчка читается из базы и результат чтения добавляется в ListView_item.
Я сразу сказал что пример телефонной книги неудачен, там любой код работать будет.

Проблемы начнутся там, где строчка соответствует телефонному вызову и в ней отражается статистика вызова, типа
Вызов - Отвечен -Закончен
Добавьте сюда еще например статистику факса, посылаемого в процессе этого вызова, и число состояний увеличится.
Но даже в простой цепочке
Вызов - Отвечен -Закончен -> Результат: На вызов ответили
А проглотите середину
Вызов - Отвечен -Закончен -> Результат: На вызов НЕ ответили
Т.е. если серединка по каким-то причинам прочитана не будет, то результат будет другим (неправильным).
Вот что я имею ввиду под "необходимо прочитать с учетом последнего изменения".
Кажется наглядно.

Antonariy2) Две программы с разными, само собой, соединениями с этой базой.
3) У каждого соединения свой кэш.
4) Изменения, сделанные одним соединением, не успевают за требуемый очень короткий промежуток времени отразиться в кэше другого соединения.
Два коннекшена само собой.
Но там походу и в пределах одного коннекшн может задница возникнуть. Вот этот пост
Единственное, на момент написания этого поста я даже не делал Commit при записи, поэтому за актуальность не ручаюсь.
ИзопропилЭти изверги мучают аксессную базу.
Никто никого не мучает. Чтобы смодулировать задницу достаточно сделать один телефонный вызов, снять трубку и тут же ее кинуть. И запись которая "Отвечен" может быть "съедена" (следуя приведенному выше примеру) - всего то 3-4 запроса к БД.

А что касается уведомлений. У меня итак C++-ная часть приложения уведомляет VB-шный модуль через SendMessage. И модуль кот. работает с динамической статистикой (и с БД) ОДИН.
И уведомления далеко не безобидны. SendMessage(WM_COPYDATA) например вешает вызывающее приложение (поток из кот. его отправили) пока вызываемое не обработает это сообщение - а вызываемое м.б. занято, это перегрузка.
Ну, и кроме очень лишнего бардака я никакой логики в уведомлениях на тему кэша не вижу.

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

Буквально недавно проблему решал.
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
Вот это называется мучить.
30-50 одновременных вызовов.
Автор кода (профи) был уверен что устанавливает "блокировку".
А на деле при большой нагрузке объект грохался из параллельного потока(который запуститься по всей логике ну никак не мог),
и основной поток пытался работать с убиенным объектом:
Картинка дебагера: 14909942
Хорошо хоть нашли, поняли и исправили.

Там могут быть не миллисекунды, там доли миллисекунд могут быть.
И неточности (обновит-не обновит, успеет прочитать - не успеет) не допускаются.
Синхронизация должна быть безусловной.

Ну, раз нет в .NET инструмента, значит нет. Чего спорить то.
Будем юзать проверенную и отточенную методологию.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38420917
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДмитрий77 Удаляю COM, добавляю adodb.dll что ты сказал.
Переношу exe на 7 x64
Ругается матом.Ну х.з., у меня так работало.
Я соврал.
В принципе все работает.
Причем как с COM-ссылкой, так и с adodb.dll (причем без кидания оной куда либо).

Работает, да не совсем.
Найдешь подвох? Я не нашел.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
  Private Sub GetPhoneBook()
    my_JRO.RefreshCache(adoConn)
    objRecSetPhoneBook = New ADODB.Recordset
    objRecSetPhoneBook.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly
    objRecSetPhoneBook.LockType = ADODB.LockTypeEnum.adLockReadOnly
    objRecSetPhoneBook.Open("SELECT * FROM phone_book ORDER BY ID DESC", adoConn)
    objRecSetPhoneBook.MoveFirst()
    InitPhoneBookFields(objRecSetPhoneBook)
...

  <StructLayout(LayoutKind.Sequential)> Public Structure PhoneBookTableFields
    'тип определяет наличие полей в таблице phone_book
    Dim id As Boolean
    Dim str_name As Boolean
...
  End Structure

  Public PhoneBookFields As PhoneBookTableFields 'какие поля есть в таблице phone_book


  Public Sub InitPhoneBookFields(ByVal m_rs As ADODB.Recordset) 'годится любой рекодсет из phone_book таблицы
    PhoneBookFields.id = IIf(FieldExistsInRS(m_rs, "ID"), True, False)
    PhoneBookFields.str_name = IIf(FieldExistsInRS(m_rs, "str_name"), True, False)
...
  End Sub
  Private Function FieldExistsInRS(ByVal RS As ADODB.Recordset, ByVal fieldName As String) As Boolean
    fieldName = UCase(fieldName)

    For Each fld As ADODB.Field In RS.Fields
      If UCase(fld.Name) = fieldName Then
        FieldExistsInRS = True
        Exit Function
      End If
    Next

    FieldExistsInRS = False
  End Function



Для лечения достаточно вот этого в ф-ции FieldExistsInRS
Код: vbnet
1.
  Private Function FieldExistsInRS(ByVal RS As Object, ByVal fieldName As String) As Boolean



А иначе(FieldExistsInRS(ByVal RS As ADODB.Recordset): работает на XP где и компилится, но что-то не нравится с RS.Fields в нижней ф-ции при запуске на Win7 x64.
Т.е. я дважды вложенно передаю RecordSet ByVal (в VB6 было ByRef, но замена на ByRef ошибки не устраняет -здесь без разницы)
Функция InitPhoneBookFields вообще тупая и ее можно выкинуть (от дураков удаляющих поля в БД куда лазить не положено все равно не застрахуешься) - она просто проверяет наличие полей в таблице и фиксирует данный факт в Public PhoneBookFields -чтоб если поля нет, потом не пытаться запрашивать оттуда значение - такая глупая перестраховка.

Но вот интересно почему такая проблема.

А ошибку на 7x64 пишет
Could not load type 'ADODB.Fields To Internal FieldsMarshaler' from assembly...
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38420950
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 (причем без кидания оной куда либо).Фишка в том, что adodb.dll я встречал не в каждой системе.
Дмитрий77 Найдешь подвох? С такой проблемой я сталкивался только на VB6 при подключении одинаковых библиотек разных версий. Или разных библиотек, но имеющих одноименные классы. И проблема звучала как type error.
Дмитрий77 Could not load type 'ADODB.Fields To Internal FieldsMarshaler' from assembly...А об этом вообще без понятия.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38420967
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДмитрий77 (причем без кидания оной куда либо).Фишка в том, что adodb.dll я встречал не в каждой системе.
Фишка в том что у меня ее на тестовом компе тоже нет (ни на одном из дисков).
Win7x64 -голая, по умолчанию там стоит .Net 4 Client (который собственно и нужен)

Скорее всего эта adodb.dll - обертка над COM -нечто типа .tlb в VB6.
Т.е. вообще пофик чего подключать - COM или adodb.dll -это не брат-близнец, это "одно и то же".

А что касается ошибки, то такой же код скомпилированный на VB6 на том же Developer-XP-компе, прекрасно работает на той же семерке и без всяких "as Object".
Т.е. это .NET-у чего-то не хватает с его "маршализацией". Заметь, я передал объект дважды
Ф-ция 1 -> Ф-ция 2 -> Ф-ция 3, и он дурак после этого не может получить доступ к RS.Fields

По хорошему этот набор заумных ф-ций проще выкинуть.
Но тестировать отсутствие крашей с ADODB на разных OS думаю первое время надо усиленно.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38420970
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 Скорее всего эта adodb.dll - обертка над COMСильно в этом сомневаюсь, это просадило бы производительность. И то и другое это надстройки над OLEDB, одна на com, другая на дотнете.
Дмитрий77нечто типа .tlb в VB6Ничего общего. tlb это библиотека типов, в ней нет исполняемого кода.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38421004
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДмитрий77нечто типа .tlb в VB6Ничего общего. tlb это библиотека типов, в ней нет исполняемого кода.
Да?
Счас смеяться будешь.
Importing a Type Library as an Assembly
В частности:
Filling a DataSet with an ADO Recordset or Record

Короче, идешь в папку (согласно версии .Net -важно)
Код: vbnet
1.
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools


И делаешь там команду:
Код: vbnet
1.
2.
TlbImp.exe "C:\Program Files\Common Files\System\Ado\msado15.dll" /out:C:\111\ADODB.dll
TlbImp.exe "C:\Program Files\Common Files\System\Ado\msadox.dll" /out:C:\111\ADOX.dll


И готов "брат-близнец".
Да, файл dll потом можешь переименовать, но то как ты его назовешь изначально ADODB, ADOX -будут названия root-объектов.

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

Вот еще про это:
Calling COM Components from .NET Clients
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38421007
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда ты добавляешь COM, например msadox.dll
он тебе этого "близнеца" делает автоматом в виде
\obj\x86\Debug\Interop.ADOX.dll
того же самого что ты можешь сделать командой TlbImp.exe

Но вот с "конфликтами версий", будет ли при выборе 2.6 использоваться потом последняя (для тек. системы) это да, вопрос.
Опять же, ты не знаешь из какого теста сделан тот "зарезервированный брат", который сидит в
C:\Program Files\Microsoft.NET\Primary Interop Assemblies
(размер у него что-то чуть больше чем получается из 2.6)

Понимаешь, при указании v.2.6 в VB6 (как я привык), exe автоматом выберет максимальную версию при запуске не целевом компе (как Shocker.Pro обнаружил еще 2 года назад, я приводил ссылку).
А вот че будет в случае .NET - ХЗ.
И не исключено что проблема на кот. я наткнулся как то с этим связана.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38421014
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Едем дальше. Предположение про "версию" похоже не пустое.

1.
При выборе "зарезервированного брата":
C:\Program Files\Microsoft.NET\Primary Interop Assemblies
В проект добавляется
Тип:.NET
Версия: 7.0.3300.0
Путь: C:\Program Files\Microsoft.NET\Primary Interop Assemblies\adodb.dll 'путь к "брату"

При этом на win7x64 ошибка
Could not load type 'ADODB.Fields To Internal FieldsMarshaler' from assembly...

2.
При выборе COM
Microsoft ActiveX Data Objects 2.0 Library
...
Microsoft ActiveX Data Objects 2.7 Library
(любой 2.0-2.7)
В проект добавляется
Тип:.COM
Версия:2.<0-7>.0.0
Путь: C:\Windows\assembly\GAC\ADODB\ 7.0.3300.0 _b03f5...\ADODB.dll 'ссылка на "брата"?

При этом на win7x64 ошибка
Could not load type 'ADODB.Fields To Internal FieldsMarshaler' from assembly...

Пытался удалить для большего понимания
C:\WINDOWS\assembly -> ADODB (7.0.3300.0)
А вот не дает, ни через меню "в папке", ни через
gacutil.exe /u ADODB
Пишет "сборка не может быть удалена, поскольку используется другими приложениями".
Перезагрузка компа не помогла.

3.
При выборе COM
Microsoft ActiveX Data Objects 2.8 Library 'ТОЛЬКО ВЕРСИЯ 2.8!!!
В проект добавляется
Тип:.COM
Версия:2.8.0.0
Путь: <Project Path>\obj\x86\Debug\Interop.ADODB.dll 'создал своего "брата"

На win7x64 НЕТ ОШИБКИ.

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

Ну либо остается CreateObject.

Такие вот страсти.
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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