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

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

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

Сообщение АндрейБ » 21.08.2014 (Чт) 16:43

Объясню суть проблемы. В некой таблице X в базе Y.mdb хранятся данные.
1.Я в VB6 через DAO добавляю в таблицу X 10 записей и сразу открываю отчет, хранящийся в этой же базе Y и строящейся на таблице X на печать, и часто получается что какие-то записи из таблицы не попадают в отчет. Приходиться делать паузу искусственно, пока обновление таблицы устаканиться.
2.К базе Y имеет доступ 3 пользователя по сети. Они сохраняют в таблице X записи (добавляют и редактируют). И периодически, считывают то что делают другие пользователи. Так же все через DAO. И реально иногда процесс зависает на 5-10 секунд, пока не обновиться запись, что бы считать нужное изменение.

Можно как то ускорить процесс обновления записи в MDB, процессор JET - дать ему как то кеша много?
Кто ищет, тот всегда найдет ...

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

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

Сообщение ger_kar » 21.08.2014 (Чт) 17:40

На основе тех данных, что тут приведены (и отсутствию других) смею предположить, что проблема кроется в блокировках, которыми блокируется видимо вся таблица. Нужно как минимум блокировать только записи, которые будут меняться. А как максимум вообще лучше бы поменять всю архитектуру приложения, использовать ADO DB для того, что-бы работать с отключаемыми рекордсетами с пакетным обновлением и избавиться от не нужных периодических считываний из базы, перейдя на систему уведомлений. ADO DB нужно в основном, чтобы заюзать отключаемые рекордсеты. Насколько я помню в DAO такой возможности нет.
Бороться и искать, найти и перепрятать

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

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

Сообщение АндрейБ » 25.08.2014 (Пн) 16:32

Подскажите как через ADO получить доступ к запароленой базе MDB (не через элемент управления ADODB, а напрямую)?
Set DBS= New ADODB.Connection
DBS.Provider = "Microsoft.Jet.OLEDB.4.0"
DBS.ConnectionString = ("C:\DB\A.mdb")
DBS.Open - здесь выдает ошибку что не верный пароль, я уже юзал по разному ни как не могу понять, как и куда писать.
Подскажите пожалуйста.
Кто ищет, тот всегда найдет ...

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 25.08.2014 (Пн) 16:40

АндрейБ писал(а):ни как не могу понять, как и куда писать.

Не знаю, но подозреваю, что надо переписать connection string так, чтобы в ней был пароль.

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

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

Сообщение АндрейБ » 25.08.2014 (Пн) 16:50

с паролем нашел - всем спасибо.

ger_kar - спасибо за совет. Сейчас поюзаю, сообщу результат отличия DAO от ADO.
Кто ищет, тот всегда найдет ...

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

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

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

для информации по паролю:
DBS.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" + "C:\DB\A.mdb") + ";Jet OLEDB:Database Password=AAA;"

:) в продолжение темы ADO. Я до этого пользовался DAO и когда я открывал рекордсет из MDB - то все ключи (и настройки полей по возрастанию, они были как было прописано в MDB).
А в ADO я открыл рекордсет и у меня записи идут не по порядку - т.е. рекордсет ADO надо настраивать при открытие?
Кто ищет, тот всегда найдет ...

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

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

Сообщение ger_kar » 25.08.2014 (Пн) 17:41

Не знаю как в плане настройки (имеется ввиду предварительная настройка), но порядок сортировки можно указывать в запросе или же после запроса программно управлять сортировкой через метод рекордсета Sort.
Бороться и искать, найти и перепрятать

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

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

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

Теперь я так и сделал, прописал возрастание нужных полей при открытии рекордсет.
У меня вопрос, если поле у меня индексированное в MDB - то при открытии рекордсет, индексирование в рекордсет сохраниться (или надо рекодсет по полю то же надо инексировать)?

На счет блокировок не подскажите, в DAO для редактировния записи просто пишем RST.EDIT ... RST.UPDATE
в ADO .EDIT нет, хочу изменить значение и перехожу на следующую запись MoveNext - ругается что что рекордсет не поддерживает обновления, как изменить блокировки в рекордсет, что бы можно было редактировать?
Кто ищет, тот всегда найдет ...

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

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

Сообщение ger_kar » 25.08.2014 (Пн) 18:22

АндрейБ писал(а):На счет блокировок не подскажите, в DAO для редактировния записи просто пишем RST.EDIT ... RST.UPDATEв ADO .EDIT нет, хочу изменить значение и перехожу на следующую запись MoveNext - ругается что что рекордсет не поддерживает обновления, как изменить блокировки в рекордсет, что бы можно было редактировать?
Код в студию! А так, без кода могу предположить, что выбраны неправильные параметры рекордсета.
Бороться и искать, найти и перепрятать

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

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

Сообщение АндрейБ » 26.08.2014 (Вт) 9:15

'В таблице одна запись, надо просто изменить значение.
Dim DBS As ADODB.Connection
Dim RST As ADODB.Recordset
Set DBS = New ADODB.Connection
DBS.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" +C:\A.mdb") + ";Jet OLEDB:Database Password=AA;"
Set RST = DBS.Execute("Select * From AAA;")
RST2.MoveFirst
RST![AAAA] = Now()
RST.MoveNext - ругается что рекордсет не поддерживает обновления.
Кто ищет, тот всегда найдет ...

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

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

Сообщение АндрейБ » 26.08.2014 (Вт) 9:42

:) - вот правильный вариант описание рекордсет ADO
RST2.Open "dt", DBS0, adOpenDynamic, adLockOptimistic
или
RST.Open "Select * From AAA", DBS, adOpenDynamic, adLockOptimistic - ругается Object variable or with block variable not set - типа я не указал переменую какую-то, в чем ошибка
Кто ищет, тот всегда найдет ...

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

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

Сообщение АндрейБ » 26.08.2014 (Вт) 10:01

Set RST = New ADODB.Recordset - ADO все более утонченная система доступа к данных чем DAO - не описал новый рекордсет до конца вот тебе и ошибочка.
Всем спасибо буду читать литературу.
Кто ищет, тот всегда найдет ...

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

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

Сообщение ger_kar » 26.08.2014 (Вт) 10:32

Ну все правильно, для того, чтобы рекордсет был обновляемым, его и нужно предварительно задать как обновляемый.
Код: Выделить всё
Dim DBS As ADODB.Connection
Dim RST As ADODB.Recordset

Set DBS = New ADODB.Connection
DBS.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" +C:\A.mdb") + ";Jet OLEDB:Database Password=AA;"

Set RST = New ADODB.Recordset

With RST
        .CursorType = adOpenDynamic
        .LockType = adLockOptimistic
        .CursorLocation = adUseClient
        .Open "Select * From AAA;", DBS
End With

RST.MoveFirst
RST![AAAA] = Now()
RST.MoveNext
Бороться и искать, найти и перепрятать

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

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

Сообщение АндрейБ » 26.08.2014 (Вт) 14:55

ger_kar - спасибо за помощь, но скорость ADO не увеличилась по сравнению c DAO. Я думаю проблема лежит в самой структуре базы *.MDB.
Я сделал базу DB.MDB, в ней таблица DT и одно поле dt - дата/время.
Создал новый проект в VB6, установил элемент управления Timer, Interval = 1000 - 1 секунда.
И стал изменять запись, каждый интервал менять dt = now - текущее дата/время в системе. Каждую секунды в программе происходило обновление записи,
я это проверил. Но когда я зашел в MDB в акцессе, то поле обновлялось раз в 5 секунд (в 96% случаев, в 2% 4 секунд, и в 2% 6 секунд - грубо).
Тогда я написал новый проект и вставил код, который стал перехватывать изменения через рекордсет.Requery - получилось примерно то же самое.
Т.е. одна прога изменяет данные а другая считывает - вся работа ведется в одной базе, в одной таблице, с одной единственной записью - время обновления 5 секунд .
Как то можно ускорить движок JET - кешировать, какие-то настройки сделать?
Кто ищет, тот всегда найдет ...

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

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

Сообщение АндрейБ » 26.08.2014 (Вт) 15:08

ger_kar - я наверное тебе надоел:)
Решил проблему скорости обновления, зашел в акцесс / сервис / параметры / другие / блокирока по умолчанию = изменяемой записи - и все заработало
как я и хотел.
Всем спасибо. Может кому то и пригодиться.
Теперь не знаю - был ли смысл переходит с DAO на ADO?
Кто ищет, тот всегда найдет ...

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

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

Сообщение ger_kar » 26.08.2014 (Вт) 15:34

АндрейБ писал(а):Решил проблему скорости обновления, зашел в акцесс / сервис / параметры / другие / блокирока по умолчанию = изменяемой записи - и все заработалокак я и хотел.
Ну так я же про это написал еще в самом первом посте
ger_kar писал(а):На основе тех данных, что тут приведены (и отсутствию других) смею предположить, что проблема кроется в блокировках, которыми блокируется видимо вся таблица. Нужно как минимум блокировать только записи, которые будут меняться.
И видимо это осталось без внимания.
АндрейБ писал(а):Теперь не знаю - был ли смысл переходит с DAO на ADO?
Если сравнивать скорость DAO И ADO при работе с *.mdb, то скорость выше у DAO. В нете можно даже найти сравнительную таблицу (видел давно и уже не помню где точно). Смысл использования ADO состоит не в скорости работы, ибо в многопользовательском варианте это уже не так важно, а смысл в том, что-бы использовать отключаемые рекордсеты и не блокировать лишнее время таблицы или записи. Только с ADO возможен вариант: Подключение, чтение данных, отключение, правка пользователем данных без блокировок (а это как правило самая длительная часть), опять подключение и пакетное изменение данных в базе с разгуливанием конфликтов. И тогда при многопользовательском режиме скорость будет больше чем у DAO. Только ADO даст тебе возможность в период правки отключенного рекордсета отключать и само соединение к базе (в том числе и вообще можно вытащить сетевой кабель), а перед обновлением данных проверять корректность соединения, и делать обновление базы если оно существует, или предупреждать юзера об его отсутствии. Т.е. такой сценарий: Открыл данные начал правку, выдернулся (может даже случайно) сетевой кабель. Нажал сохранить - получил сообщение о недоступности базы, проверил и восстановил соединение и сохранил без всяких эксцессов свои данные. Ну и многое другое, чего нельзя сделать в DAO.
Бороться и искать, найти и перепрятать

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

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

Сообщение ger_kar » 26.08.2014 (Вт) 15:42

Плюс еще и этот нюанс
Бороться и искать, найти и перепрятать

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

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

Сообщение АндрейБ » 26.08.2014 (Вт) 16:06

ger_kar спасибо тебе.
Кто ищет, тот всегда найдет ...

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

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

Сообщение АндрейБ » 27.08.2014 (Ср) 10:01

[/quote]Нужно как минимум блокировать только записи, которые будут меняться.[/quote]
Почитал статью - спасибо, базы открываю с блокировкой только по записи.
В акцессе просматривая запись обновления идет четко каждую секунду, а вот в коде VB есть не большая задержка 1-2 секунды.
Что можно еще сделать что бы ускорить процесс?
В акцесс / сервис / параметры / другие - есть:
время ожиданий OLE/DDE, период обновления и т.д. - там есть смыл поковыряться?
Кто ищет, тот всегда найдет ...

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

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

Сообщение ger_kar » 27.08.2014 (Ср) 10:22

АндрейБ писал(а):В акцессе просматривая запись обновления идет четко каждую секунду, а вот в коде VB есть не большая задержка 1-2 секунды.
А соединение с базой устанавливается каждый раз при обновлении или соединение устанавливается один раз, а потом используется готовое?
АндрейБ писал(а):В акцесс / сервис / параметры / другие - есть:время ожиданий OLE/DDE, период обновления и т.д. - там есть смыл поковыряться?
Там ковыряться смысла нет ибо эти параметры влияют только на работу из среды Access.
При работе с ADO нужно задавать параметры либо в строке подключения, либо используя динамические свойства объекта Connection.
Про параметры MS JET можно почитать здесь
Про ADO информация здесь
Примеры соответственно здесь
Неплохой ресурс по ADO есть тут
Бороться и искать, найти и перепрятать

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

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

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

В VB написал два проекта - одна программа вносит запись (одно поле = 1), вторая проверяет состояние записей каждую 0,1 секунды,
и если запись появилась, она ее редактирует (= 2), первая видит изменение второй (то что стало =2) и выдает сообщение "ОК- на это уходит 3-5 секунд.
Соединения с базой описал при загрузке формы один раз. Рекодсет то же там описал
Рекордсет обновляю через .Requery
Не знаю может это нормально для MDB - но мне кажется как то все долго.

Почитаю ссылки что ты дал, может что умного найду.
Кто ищет, тот всегда найдет ...

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

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

Сообщение АндрейБ » 05.09.2014 (Пт) 17:57

Не могу ни как получить результат в скорости обновления записей в JET. Уже экспериментировал по разному.
Одна программа через Timer интервал 1 секунда корректирует запись внося текущее системное время в базу данных JET в таблицу с одним полем (и в таблица соответственно всего одна запись).
Изначально в акцессе обновление шло примерно 1 раз в пять секунд, но после того как при открытие базы данных я прописал "блокировка на изменяемую запись"
.Properties("Jet OLEDB:Database Locking Mode") = 1
в акцессе запись стала меняться каждую секунду. (Спасибо ger_kar)
Но вторая программа считывает эту запись из этой таблице,
при открытие базы данных я прописал "блокировка на изменяемую запись"
и при открытие набора записей я прописал тип курсор, тип блокировки и положение курсора (здесь я экспериментировал по разному):
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.CursorLocation = adUseClient
По идею все должно быстро обновляться как в Акцессе:
Но вторая программа получает обновления от JET примерно раз в пять секунд (как будто старая ситуация сохранилась с блокировкой).
Все делаю через ADO.
Почитал ссылки то что дал ger_kar, но сам ничего конкретного найти не смог по данному вопросу.
Есть у кого соображения по данному вопросу?
Кто ищет, тот всегда найдет ...

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

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

Сообщение ger_kar » 05.09.2014 (Пт) 18:44

Вот читаю
АндрейБ писал(а):Одна программа через Timer интервал 1 секунда корректирует запись внося текущее системное время в базу данных JET в таблицу с одним полем (и в таблица соответственно всего одна запись).
И никак не могу понять смысла этого действа. Зачем нужно так часто менять одну и ту-же запись?
АндрейБ писал(а):Но вторая программа получает обновления от JET примерно раз в пять секунд (как будто старая ситуация сохранилась с блокировкой).Все делаю через ADO.
Ну так оно и есть. Если имеется таблица, а в ней есть одна единственная запись, то по сути
[блокировка таблицы] = [блокировке записи]
Далее:
АндрейБ писал(а):Изначально в акцессе обновление шло примерно 1 раз в пять секунд, но после того как при открытие базы данных я прописал "блокировка на изменяемую запись".Properties("Jet OLEDB:Database Locking Mode") = 1
в акцессе запись стала меняться каждую секунду.
А причем тут Access? Или для одной базы (одного файла mdb) будут работать разные клиенты? Клиент на VB6 и сам Access?
АндрейБ писал(а):при открытие базы данных я прописал "блокировка на изменяемую запись"
В каком месте это прописано? С какими параметрами открывается соединение Access и соединение ADO? Какой режим доступа выбран?
Но самое главное совершенно непонятно, что собственно требуется? Т.е. какова задача, что она должна решать, и каков должен быть результат.
Ибо смысл написанного
АндрейБ писал(а):и при открытие набора записей я прописал тип курсор, тип блокировки и положение курсора (здесь я экспериментировал по разному):.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.CursorLocation = adUseClient
Зависит от того, что требуется получить. Если просто прочитать данные, то лучше использовать одно, если их менять то другое и т.д.
Бороться и искать, найти и перепрятать

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

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

Сообщение ger_kar » 05.09.2014 (Пт) 18:55

АндрейБ писал(а):Есть у кого соображения по данному вопросу?
Соображения такие. Проблема возникла от непонимания сути. И какой бы не была задача, очевидно, что проблема в том, что изначально выбран неверный подход для её решения. И помочь тут вряд ли кто в состоянии, ибо суть решаемой задачи никому не известна. Поэтому самое лучшее, что возможно сделать в данной ситуации - это описать суть проблемы (задачи) абстрагируясь от деталей и способов её реализации. Т.е. четко сформулировать задачу, что дано и что необходимо получить. Но делать это следует так, что-бы формулировка была понятна другим. И вот тогда я думаю коллективный разум (если поймет суть поставленной задачи) наверняка предложит оптимальное решение.
Бороться и искать, найти и перепрятать

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

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

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

Я не программист (в том смысле не получал высшее по этой специальности, но мне это дело очень нравиться - минимум хобби) и волею судьбы сам пишу на предприятии автоматизацию - поэтому прошу делать на это поправку моего уровня.
У нас 10 компьютеров (пользователей) в локальной сети, все вносят данные, корректируют, удаляют, формируют отчеты. Сейчас у нас есть рабочая система (уже 3 по счету мною написанная за 10 лет, начинал первую в акцессе (таблицы, запросы, формы, отчеты, макросы и т.д.), вторую и третью на VB6 и хранилище брал JET - для меня самое простое для обработки) - но эта система уже не отвечает нашим требованиям и запросам по работе. Поэтому решил написать новый проект, с правами доступа разных пользователей к разным формам системы и разным инструментам, защищенная от падения, с архивацией данных и т.д. и т.п. - а главное эффективная - а одним из параметров эффективности является скорость. Поэтому перед началом работы я решил провести ряд подготовительным наработок, кроме структуры базы данных (точнее нескольких), их взаимодействии, структуры таблиц и их индексирования, решил еще поработать со скоростью доступа к данным. В самом начале я уже описал пару ситуаций когда время ожидания обновлений в JET тормозит процесс или вообще создает ошибки в работе.

Сейчас мой эксперимент прост. Я написал два проекта один вносит данные в Базу А, в таблицу АА через Таймер интервал 1 секунда значение текущего системного времени, а второй параллельно запущенный так же через Таймер интервал 1 секунда производит обновление набора записей в этой же таблице АА и выводит в ТетхBox это значение. Получается что второй проект выводит обновление 1 раз в пять секунд. Хотя я параллельно захожу в Акцесс и визуально открываю таблицу АА, и перевожу курсов на следующую запись и снова на предыдущую - значение поля обновляется в базе ежесекундно. Если у меня одним пользователь внес данные в таблицу АА, а второй может увидеть их только через 5 секунд (периодически и дольше), это не очень быстро в моем понимании.
Код: Выделить всё
ПРОЕКТ 1:
Option Explicit
'БАЗЫ ДАННЫХ 'ADO
Dim DBS1 As ADODB.Connection
'ТАБЛИЦЫ 'ADO
Dim RST1 As ADODB.Recordset

Private Sub Form_Load()
'Описание баз данных и таблиц 'ADO
Set DBS1 = New ADODB.Connection
With DBS1
    .Provider = "Microsoft.JET.OLEDB.4.0"
    .Properties("Data Source") ="C:\DB\A.mdb")
    .Properties("Jet OLEDB:Database Locking Mode") = 1
    .Properties("Jet OLEDB:Database Password") = "A"
    .Open
End With
Set RST1 = New ADODB.Recordset 'Таблица дата/время
With RST1
    .CursorType = adOpenDynamic
    .LockType = adLockOptimistic
    .CursorLocation = adUseClient
    .Open "AA", DBS1
End With
End Sub

Private Sub Timer1_Timer()
'Обновляем значение поля в таблице каждую секунду
RST1![dt] = Now()
RST1.Update
End Sub

Код: Выделить всё
ПРОЕКТ 2:
Option Explicit
'БАЗЫ ДАННЫХ 'ADO
Dim DBS1 As ADODB.Connection
'ТАБЛИЦЫ 'ADO
Dim RST1 As ADODB.Recordset

Private Sub Form_Load()
'Описание баз данных и таблиц 'ADO
Set DBS1 = New ADODB.Connection 'SERVER
With DBS1
    .Provider = "Microsoft.JET.OLEDB.4.0"
    .Properties("Data Source") ="C:\DB\A.mdb")
    .Properties("Jet OLEDB:Database Locking Mode") = 1
    .Properties("Jet OLEDB:Database Password") = "A"
    .Open
End With
Set RST1 = New ADODB.Recordset 'Таблица дата/время
With RST1
    .CursorType = adOpenDynamic
    .LockType = adLockOptimistic
    .CursorLocation = adUseClient
    .Open "AA", DBS1
End With
End Sub

Private Sub Timer1_Timer()
'Обновляем значение TextBox в форме каждую секунду, беря значения из таблице
RST1.Requery
TextBox1.Text = RST1![dt]
End Sub
Последний раз редактировалось АндрейБ 08.09.2014 (Пн) 17:33, всего редактировалось 2 раз(а).
Кто ищет, тот всегда найдет ...

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

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

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

ger_kar вы меня назовете дилетантам, но я поменял код во втором проекте и получил нужный результат:
Из Private Sub Form_Load() - все убрал.
А вот в таймере прописал так:
Код: Выделить всё
Private Sub Timer1_Timer()
'Описание баз данных и таблиц 'ADO
Set DBS1 = New ADODB.Connection
With DBS1
.Provider = "Microsoft.JET.OLEDB.4.0"
.Properties("Data Source") ="C:\DB\A.mdb")
.Properties("Jet OLEDB:Database Locking Mode") = 1
.Properties("Jet OLEDB:Database Password") = "A"
.Open
End With
Set RST1 = New ADODB.Recordset 'Таблица дата/время
With RST1
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.CursorLocation = adUseClient
.Open "AA", DBS1
End With
'Обновляем значение TextBox в форме каждую секунду, беря значения из таблице
RST1.Requery
TextBox1.Text = RST1![dt]
RST1.Close 'Закрываем набор записей
DBS1.Close 'Закрываем соединения с базой
End Sub


И теперь каждую секунду второй проект получает обновления из базы данных А, таблице АА.
У меня вопрос - можно сделать то же самое только не закрывая и открываю каждый раз соединения с базой данных?
Последний раз редактировалось АндрейБ 08.09.2014 (Пн) 17:33, всего редактировалось 1 раз.
Кто ищет, тот всегда найдет ...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

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

Сообщение Хакер » 08.09.2014 (Пн) 13:57

АндрейБ, хочешь получить предупреждение?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

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

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

Хакер писал(а):АндрейБ, хочешь получить предупреждение?

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

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.09.2014 (Пн) 15:59

АндрейБ писал(а):Я пишу конкретную ситуацию, с примером кода, проблема в моем понимании есть, решить ее я не могу на своем уровне понимания процессов.

Я так думаю, предупреждение подразумевается за то, что ты код пихаешь в посты не оборачивая его тегом [code] ;)

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

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

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

Понял - извиняюсь.
Где можно почитать как оформлять на форуме эти вещи правильно?
Кто ищет, тот всегда найдет ...

След.

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

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

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

    TopList