powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
25 сообщений из 37, страница 1 из 2
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38418421
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  my_JRO.RefreshCache adoConn
  Set objRecSet = New ADODB.Recordset
  objRecSet.CursorType = adOpenForwardOnly
  objRecSet.LockType = adLockReadOnly
  objRecSet.Open "SELECT * FROM phone_book ORDER BY ID DESC", adoConn
  objRecSet.MoveFirst
  Do While objRecSet.EOF = False
    'работаем с записью
    objRecSet.MoveNext
  Loop
  objRecSet.Close
  Set objRecSet = Nothing


Перевод на .NET
Код: vbnet
1.
2.
3.
4.
5.
6.
    Dim COMMAND As New OleDb.OleDbCommand("SELECT * FROM phone_book ORDER BY ID DESC", CONNECTION)
    Dim DATAREADER As OleDb.OleDbDataReader = COMMAND.ExecuteReader(CommandBehavior.Default)
    While DATAREADER.Read() = True
      'работаем с записью
    End While
    DATAREADER.Close()



Ну, я полагаю эквивалентов для adOpenForwardOnly и adLockReadOnly в случае использования OleDbDataReader не требуется.

Но меня очень волнует вопрос.
Код: vbnet
1.
my_JRO.RefreshCache adoConn



М.б. это не самый удачный пример, и в данном конкретном случае сойдет и без этого,
но если программа общается с БД динамически, то отсутствие этой строчки
приводит к БОЛЬШОЙ ЗАДНИЦЕ
БД, она тормозит с обновлением что ли...
Посему мне нужен эквивалент для JRO.RefreshCache

How To Synchronize Writes and Reads with the Jet OLE DB Provider and ADO

Либо аргументированные гарантии, что ситуаций подобных описанной не будет
с замечательными .NET объектами OleDB.(и т.д. и т.п.)

Вкратце. Задница, это когда я
1) запрашиваю запись, в зависимости от результата перезаписываю ее
2) через короткое время опять запрашиваю запись, в зависимости от результата перезаписываю ее
3) а при этом оказывается что запись на шаге (2) прочитана без учета изменений, сделанных на шаге (1)

Не, я конечно могу использовать проверенный ADODB....
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38418846
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, м.б. правда проще ADODB подключить через COM и забить на "новейшую технологию"?
ADODB проверена годами.
Если OleDb не умеет обновлять кэш (был проделан поиск и возникло такое подозрение), то будут геморои.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38418855
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

ADODB - это враппер над OLEDB для скриптовых языков если што
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38418875
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилADODB - это враппер над OLEDB если што
Смейся, смейся.
Но я задал конкретный вопрос:

Код: vbnet
1.
my_JRO.RefreshCache adoConn


Как обновить кэш в OLEDB?
И мне нужен ответ на него

1) Надо сделать ТАК-ТО и ТАК-ТО
или
2) В этом нет необходимости, ПОТОМУ ЧТО...
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38418888
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий772) В этом нет необходимости, ПОТОМУ ЧТО... надо делать коммит транзакции после апдейта
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38418908
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallarisнадо делать коммит транзакции после апдейта

Ты имеешь ввиду, что при всех командах
UPDATE DELETE INSERT INTO
надо делать BeginTrans/CommitTrans?

И в этом случае при любых командах SELECT
обновление кэша (my_JRO.RefreshCache adoConn)
не нужно.
Ну при условии, что все клиенты работающие с БД соблюдают правило BeginTrans/CommitTrans?
Аналог BeginTrans/CommitTrans в OleDB есть, я видел.
Если так, то я всегда это делаю.
Хотя возможно не делал на момент описания и решения проблемы через JRO.
Т.е. получается что и в VB6 (ADODB) кодах JRO лишний?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    'редактирование записи
    adoConn.BeginTrans
    adoConn.Execute ("UPDATE phone_book SET " & SQLString & " WHERE ID=" & CStr(str_data.id))
    adoConn.CommitTrans
...
    'удаление записи
    adoConn.BeginTrans
    adoConn.Execute ("DELETE * FROM phone_book WHERE ID = " & str_ID)
    adoConn.CommitTrans
...
    'добавление записи
    adoConn.BeginTrans
    adoConn.Execute "INSERT INTO phone_book (" & SQLInfo.SQL_fields & _
     ") VALUES(" & SQLInfo.SQL_values & ")"
    adoConn.CommitTrans
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38418970
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилДмитрий77,

ADODB - это враппер над OLEDB для скриптовых языков если што Если што, существует Microsoft.NET\Primary Interop Assemblies\adodb.dll

Скрипты на него не натянешь.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38418997
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

задай наконец вопрос
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419022
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation,

я задал вопрос.

Если я при всех командах
UPDATE DELETE INSERT INTO
делаю BeginTrans/CommitTrans

То верно ли что
я застрахован от следующей ситуации:
1) поменял строчку в таблице
2) А в следующем действии прочитал ту же строчку без учета изменений сделанных в п.(1)

И мне не надо делать JRO.RefreshCash? (в том числе для классического ADODB).

Считай что между UPDATE(строка) и SELECT(та же строка)
может пройти 1 миллисекунда (например).
Время релаксации-утрясания кэша для mdb БД = 5 секунд (кажется).
JRO.RefreshCash сбрасывает кэш.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419035
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что согласно этому:
10132170
The writer must start a transaction, using ADO's Connection.BeginTrans, prior to writing the data.
The writer must make the database updates and then commit the transaction (using ADO's Connection.CommitTrans).
-недостаточно

А нужно еще
The reader must call JRO.JetEngine.RefreshCache passing in it's connection prior to attempting to read the data.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419115
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молчание?

Я думаю так:

Он не только пишет в кэш.

The writer must start a transaction, using ADO's Connection.BeginTrans, prior to writing the data.
The writer must make the database updates and then commit the transaction (using ADO's Connection.CommitTrans).
-это решает вопрос записи в реальную БД.

Он гад еще и читает из кэша.
Поэтому сдается мне что
The reader must call JRO.JetEngine.RefreshCache passing in it's connection prior to attempting to read the data.
необходимо.

Потому что первая часть BeginTrans/CommitTrans лишь гарантирует, что в реальной БД будет обновленная строчка.
Но не гарантирует, что из кэша не будет затем прочитана НЕобновленная (старая) строчка.
А JRO это как раз гарантирует.

И получается что отсутствие механизма обновления кэша ПЕРЕД ЧТЕНИЕМ говорит не в пользу OleDB модели.

Короче подключаю COM.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419156
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77, OleDb это универсальная технология доступа к данным которая не обязана учитывать детали реализации БД Access. Попробуй подлючиться к своей БД с помощью ACE OLEDB 12 . Возможно в этом новом драйвере нет таких проблем, иначе придется использовать ADODB.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419221
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileПопробуй подлючиться к своей БД с помощью ACE OLEDB 12 . Возможно...
Не буду пробовать. Это непроверенная технология.
Да, лучше COM.

AntonariyИзопропилДмитрий77,

ADODB - это враппер над OLEDB для скриптовых языков если што Если што, существует Microsoft.NET\Primary Interop Assemblies\adodb.dll

Antonariy, а знаешь что странно.
Я счас добавил
COM -> Microsoft ActiveX Data Object 2.6 Library (как привык -проверено)
Путь -> C:\Program Files\Common Files\ system\ado\msado26.tlb

А он мне вбабахал:
Microsoft ActiveX Data Object 2.6 Library
Тип: COM
Версия 2.6.0.0
Но при этом
Путь:
C:\Windows\assembly\GAC\ADODB\7.0.3300.0_b03f5...\ADODB.dll

Он мне пытается намекнуть что то что предлагал ты и COM это вообще одно и то же.
Ссылку то на твой вариант Microsoft.NET\Primary Interop Assemblies\adodb.dll я удалил.
Но м.б. не надо было играться с твоим вариантом и теперь где-то в проекте что-то надо чистить.

И меня это несколько смущает.
В VB6 я ничего не таскал за проектом на тему ADODB.
И здесь я тоже ничего не хочу "кидать в папку с проектом", как ты написал.
Не возникнет проблем?

Счас допишу чуть кода "по старинке", посмотрю чего будет.

М.б. вообще ссылки в баню и As Object /Create Object забабахать чтоб .NET не шибко умничал?
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419283
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 Да, лучше COM.После прочтения статьи на MS скажу, что без вариантов.

Дмитрий77 Он мне пытается намекнуть что то что предлагал ты и COM это вообще одно и то же.
Ссылку то на твой вариант Microsoft.NET\Primary Interop Assemblies\adodb.dll я удалил.
Но м.б. не надо было играться с твоим вариантом и теперь где-то в проекте что-то надо чистить.

И меня это несколько смущает.
В VB6 я ничего не таскал за проектом на тему ADODB.
И здесь я тоже ничего не хочу "кидать в папку с проектом", как ты написал.Нет, это не одно и то же. Для COM-библиотек студия делает .net-обертку с приставкой Interop, это она таскается. А почему путь через GAC? Наверное обертка конкретно для COM ADODB по каким-то причинам существует в готовом виде.

Дмитрий77 Не возникнет проблем?В дотнете практически нет проблем совместимости, я по крайней мере ни с чем таким не сталкивался.

Дмитрий77 М.б. вообще ссылки в баню и As Object /Create Object забабахать чтоб .NET не шибко умничал?Тогда будет создаваться объект последней версии, а не 2.6
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419347
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДмитрий77 М.б. вообще ссылки в баню и As Object /Create Object забабахать чтоб .NET не шибко умничал?Тогда будет создаваться объект последней версии, а не 2.6
А все равно будет последняя версия.
Обсуждали уже
2.6 я пишу по принципу "Проверено, не рвануло, значит и дальше не рванет"
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419419
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Antonariyпропущено...
Тогда будет создаваться объект последней версии, а не 2.6
А все равно будет последняя версия.
Обсуждали уже
2.6 я пишу по принципу "Проверено, не рвануло, значит и дальше не рванет"
Antonariy, у меня плохие новости.
Этот .NET гораздо тупее VB6. Тупее чем мы думали.

Добавляю ADODB как COM (на XP)
Переношу exe на 7 x64
Ругается матом.

Удаляю COM, добавляю adodb.dll что ты сказал.
Переношу exe на 7 x64
Ругается матом.
Кидаю adodb.dll в папку с exe, все равно ругается.

Убираю вообще все ссылки.
Пишу (проверенным способом, устраняющим все конфликты версий):
Код: vbnet
1.
2.
3.
4.
  Public adoConn As Object ' As ADODB.Connection
  Public objRecSet As Object ' As ADODB.Recordset
  adoConn = CreateObject("ADODB.Connection") ' New ADODB.Connection
... и далее по тексту

Наконец запускается.

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

Что думаешь?
Net-exeшник часом не как x64 под 7-x64 стартует?
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419467
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 Удаляю COM, добавляю adodb.dll что ты сказал.
Переношу exe на 7 x64
Ругается матом.Ну х.з., у меня так работало.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419476
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 Что думаешь?Думаю, можно не грохать. Вряд ли студия разучилась удалять инфу о неиспользуемых компонентах.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419511
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyНу х.з., у меня так работало.
Судя по тому что ты здесь указал на C:\Program Files (x86) ты делал exe изначально на x64.
Потом там еще есть опции компиляции (Target CPU x86, x64, универсальный какой-то, я Рихтера начал было читать, хотя забил).
Хотя у меня в VB2010 EE нету, да и бог с ним, надеюсь что exe все-таки получается x86.

Но, ты ж понимаешь что вариант ХЗ меня не устроит, поэтому видимо придется делать CreateObject. Но это неудобно.
В VB6 при том что я ленился с ADODB менять на CreateObject (хотя хотел), проблем нигде не было.

>Думаю, можно не грохать.
Грохнуть-восстановить ссылку 5 сек, дольше код редактировать если надо что-то исправить (со слепыми объектами работать неудобно).
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419618
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Код: vbnet
1.
2.
3.
4.
5.
6.
Dim COMMAND As New OleDb.OleDbCommand("SELECT * FROM phone_book ORDER BY ID DESC", CONNECTION)
    Dim DATAREADER As OleDb.OleDbDataReader = COMMAND.ExecuteReader(CommandBehavior.Default)
    While DATAREADER.Read() = True
      'работаем с записью
    End While
    DATAREADER.Close()



Вот жутко интересно, под скромным комментарием 'работаем с записью, что скрывается?
Исользуете ли Вы DataTable?

авторВкратце. Задница, это когда я
1) запрашиваю запись, в зависимости от результата перезаписываю ее
2) через короткое время опять запрашиваю запись, в зависимости от результата перезаписываю ее
3) а при этом оказывается что запись на шаге (2) прочитана без учета изменений, сделанных на шаге (1)

запрашиваю запись - откуда, снова запрос к БД или из DataTable?
перезаписываею ее - Это означает, что Вы изменили DataRow из DataTable и выполнили операцию Update

через короткое время опять запрашиваю запись - снова запрос к БД или будет достаточно обратиться за данными к DataTable?
Если будет запрос к БД, то будь добр результат положи в DataTable

в зависимости от результата перезаписываю ее - изменения вносим в DataRow соответствующей табл. данных и выполняем Update

а при этом оказывается что запись на шаге (2) прочитана без учета изменений, сделанных на шаге (1) - Ээээээ, уж точно это не проблема ADO .NET, это уже логика работы сервера (уровни изолированности транзакций).
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419716
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ermak,

Все не в кассу. Имеем:

1) База Access
2) Две программы с разными, само собой, соединениями с этой базой.
3) У каждого соединения свой кэш.
4) Изменения, сделанные одним соединением, не успевают за требуемый очень короткий промежуток времени отразиться в кэше другого соединения.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419797
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy...
4) Изменения, сделанные одним соединением, не успевают за требуемый очень короткий промежуток времени отразиться в кэше другого соединения. А должны? Откуда другое соединение знает, что кэш должен обновиться?
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419811
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovAntonariy...
4) Изменения, сделанные одним соединением, не успевают за требуемый очень короткий промежуток времени отразиться в кэше другого соединения. А должны? Откуда другое соединение знает, что кэш должен обновиться?Не должны и не знает. А надо. В этом и проблема.
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419861
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyAlex Kuznetsovпропущено...
А должны? Откуда другое соединение знает, что кэш должен обновиться?Не должны и не знает. А надо. В этом и проблема.Значит должно быть уведомление от одного приложения другому, что нуна данные в кэше обновить...
...
Рейтинг: 0 / 0
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
    #38419976
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема не в уведомлениях, которые нафиг не нужны при миллисекундных периодах (кеш нужно обновлять перед запросом), а в отсутствии в дотнте инструментов для обновления кэша.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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