Скорость обновления записей в MDB

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Скорость обновления записей в MDB

Сообщение ger_kar » 08.09.2014 (Пн) 17:30

АндрейБ писал(а):Я не программист (в том смысле не получал высшее по этой специальности, но мне это дело очень нравиться - минимум хобби) и волею судьбы сам пишу на предприятии автоматизацию - поэтому прошу делать на это поправку моего уровня.
Я кстати тоже самоучка и официального образования в области программирования не имею, но это по сути ни на что не влияет.
АндрейБ писал(а):ger_kar вы меня назовете дилетантам, но я поменял код во втором проекте и получил нужный результат:
Ну вот, теперь нужно внимательно проанализировать ситуацию и сделать соответствующие выводы. Я кстати не зря давал ссылки на справочную информацию касаемую, как самого ADO, так и MS JET. И то, что можно было прочитать по этим ссылкам - это только лишь верхушка айсберга, ибо нюансов настолько много, что все и не описать. Ну так вот, для того, что-бы все получалось, самое главное - это понять суть, а она совершенно не очевидна. То, что написано на многих популярных ресурсах про ADO - информация весьма поверхностная, которая не даст тех глубин понимания, как официальная справочная информация. Я пока понял, провел не одну бессонную ночь. Ситуация осложнялась тем, что я английский я нифига не знаю, но благо с современными переводчиками это, хоть и проблема, но не такая большая, что-бы отказаться от чтения англоязычной документации. И главное здесь то - что нужно не просто прочитать, а понять суть (соль) написанного. Так что придется слегка попотеть.
Ну так вот, начать следует с того, что нужно открыть мастер подключения выбрать провайдер "Microsoft.Jet.OLEDB.4.0" и далее перейдя на последнюю вкладку "Все" ты увидишь множество параметров. Так вот нужно их все выписать (скопировать) и далее методично и основательно для себя все их проработать и понять суть и назначение каждого из них. По крайней мере я делал именно так. Это только самое начало. Далее нужно открыть в Объект браузере TLB для ADODB и сделать тоже самое для каждого из свойств, методов, событий, перечислений, констант. Т.е. перешерстить всю библиотеку. Но даже после этого останется масса не понятых нюансов, осознавать которые приходится впоследствии, при решении множества реальных задач. Что-то постигается поиском и прочтением информации, что-то только путем постановки экспериментов.
Кстати то, что я пишу - прошу воспринимать именно как совет, а не как нравоучения или еще, что либо-подобное. Может оно и не совсем верно, но я просто описываю то, каким образом я сам добирался до "Соли". Могу например дать ссылку на Немного об использовании ADO в Delphi. ( часть 3 ) То что там присутсвует Delphi не должно смущать, ибо главное там не Delphi, а таки ADO, про которое и идет повествование. Эта ссылка у меня была в закладках, поэтому я ее просто скопировал, но нужно отыскать первые две статью (их всего 3) и начать естественно с самой первой. И таких нюансов на самом деле пруд пруди. Даже то, что там написано, хоть в целом и верно, но там опять же не вся информация. В какой момент устанавливать нужные свойства и почему они иногда не работают, а точнее сбрасываются, я устанавливал опытным экспериментальным путем.Соли
Последний раз редактировалось ger_kar 08.09.2014 (Пн) 18:27, всего редактировалось 1 раз.
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Скорость обновления записей в MDB

Сообщение ger_kar » 08.09.2014 (Пн) 17:39

АндрейБ писал(а):Понял - извиняюсь.Где можно почитать как оформлять на форуме эти вещи правильно?
Касательно кода сделай так. Открой сейчас свои посты с кодом и нажми на кнопочку 'правка'. Далее нужно выделить фрагмент с кодом и нажать кнопочку 'code' над окном редактирования. И форум сам обрамит твой код нужным тегом. В принципе можно тоже самое сделать вручную, без кнопки code. Для этого нужно После фрагмента своего кода вставить тег [/code] и перед фрагментом также вставить тег [code]
Бороться и искать, найти и перепрятать

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Скорость обновления записей в MDB

Сообщение АндрейБ » 08.09.2014 (Пн) 17:40

ger_kar - спасибо, иногда важен не ответ а поддержка.
Ссылку если дадите - буду премного благодарен.
Кто ищет, тот всегда найдет ...

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Скорость обновления записей в MDB

Сообщение ger_kar » 08.09.2014 (Пн) 18:03

Продолжаю предыдущий пост, так как пришлось немного отвлечься на твой последний пост :).
Ну так вот. Например описанной тобой проблемы у меня в процессе работы с ADO и MS Jet никогда не было.
Для подключения (без сервис провайдера MSDataShape.1) всегда использую такую строку подключения:
Код: Выделить всё
"Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Jet OLEDB:Database Password=[@PASSWORD];" _
& "Mode=ReadWrite|Share Deny None;" _
& "Persist Security Info=False;" _
& "Data Source=[@DBPATH];"

[@PASSWORD] и [@DBPATH] это просто теги для замены на реальные параметры.
Можешь сразу в добавить в строку параметр для блокировок только записей.
Подозреваю, что при той строке подключения, которую используешь ты, не указывая при этом режим доступа, по умолчанию используется режим монопольного доступа, что и вызывает блокировку. Кроме этого сам процесс постоянного изменения одной и той же записи, так как это делается у тебя - явление аномальное. Тут логика такая. Если даже сама таблица и не блокируется, то в ней всего одна единственная запись к которой и осуществляется доступ. И любое открытие рекордсета (если он открывается не только для чтения) будет приводить к блокировке этой единственной записи. Ну а другим то в это время что достанется?
Попробуй сначала использовать режим доступа ReadWrite Or Share Deny None и посмотри, что произойдет (с постоянно подключенным соединением).
И далее, при старой строке соединения попробуй, тот рекордсет, который открывается для считывания, открывать с режимом - только для чтения.
По идее любой из способов должен снять проблему. _
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Скорость обновления записей в MDB

Сообщение ger_kar » 08.09.2014 (Пн) 18:06

Ну вот, после исправления и обрамления кода соответствующим тегом, стало гораздо приятнее и читабельней :)
АндрейБ писал(а):Ссылку если дадите - буду премного благодарен.
Ссылку на что? Все понял и исправил :)
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Скорость обновления записей в MDB

Сообщение ger_kar » 13.09.2014 (Сб) 8:47

Ну и что получилось? Дал какой нибудь эффект с изменениями параметров подключения?
Бороться и искать, найти и перепрятать

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Скорость обновления записей в MDB

Сообщение АндрейБ » 17.02.2015 (Вт) 18:19

Извиняюсь за паузу, как ни как кризис в стране, баксы скупал :wink:
ger_kar пытаюсь через строку подключения
Код: Выделить всё
Set DBS1 = New ADODB.Connection
DBS1.ConnectionString ... то что было предложено

ругается, наверное что то с синтаксисом? Я недельку другую почитаю литературу, поюзаю варианты, как будет результат (или не будет) сообщу.
просто открытие и закрытие которое я описал работает, но когда базу начинает более одного пользователя, сразу вылетают ошибки периодически, типа заблокировано тем то и тем то.
Кто ищет, тот всегда найдет ...

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Скорость обновления записей в MDB

Сообщение АндрейБ » 04.03.2015 (Ср) 16:21

ger_kar - твою строку подключения не смог сделать, ругается на параметры, например на
Код: Выделить всё
"Persist Security Info=False;".

Но в процессе экспериментов смог лучше разобраться с типами курсоров и блокировок в рекордсетах.
Это упростило, ускорило и сделало практически безошибочным процесс работы проекта. Но все равно, если при изменение данных в рекодсете, не закрыть соединение с базой данных,
реально обновление записи идет с задержкой в 5 секунд. Поэтому каждый раз после обновления записи, делаю закрытие соединения и заново открываю соединение для дальнейшей работы.
Буду дальше работать в этом направление - будет результат сообщу.
Кто ищет, тот всегда найдет ...

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Скорость обновления записей в MDB

Сообщение ger_kar » 05.03.2015 (Чт) 17:00

АндрейБ писал(а):ger_kar - твою строку подключения не смог сделать, ругается на параметры, например на

А какая версия MS JET используется? Какие еще параметры подключения используются? Может применяются взаимоисключающие параметры?
Покажи полный код строки подключения.
У меня с MS JET4.0 Все работает четко и без ошибок.
Бороться и искать, найти и перепрятать

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Скорость обновления записей в MDB

Сообщение АндрейБ » 06.05.2015 (Ср) 18:54

Код: Выделить всё
Set DBS0 = New ADODB.Connection 'I
With DBS0
    .Provider = "Microsoft.JET.OLEDB.4.0"
    .Properties("Data Source") = App.Path + "\1.mdb"
    .Properties("Jet OLEDB:Database Locking Mode") = 1
    .Properties("Jet OLEDB:Database Password") = "1"
    .CursorLocation = adUseClient
    .Open
End With
Set RST0 = New ADODB.Recordset
With RST0
    .CursorType = adOpenDynamic
    .LockType = adLockOptimistic
    .Open "1", DBS0
End With
Кто ищет, тот всегда найдет ...

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, SemrushBot, Yandex-бот и гости: 55

    TopList