powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Использование курсоров в ADO (aduka05adm)
14 сообщений из 39, страница 2 из 2
Использование курсоров в ADO (aduka05adm)
    #36706767
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Мы с тобой говорим о разных вещах, воспользовавшись, к сожалению, одним термином.
Ты говоришь об adAsyncExecute, говоришь все правильно и подробно.

И с точки зрения самой команды Open и VB - да, описанный мной случай будет выполнен синхронно. Давай я возьму назад слово "асинхронно", заменив его на "многопоточно".

Единственное, что противоречит моему пониманию происходящих процессов, это твое "подготовленные данные первого резалтсета сидят в буфере на сервере и по каждому MoveNext сервер отдает очередную строку" . Я не уверен, что это происходит именно так, что данные не подкачиваются, пока я, скажем, ушел в затуп и вообще не делаю MoveNext. Но доказать это не могу, надо провести серию экспериментов.
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36706776
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> "подготовленные данные первого резалтсета сидят в буфере на сервере и по каждому MoveNext сервер отдает очередную
> строку". Я не уверен, что это происходит именно так

На клиенте при запросе создается буфер и при выполнеии запросы этот буфер заполняется, как только он заполнился, данные
не тянутся. Остальное на сервере ждет своего звездного часа :) . Именно по MoveNext происходит запрос, а не в
бекграудне, ты можешь вообще никуда не пойти, а просто посмотреть и закрыть рекордсет. Так зачем делать лишнее

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36706783
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок. Ладно.
Век живи - век учись.
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36706853
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЕдинственное, что противоречит моему пониманию происходящих процессов, это твое "подготовленные данные первого резалтсета сидят в буфере на сервере и по каждому MoveNext сервер отдает очередную строку" . Я не уверен, что это происходит именно так, что данные не подкачиваются, пока я, скажем, ушел в затуп и вообще не делаю MoveNext. Но доказать это не могу, надо провести серию экспериментов.Это и верно и неверно одновременно :)
С точки зрения реальной нагрузки на сеть, клиент действительно чаще всего перекачивает записи по нескольку штук за раз. Если ты заглянешь в настройки интерфейсного драйвера ты возможно сможешь найти там что-нибудь типа Fetch Array Size. Но большинство драйверов не позволяют контролировать размер пакета или просто не афишируют это свойство в настройках доступных рядовому админу.
А с точки зрения VB* выкачивает драйвер строки пачками или по одной - никакой разницы нет. С уровня VB ты никогда не сможешь добраться до драйверного буфера и как-либо его использовать.
Принцип тут тот же что и с буферизированым чтением из файла. Осознание того факта что харддрайв не дергается за каждым байтом а читает данные покластерно, греет душу, но не заставляет тебя менять алгоритм побайтового чтения файла на блочный.

Совсем другое дело синхронный или асинхронный доступ к БД. Использование того или другого означает что ты будешь писать программу в двух разных стилях. Поэтому я и возмутился на необдуманное использование слова "асинхронный".
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36706872
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlС точки зрения реальной нагрузки на сеть, клиент действительно чаще всего перекачивает записи по нескольку штук за раз. Если ты заглянешь в настройки интерфейсного драйвера ты возможно сможешь найти там что-нибудь типа Fetch Array Size. Но большинство драйверов не позволяют контролировать размер пакета или просто не афишируют это свойство в настройках доступных рядовому админу.
Ну тут у меня было непонимание только в одном: предположим, я сделал разок MoveNext и ушел в затуп. Будет ли в это время происходить докачка? Я полагал, что будет. Игорь привел железный аргумент, после которого я решил согласиться с вами без проверки.
----------------
Есть один интересный нюанс. Я пока ему беспощадную войну не объявлял, а мелкие попытки нивелирования ни к чему ни привели.
При Forward-курсоре я начинаю чтение и обработку данных и вдруг бросаю (пользователь прервал процесс). Делаю на рекордсете и на комманде всякие Cancel, Close, Nothing, однако, пока эта сволочь полностью не заберет недобранные данные с сервера - управление мне не возвращается. Особенно заметно при работе через интернет - если данных было много, приложение затупливает на несколько секунд и трафик виден. Если данных при тех же условиях было меньше или дело происходит в локалке - отменяется гораздо быстрее.
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36706915
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProWhite OwlС точки зрения реальной нагрузки на сеть, клиент действительно чаще всего перекачивает записи по нескольку штук за раз. Если ты заглянешь в настройки интерфейсного драйвера ты возможно сможешь найти там что-нибудь типа Fetch Array Size. Но большинство драйверов не позволяют контролировать размер пакета или просто не афишируют это свойство в настройках доступных рядовому админу.
Ну тут у меня было непонимание только в одном: предположим, я сделал разок MoveNext и ушел в затуп. Будет ли в это время происходить докачка?Ответ: Возможно.
Я не могу дать более точного ответа. Это все зависит от конкретной версии интерфейса и реализации интерфейсного драйвера.
До тех пор пока ты не сделаешь очередной MoveNext данные точно не попадут в память твоей программы, но попадут они в память интерфейсного драйвера на клиентской машине или нет - без копания в исходниках драйвера сказать обычно нельзя.

Shocker.ProПри Forward-курсоре я начинаю чтение и обработку данных и вдруг бросаю (пользователь прервал процесс). Делаю на рекордсете и на комманде всякие Cancel, Close, Nothing, однако, пока эта сволочь полностью не заберет недобранные данные с сервера - управление мне не возвращается. Особенно заметно при работе через интернет - если данных было много, приложение затупливает на несколько секунд и трафик виден. Если данных при тех же условиях было меньше или дело происходит в локалке - отменяется гораздо быстрее.Да, это возможно. Опять таки повторюсь: все зависит от конкретной реализации интерфейса. Вполне возможно что клиентский драйвер действительно будет тянуть остатки резалтсета даже если его отменили. Стандартов на реализацию этого момента нет и каждый делает как ему кажется лучшим. В конце-концов "выбрать все и забыть" тоже можно считать "отменой".

А вообще, смотри как организуется обмен по TCP - одна сторона пихает в свой конец туннеля, потом читает, снова пихает, снова читает... Если сервер считает что он должен запихать в туннель вот такой-то объем данных, клиент не может его прервать и сказать "хватит". В принципе не может. Только если сервер посылает данные блоками и между каждым блоком слушает "а не просят ли меня остановится", только тогда возможно прерывание посылки... И я совсем не уверен что подставь_свою_СУБД делает именно это.
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36706917
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlИ я совсем не уверен что подставь_свою_СУБД делает именно это.
MSSQL/OLEDB
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36707609
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот повыдерал из проекта, разбирайтесь

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Public bComplete As Boolean
Public WithEvents rsEvents As ADODB.Recordset
'

Sub Refresh()
...
    If Not bComplete And Not Me.rsEvents Is Nothing Then
        Me.rsEvents.Cancel
    Else
        bComplete = False
    End If
...

  Set rsEvents = New ADODB.Recordset
  rsEvents.CursorLocation = adUseClient
  rsEvents.PageSize =  100 
  rsEvents.CacheSize =  1000 
  Set rsEvents.ActiveConnection = cn
  rsEvents.Open SQL, , adOpenStatic, adLockReadOnly, adAsyncFetchNonBlocking
...
End Sub

Private Sub rsEvents_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
    Me.lblRecordCount.Caption = "Найдено записей: " & rsEvents.RecordCount
End Sub

Private Sub rsEvents_FieldChangeComplete(ByVal cFields As Long, ByVal Fields As Variant, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
    bComplete = True
End Sub
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36707656
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

Ну у меня примерно так же, только я ловлю события от коннекшна.
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36707670
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProKonst_One,

Ну у меня примерно так же, только я ловлю события от коннекшна.


в режиме ассинхронного рекордсета не блокируется форма с гридом, в котором он находится. и не надо делать ассинхронное соединение (ADODB.Connection)
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36707683
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneShocker.ProKonst_One,

Ну у меня примерно так же, только я ловлю события от коннекшна.

в режиме ассинхронного рекордсета не блокируется форма с гридом, в котором он находится. и не надо делать ассинхронное соединение (ADODB.Connection)
Я не очень понял, к чему ты это.
Я асинхронно запрашиваю рекордсет их хранимки через Command, и меня интересует только момент его поступления. Обработку рекордсета я делаю, перемежая его DoEvents-ом
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36707687
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProKonst_OneShocker.ProKonst_One,

Ну у меня примерно так же, только я ловлю события от коннекшна.

в режиме ассинхронного рекордсета не блокируется форма с гридом, в котором он находится. и не надо делать ассинхронное соединение (ADODB.Connection)
Я не очень понял, к чему ты это.
Я асинхронно запрашиваю рекордсет их хранимки через Command, и меня интересует только момент его поступления. Обработку рекордсета я делаю, перемежая его DoEvents-ом


ясно, у тебя всё ок.
тогда это тем, кто думает , что открыв коннект со свойством Async, у него всё сразу стало ассинхронным =)
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36707692
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> Я не очень понял, к чему ты это.

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

З.Ы. Если я правильно понял

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36707699
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: Shocker.Pro
> Я не очень понял, к чему ты это.

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

З.Ы. Если я правильно понял



что-то в этом роде, но ещё и то, что сами рекордсеты при ассинхронном соединении ещё надо так же вызывать ассинхронно
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Использование курсоров в ADO (aduka05adm)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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