|
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
|
|||
---|---|---|---|
#18+
Antonariy, Может я не в теме, какого кеша в дотнете? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2013, 13:00 |
|
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
|
|||
---|---|---|---|
#18+
Где-то в степиAntonariy, Может я не в теме, какого кеша в дотнете? конечно не в теме - эти изверги мучают аксессную базу (mdb/accdb) через жопу JRO и ADODB ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2013, 14:03 |
|
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
|
|||
---|---|---|---|
#18+
Изопропилчерез жопумежду прочим это стандартный задокументированный способ ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2013, 14:23 |
|
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
|
|||
---|---|---|---|
#18+
Изопропил, всегда считал, что в диезе наиболее рационально пользоваться нет провайдерами для этой среды, итерфейсный подход полностью размывает понятие тип базы, при условии что он реализован прально.. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2013, 15:34 |
|
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
|
|||
---|---|---|---|
#18+
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 инструмента, значит нет. Чего спорить то. Будем юзать проверенную и отточенную методологию. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2013, 19:18 |
|
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
|
|||
---|---|---|---|
#18+
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.
Для лечения достаточно вот этого в ф-ции FieldExistsInRS Код: vbnet 1.
А иначе(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... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2013, 22:18 |
|
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
|
|||
---|---|---|---|
#18+
Дмитрий77 (причем без кидания оной куда либо).Фишка в том, что adodb.dll я встречал не в каждой системе. Дмитрий77 Найдешь подвох? С такой проблемой я сталкивался только на VB6 при подключении одинаковых библиотек разных версий. Или разных библиотек, но имеющих одноименные классы. И проблема звучала как type error. Дмитрий77 Could not load type 'ADODB.Fields To Internal FieldsMarshaler' from assembly...А об этом вообще без понятия. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2013, 23:38 |
|
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
|
|||
---|---|---|---|
#18+
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 думаю первое время надо усиленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 00:15 |
|
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
|
|||
---|---|---|---|
#18+
Дмитрий77 Скорее всего эта adodb.dll - обертка над COMСильно в этом сомневаюсь, это просадило бы производительность. И то и другое это надстройки над OLEDB, одна на com, другая на дотнете. Дмитрий77нечто типа .tlb в VB6Ничего общего. tlb это библиотека типов, в ней нет исполняемого кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 00:25 |
|
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
|
|||
---|---|---|---|
#18+
AntonariyДмитрий77нечто типа .tlb в VB6Ничего общего. tlb это библиотека типов, в ней нет исполняемого кода. Да? Счас смеяться будешь. Importing a Type Library as an Assembly В частности: Filling a DataSet with an ADO Recordset or Record Короче, идешь в папку (согласно версии .Net -важно) Код: vbnet 1.
И делаешь там команду: Код: vbnet 1. 2.
И готов "брат-близнец". Да, файл dll потом можешь переименовать, но то как ты его назовешь изначально ADODB, ADOX -будут названия root-объектов. С любой OCX это проделать можешь. Но я сильно сомневаюсь что это дает какого-то прироста производительности (и вообще чего-то дает). Exe-шники созданные добавлением COM или с использованием произведенной из него либы по размеру байт в байт одинаковые. Я думаю это "одно и то же", когда ты добавляешь COM компилятор думаю то же самое делает. Вот еще про это: Calling COM Components from .NET Clients ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 02:51 |
|
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
|
|||
---|---|---|---|
#18+
Когда ты добавляешь 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 - ХЗ. И не исключено что проблема на кот. я наткнулся как то с этим связана. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 03:17 |
|
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
|
|||
---|---|---|---|
#18+
Едем дальше. Предположение про "версию" похоже не пустое. 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. Такие вот страсти. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 04:37 |
|
|
start [/forum/topic.php?fid=20&gotonew=1&tid=1403904]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
8ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
92ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 194ms |
0 / 0 |