powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Доступ к БД
25 сообщений из 29, страница 1 из 2
Доступ к БД
    #38183203
Slash232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim conn5 As Object
Set conn5 = CreateObject("ADODB.Connection")
Dim rst5 As Object
Set rst5 = CreateObject("ADODB.Recordset")
conn5.Provider = "Microsoft.Jet.OLEDB.4.0"
conn5.Properties("Data Source").Value = Module.bdPath
conn5.Open
rst5.Open "Select * from Positions", conn5, adOpenStatic, adLockReadOnly
While Not rst5.EOF
   'тут данные перебираються и вносяться в listview1
rst5.movenext
wend
conn5.Close
Set conn5 = Nothing



При попытке доступа к этим данным одновременно с двух машин в момент переборки сильно начинает тормозить программа на двух машинах. Подскажите как можно от этого уйти? База данных Access. Заранее большое спасибо!
Предполагаю что дело в adOpenStatic, adLockReadOnly
...
Рейтинг: 0 / 0
Доступ к БД
    #38183220
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
замени Static на ForwardOnly
не поможет - поиграй с курсором (серверный/клиентский)
...
Рейтинг: 0 / 0
Доступ к БД
    #38183233
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тормоза определяются тем, что у тебя используется обычная файловая БД. В которой доступы и блокировки отслеживаются и разводятся через отдельный файл блокировок, а доступ к этому файлу - на уровне ОС той станции, где лежит файл БД. Соответственно ты имеешь в чистом виде получение доступности поллингом - отсюда и тормоза, Jet вполне обоснованно запрашивает обновлённые данные с некоторым вменяемым интервалом, и это не одна миллисекунда.

Радикального улучшения без перехода на клиент-сервер не жди.
...
Рейтинг: 0 / 0
Доступ к БД
    #38183284
Slash232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaТормоза определяются тем, что у тебя используется обычная файловая БД. В которой доступы и блокировки отслеживаются и разводятся через отдельный файл блокировок, а доступ к этому файлу - на уровне ОС той станции, где лежит файл БД. Соответственно ты имеешь в чистом виде получение доступности поллингом - отсюда и тормоза, Jet вполне обоснованно запрашивает обновлённые данные с некоторым вменяемым интервалом, и это не одна миллисекунда.

Радикального улучшения без перехода на клиент-сервер не жди.

А каким образом возможно перейти на клиент сервер? Установкой другой базы данных типо SQL или в Access это можно как то сделать?
...
Рейтинг: 0 / 0
Доступ к БД
    #38183296
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSSQL, аксесс малопригоден для многопользовательских нужд при таком способе использования.
...
Рейтинг: 0 / 0
Доступ к БД
    #38183356
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну не скажи. У меня десяток пользователей работал одновременно с таблицами базы аксесс и я не сказал бы, что какие-то невменяемые тормоза были, а тут два пользователя всего - не должно быть проблем. Тем более при ForwardOnly/ReadOnly.

Доступ к файлам какой? Локалка?

select * обязательно делать? там memo-полей нет в выборке? Лучше выбирать только необходимые поля, чтобы минимизировать трафик.
...
Рейтинг: 0 / 0
Доступ к БД
    #38183400
Slash232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНу не скажи. У меня десяток пользователей работал одновременно с таблицами базы аксесс и я не сказал бы, что какие-то невменяемые тормоза были, а тут два пользователя всего - не должно быть проблем. Тем более при ForwardOnly/ReadOnly.

Доступ к файлам какой? Локалка?

select * обязательно делать? там memo-полей нет в выборке? Лучше выбирать только необходимые поля, чтобы минимизировать трафик.

Файл бд находиться на компе-сервере. Папка с бд открыта на общий доступ. Т.е module.bdPath="\\aaa\bbb\bd1.mdb"
Как можно решить проблему? Спасибо тем кто откликнулся.
...
Рейтинг: 0 / 0
Доступ к БД
    #38183405
Slash232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И в данном selecte нужны все поля что есть в таблице. Кстати что интересно когда одновременно запрашиваеш эту информацию на одном компе зависает программа а на другом нет но выборка данных приостанавливается.
...
Рейтинг: 0 / 0
Доступ к БД
    #38183431
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты сделал то, что я сказал в первом посте?
...
Рейтинг: 0 / 0
Доступ к БД
    #38183484
Slash232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proзамени Static на ForwardOnly
не поможет - поиграй с курсором (серверный/клиентский)

1)Заменил
2)поставил тип курсора клиент

Не помогло
...
Рейтинг: 0 / 0
Доступ к БД
    #38183503
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slash232Shocker.Proзамени Static на ForwardOnly
не поможет - поиграй с курсором (серверный/клиентский)

1)Заменил
2)поставил тип курсора клиент

Не помоглоблин, ну не должно.

я всегда работал с серверным курсором.

сколько записей в таблице?
...
Рейтинг: 0 / 0
Доступ к БД
    #38183514
Slash232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
500+
...
Рейтинг: 0 / 0
Доступ к БД
    #38183524
Slash232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но отбираются записи по 10 строк в среднем
...
Рейтинг: 0 / 0
Доступ к БД
    #38183526
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slash232но отбираются записи по 10 строк в среднемгде? "Select * from Positions"
...
Рейтинг: 0 / 0
Доступ к БД
    #38183530
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, если 10 записей, то время всего цикла должно быть менее секунды. О каких тормозах тогда идет речь? Что внутри цикла, может именно то, что внутри цикла и создает проблему?
...
Рейтинг: 0 / 0
Доступ к БД
    #38183531
Slash232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProSlash232но отбираются записи по 10 строк в среднемгде? "Select * from Positions"

это я сократил запись просто в оригинале 2 условия отбора
...
Рейтинг: 0 / 0
Доступ к БД
    #38183547
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slash232это я сократил запись просто в оригинале 2 условия отборатак скорее всего тогда тормоза именно в момент выполнения запроса, а не в момент цикла.
1) проверь тормоза без условий отбора (зацикли код)
2) проверь торможение выполнения запроса с условиями отбора, но без цикла
...
Рейтинг: 0 / 0
Доступ к БД
    #38183657
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3) далее, конечно, заинтересуют сами условия отбора и наличие индексов на необходимых полях
...
Рейтинг: 0 / 0
Доступ к БД
    #38183708
Slash232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro3) далее, конечно, заинтересуют сами условия отбора и наличие индексов на необходимых полях

"Select * from Positions Where Êàòåãîðèÿ = '" & Trim(category) & "'" & l & " order by Íàèìåíîâàíèå"

Одна колонка называемая Счётчик в таблице Positions являеться счётчиком.
...
Рейтинг: 0 / 0
Доступ к БД
    #38183799
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поля Êàòåãîðèÿ и Íàèìåíîâàíèå проиндексированы?
...
Рейтинг: 0 / 0
Доступ к БД
    #38183820
Slash232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да
...
Рейтинг: 0 / 0
Доступ к БД
    #38183830
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Slash232но отбираются записи по 10 строк в среднем
а почему этот отбор делается не в самом запросе, а в каком-то г.-цикле ?
...
Рейтинг: 0 / 0
Доступ к БД
    #38183833
Slash232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отбор делается в select
...
Рейтинг: 0 / 0
Доступ к БД
    #38183868
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Slash232отбор делается в select
а этим ты тогда, что хотел сказать ?
автор
Код: vbnet
1.
2.
3.
4.
While Not rst5.EOF
   'тут данные перебираються и вносяться в listview1
rst5.movenext
wend


При попытке доступа к этим данным одновременно с двух машин в момент переборки
что это за переборка ?
может ты в ней - "катаешся" по этому курсору "туды-сюды" 100500 раз ?!

делай эту переборку в клиентском, ридонли курсоре, при установленном rst5.activecinnection = Nothing,
или - в массиве, - rst5.getrows
а лучше - не делай вовсе !
...
Рейтинг: 0 / 0
Доступ к БД
    #38183892
Slash232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
n = n + 1
        If AnalizSostav(rst5.Fields("Êîä")) = True Then h = 8
        If AnalizSostav(rst5.Fields("Êîä")) = False Then h = 9
        ListView1.ListItems.Add , "Stroka" & n, rst5.Fields("Êàòåãîðèÿ"), 0, h
        ListView1.ListItems("Stroka" & n).SubItems(1) = rst5.Fields("Íàèìåíîâàíèå")
        ListView1.ListItems("Stroka" & n).SubItems(2) = rst5.Fields("Êîä")
        ListView1.ListItems("Stroka" & n).SubItems(3) = rst5.Fields("Ïðèìåêó÷àíèå")
        ListView1.ListItems("Stroka" & n).SubItems(4) = rst5.Fields("Åäèíèöà")
        ListView1.ListItems("Stroka" & n).SubItems(5) = rst5.Fields("Ñêëàä") & " / " & Round(Module.Rashodi(rst5.Fields("Êîä")) * 30, 2) & " / " & rst5.Fields("Ìèíèìóì")
        summa1 = summa1 + rst5.Fields("Ñêëàä")
        ListView1.ListItems("Stroka" & n).SubItems(6) = rst5.Fields("Îôèñ")
        summa2 = summa2 + rst5.Fields("Îôèñ")
        ListView1.ListItems("Stroka" & n).SubItems(7) = FormatCurrency(Module.Cenadata(DateTime.Date, rst5.Fields("Êîä")), 0)
        If Module.Ostatki(rst5.Fields("&#202;&#238;&#228;")) < Round(Module.Rashodi(rst5.Fields("&#202;&#238;&#228;")) * 31, 2) Then ListView1.ListItems("Stroka" & n).ListSubItems(5).ForeColor = 251010
        If Module.Ostatki(rst5.Fields("&#202;&#238;&#228;")) < Round(Module.Rashodi(rst5.Fields("&#202;&#238;&#228;")) * 11, 2) Then ListView1.ListItems("Stroka" & n).ListSubItems(5).ForeColor = &HFF&



вот это внутренность между while not rst5.eof и movenextom
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Доступ к БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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