Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Доступ к БД / 25 сообщений из 29, страница 1 из 2
14.03.2013, 09:00
    #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
14.03.2013, 09:17
    #38183220
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к БД
замени Static на ForwardOnly
не поможет - поиграй с курсором (серверный/клиентский)
...
Рейтинг: 0 / 0
14.03.2013, 09:26
    #38183233
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к БД
Тормоза определяются тем, что у тебя используется обычная файловая БД. В которой доступы и блокировки отслеживаются и разводятся через отдельный файл блокировок, а доступ к этому файлу - на уровне ОС той станции, где лежит файл БД. Соответственно ты имеешь в чистом виде получение доступности поллингом - отсюда и тормоза, Jet вполне обоснованно запрашивает обновлённые данные с некоторым вменяемым интервалом, и это не одна миллисекунда.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Одна колонка называемая Счётчик в таблице Positions являеться счётчиком.
...
Рейтинг: 0 / 0
14.03.2013, 13:44
    #38183799
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к БД
Поля Êàòåãîðèÿ и Íàèìåíîâàíèå проиндексированы?
...
Рейтинг: 0 / 0
14.03.2013, 13:52
    #38183820
Slash232
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к БД
да
...
Рейтинг: 0 / 0
14.03.2013, 13:58
    #38183830
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к БД
Slash232но отбираются записи по 10 строк в среднем
а почему этот отбор делается не в самом запросе, а в каком-то г.-цикле ?
...
Рейтинг: 0 / 0
14.03.2013, 14:01
    #38183833
Slash232
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к БД
отбор делается в select
...
Рейтинг: 0 / 0
14.03.2013, 14:12
    #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
14.03.2013, 14:19
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Доступ к БД / 25 сообщений из 29, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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