Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных? / 25 сообщений из 28, страница 1 из 2
05.12.2019, 10:02
    #39898433
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Здравствуйте!

1. Кратко: ADODB+SQLOLEDB использую давно. Но столкнулся с зависанием ADODB.Command.Execute.

2. Подробно:
а. Есть запрос. Запрос большой. 2.7млн записей и 240мб в результате.
б. С помощью ADODB.Command.Execute выполняю его с целью получения Recordset.
в. ADODB.Command.Execute виснет наглухо. Причем даже ADODB.Command.Timeout игнорируется.
г. В QA тот же запрос выполняется за 20 секунд (откуда я и знаю данные из п. а выше).

3. Вопрос: есть ли какие-то в провайдере SQLOLEDB ограничения на объем выборки?
Я не нашел. Может, неумело искал.

Спасибо!

PS
а. MSSQL 2012
б. И в QA и в ADODB протокол named pipes.
...
Рейтинг: 0 / 0
05.12.2019, 10:55
    #39898458
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Timokhov,

ограничений нет. глюки возможны
...
Рейтинг: 0 / 0
05.12.2019, 11:14
    #39898470
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Timokhov
в. ADODB.Command.Execute виснет наглухо. Причем даже ADODB.Command.Timeout игнорируется.
Равновероятно, что это глюк ADODB+SQLOLEDB, или это невыполнение самого запроса.

То, что в QA запрос выполняется, не значит, что он выполнится из клиента, такое бывает, из заз разных параметров коннекта.

Посмотрите в профайлере - запрос начал выполняться? И что там сервер делает.

UPD: да, и никаких ограничений на объём у ADODB+SQLOLEDB нет.
...
Рейтинг: 0 / 0
05.12.2019, 11:19
    #39898475
ShIgor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Timokhov,

Какие настройки Mode, CursorLocation и IsolationLevel у соединения и СursorType у возвращаемого RS?
...
Рейтинг: 0 / 0
05.12.2019, 11:42
    #39898494
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Коллеги, благодарю за внимание к вопросу.
Но, похоже, тему можно закрывать, т.к. я на простом тестовом примере выяснил причинно-следственную следственную связь. Если кратко, то ADODB+SQLOLEDB есть проблемы, но я сам виноват, т.к. загнал провайдера в ситуацию, на которую он не рассчитан. Однако напишу выводы, может, полезно кому-то еще будет.

Подробнее:

1. Моё окружение: Windows10 64 бита, 16гб оперативки, SQL2012, Delphi2007 (т.е. 32 бита), ADODB используется как OLE через позднее связывание (т.е. не используются стандартные библиотеки Delphi).
Вот пример:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var
   cnn, cmd, rs: OleVariant;
begin
   cnn := CreateOleObject('ADODB.Connection');
   cnn.CursorLocation := $00000003{adUseClient};
   cnn.Open('Provider=SQLOLEDB;Server=server;Database=db;Trusted_Connection=Yes;Application name=test1');

   cmd := CreateOleObject('ADODB.Command');
   cmd.CommandText := cSql2;

   cmd.CommandType := $00000001{adCmdText};
   cmd.CommandTimeout := 1000;
   cmd.ActiveConnection := cnn;

   rs := cmd.Execute(Options := $00000001{adCmdText});
end;



2. Запрос cSql2 выдает 2.7 млн строк, где одно поле varchar(8000) (в реальности хранится макс. 100 символов), 4 varchar(255) (в реальности хранится макс. 20-30 символов), остальные 11 int и smalldatetime. Общий размер результата 240мб.

3. При первом выполнении в тестовом примере свалилось с EOleException "Недостаточно памяти".
Добавил в проект флаг {$SetPEFlags $0020} // IMAGE_FILE_LARGE_ADDRESS_AWARE
Сваливаться перестало, но навечно (игнорируя cnn.CommandTimeout) зависает.
По диспетчеру задач - приложение крутится где-то в районе 2.4гб занятой памяти.

4. Пробовал выполнять запрос на 25млн строк с размером результата 600мб, где типы полей только int. Работает!!!

5. ВЫВОДЫ:
а. Провайдер SQLOLEDB не может переварить (обработать рез-ты запроса), когда много строковых данных.
б. Надо переходить на последние версии Delphi в 64 бита, а не держаться за старые версии.
...
Рейтинг: 0 / 0
05.12.2019, 12:39
    #39898535
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Timokhov
данных.
б. Надо переходить на последние версии Delphi в 64 бита, а не держаться за старые версии.


Это же классический говнокод.
Я не рассматриваю вопрос "нафига козе баян 2.7млн записей на клиенте?". Это очевидно.
Допускаем, что "нужно".
Т.е. говнокодер знает знает, что у него "дохера и более строк".
Но никак не пытается обдумать парадигму "нешто мне первому приспичило?"
В ADODB есть методы получения "дохера и более строк" кусками.
...
Рейтинг: 0 / 0
05.12.2019, 14:31
    #39898601
Wlr-l
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Timokhov,

5. ВЫВОДЫ

в. Перейти на новую версию драйвера OLE DB:

https://docs.microsoft.com/en-us/sql/connect/oledb/oledb-driver-for-sql-server?view=sql-server-ver15

3. Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL)
...
Рейтинг: 0 / 0
05.12.2019, 16:08
    #39898695
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
aleks222,

aleks222
Это же классический говнокод.

Культура? Не, не слышал.

aleks222
Я не рассматриваю вопрос "нафига козе баян 2.7млн записей на клиенте?". Это очевидно.
Допускаем, что "нужно".

Распечатать шрифтом size=5 и сдать в архив 20 кг макулатуры. Не вариант?

aleks222
В ADODB есть методы получения "дохера и более строк" кусками.

Сам ADODB ничего не умеет. он пользуется серверными курсорами, которыми мы не пользуемся .
Если речь, конечно, идет про CursorLocation и adUseServer?
Типа того:
Код: pascal
1.
2.
3.
   rs := CreateOleObject('ADODB.Recordset');
   rs.CursorLocation := adUseServer;
   rs.Open(cSql1, cnn, adOpenKeyset, adLockOptimistic); 


Или речь про еще какие-то возможности ADODB?
...
Рейтинг: 0 / 0
05.12.2019, 16:09
    #39898697
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Wlr-l,

Благодарю! Обязательно посмотрю.
...
Рейтинг: 0 / 0
05.12.2019, 16:12
    #39898700
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Интересный факт: если в самом запросе сделать касты строк до меньших размеров, то ADODB+SQLOLEDB переваривает это.

Т.е. можно сделать вывод, что в момент обработки SQLOLEDB полагается на размеры строк, которые ему выдает запрос - сказал запрос, что тип поля varchar(8000), значит временно резервируем 8000. Когда уже отдает клиенту, конечно, обрезает до реального размера.
...
Рейтинг: 0 / 0
05.12.2019, 16:33
    #39898719
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Wlr-l,


Wlr-l
в. Перейти на новую версию драйвера OLE DB:

https://docs.microsoft.com/en-us/sql/connect/oledb/oledb-driver-for-sql-server?view=sql-server-ver15

3. Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL)


Что интересно:
1. По памяти MSOLEDBSQL более прожорливый (при постепенно увеличении результата перестает работать раньше, чем SQLOLEDB).
2. Но зато быстрее процентов на 10%.

Спасибо. Буду думать, переходить или нет. Как понял, его ставить надо отдельно (у меня Win-10 64, а не было установлено).
...
Рейтинг: 0 / 0
05.12.2019, 16:51
    #39898731
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Timokhov
Или речь про еще какие-то возможности ADODB?
например, про adAsyncFetch
...
Рейтинг: 0 / 0
06.12.2019, 14:17
    #39899099
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
court
Dimitry Timokhov
Или речь про еще какие-то возможности ADODB?
например, про adAsyncFetch


После упоминания adAsyncFetch, я подумал - а что я им не пользуюсь то?
Покопался в своих архивах. Нашел. Проверил. Так и есть.

В случае, когда Connection.CursorLocation := adUseClient (а у меня именно так) опция adAsyncFetch принципиально ничего не меняет. Все равно Recordset грузится в итоге полностью, пусть и не сразу.

Я пробовал сделать Recordset.CursorType равным adOpenForwardOnly. Может тогда асинхронность сыграет (что прочел уже в памяти не нужно)?
Но свойство Recordset.CursorType становится в итоге adOpenStatic. И никак иначе согласно https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/cursortype-property-ado?view=sql-server-ver15 (см. второй абзац в Remarks). Т.е. Recordset в памяти оказывается целиком (иначе как по нему можно лазить вперед-назад?).

К тому же adAsyncFetch бесполезна, когда в запросе много фунционального кода (while, if и пр. TSQL) - все равно этот кусок должен выполниться полностью. Асинхронность начинает работать только на SELECT.
...
Рейтинг: 0 / 0
06.12.2019, 14:50
    #39899121
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Timokhov
Распечатать шрифтом size=5 и сдать в архив 20 кг макулатуры. Не вариант?

Вариант, конечно, но программисту, который для этой задачи использует "CursorLocation := adUseClient" надо руки отрывать ибо не ведает он что творит. Для этой задачи используются однонаправленные курсоры без кэширования.
...
Рейтинг: 0 / 0
06.12.2019, 15:03
    #39899134
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Sibiryakov
Dimitry Timokhov
Распечатать шрифтом size=5 и сдать в архив 20 кг макулатуры. Не вариант?
Вариант, конечно, но программисту, который для этой задачи использует "CursorLocation := adUseClient" надо руки отрывать ибо не ведает он что творит. Для этой задачи используются однонаправленные курсоры без кэширования.
Руки отрывать никому не надо. 1. До сей поры запросы были под моим чутким контролем - они не большие по объему. 2. Сейчас тестирую библиотеку в встроенном в нашу систему скриптовом языке по генерации запросов к БД. 3. Решил проверить ее на "а слабо?". 4. Получил не ошибку или долгий запрос, а глухое зависание. 5. С этим и разбираюсь. Ибо для разработчика хуже нет, чем глухое зависание - ни словечка от системы, что что-то не так. Но общий вывод полезный. Обсужу с серверменом, почему мы изначально не пользуемся серверными курсорами (Вы же про серверные курсоры говорите, когда говорите "однонаправленные курсоры"?). PS В действительности, разобрался. Возможно ретрограду, типа меня, будет полезно. См. вложение. Краткое описание: Данный пример демонстрирует следующий негативный эффект провайдера SQLOLEDB (и более нового MSOLEDBSQL):
  • В 32-х битном приложении (у меня Delphi2007).
  • При использовании 3Гб памяти (т.е. при наличии флага {$SetPEFlags При использовании 3Гб памяти (т.е. при наличии флага {$SetPEFlags $0020}).20}).
  • С клиенским курсором (т.е. когда Connection.CursorLocation := adUseClient).
для некоторых запросов выполнение уходит в глухой завис (игнорируется AdoDb.Command.CommandTimeout). Причем, такое происходит для любых способов обращения к данным AdoDb.Recordset:
    Синхронно/Асинхронно. Получение данных через MoveNext/GetRows.
...
Рейтинг: 0 / 0
06.12.2019, 15:05
    #39899137
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Timokhov
Я пробовал сделать Recordset.CursorType равным adOpenForwardOnly. Может тогда асинхронность сыграет (что прочел уже в памяти не нужно)?
Но свойство Recordset.CursorType становится в итоге adOpenStatic.

В документации сказано:
Microsoft Static cursor Provides a static copy of a set of records for you to use to find data or generate reports; always allows bookmarks and therefore allows all types of movement through the Recordset. Additions, changes, or deletions by other users will not be visible. This is the only type of cursor allowed when you open a client-side Recordset object.
Т.е. он и так Static из-за CursorLocation := adUseClient. Разве нет?
...
Рейтинг: 0 / 0
06.12.2019, 15:10
    #39899140
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
4d_monster,
4d_monster
Т.е. он и так Static из-за CursorLocation := adUseClient. Разве нет?


Да я и не спорю. Так я это и написал. Возможно, мутно выразился.

Я к тому, чтобы пояснить, что коллега
court
например, про adAsyncFetch

упомянул про adAsyncFetch. А я говорю, что все равно роусет будет Static - с асинхроном или без. Все равно он в памяти окажется. Т.е. асинхрон не уменьшает потребность в памяти. И, если ее в синхроне не её хватало, то и в асинхроне не хватит.
...
Рейтинг: 0 / 0
06.12.2019, 15:56
    #39899180
Wlr-l
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Timokhov
Wlr-l,


Wlr-l
в. Перейти на новую версию драйвера OLE DB:

https://docs.microsoft.com/en-us/sql/connect/oledb/oledb-driver-for-sql-server?view=sql-server-ver15

3. Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL)


Что интересно:
1. По памяти MSOLEDBSQL более прожорливый (при постепенно увеличении результата перестает работать раньше, чем SQLOLEDB).
2. Но зато быстрее процентов на 10%.

Спасибо. Буду думать`, переходить или нет. Как понял, его ставить надо отдельно (у меня Win-10 64, а не было установлено).


SQLOLEDB был разработан для 2000 сервера. Но, как только он стал частью Windows XP, его перестали адаптировать под новые версии SQL Server, а вместо него стали использовать нативные провайдеры второго поколения 9, 10, 11.

MSOLEDBSQL, действительно, работает быстрее, даже нативных провайдеров второго поколения. Может он и требует больше памяти в приложении, но меньше нагружает SQL Server, что гораздо важнее (монитором можно посмотреть как выполняется запрос на изменение данных с использованием одного и другого провайдера).
Главное, он поддерживает все типы данных 2017 (2019 пока не рассматривали). Попробуйте, например, в ХП указать параметр типа date и передать в него дату из приложения. В случае SQLOLEDB дата будет преобразована в строку "гггг-мм-дд", которую ХП не воспримет как дату. Для нас это более важно; миллионы строк для десятка килограмм макулатуры уже ушли в далекое прошлое.
Да, этот провайдер должен устанавливаться отдельно, так как для 2017 рекомендуется ODBC.

И последнее, DBGrid, например, умеет брать от сервера столько строк, сколько помещается на экране, а не вытягивает сразу все строки. А вы все еще теоретизируете. Мне тоже не понятно, зачем по миллионам строк " лазить вперед-назад ", да и " в запросе много функционального кода (while, if и пр. TSQL) " смущает.
...
Рейтинг: 0 / 0
06.12.2019, 16:14
    #39899190
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Wlr-l,

Насчет MSOLEDBSQL спасибо. Действительно полезная информация. Ибо я на тип date пока "забил". Как раз из-за тог, что даты там в виде строки. Деталей не помню, но вот, что написано у меня в комментах " при возврате в Delphi ADODB возвращает тип [date] как varOleStr в виде '2018-01-01'. Эта проблема на момент написания комментария решена не была."

Насчет DBGrid. Он это делает через серверный курсор. Сам по себе DBGrid делать ничего не умеет в части загрузки видимой части. Я смотрел DBGrid от Delphi2007 и какой-то более поздний (точно не скажу). Такая частичная загрузка работает только для серверных курсовров (Connection.CursorLocation := adUseServer).
А у нас adUseClient. Возможно, стоит посмотреть на серв. курсор. Но, согласитесь, в системе возраста 20 лет, над этим надо шибко сильно думать.
...
Рейтинг: 0 / 0
06.12.2019, 16:15
    #39899192
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Wlr-l
Да, этот провайдер должен устанавливаться отдельно, так как для 2017 рекомендуется ODBC.

Вот! Об этом спросить хотел!
Направьте, пожалуйста, куда смотреть, чтобы изучить тему ODBC?
Хорошо бы, конечно, под Delphi, но можно и иначе.
...
Рейтинг: 0 / 0
06.12.2019, 20:12
    #39899279
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Timokhov
aleks222В ADODB есть методы получения "дохера и более строк" кусками.

Сам ADODB ничего не умеет. он пользуется серверными курсорами, которыми мы не пользуемся .
Если речь, конечно, идет про CursorLocation и adUseServer?Так используйте.

Никаких проблем не было получать из запроса миллиард записей, с момента появления ADO, но вы явно читаете всё в память, из за каких то неправильных настроек.
Из настроек я вижу только "cnn.CursorLocation := $00000003{ adUseClient };", и "rs.Open(cSql1, cnn, adOpenKeyset , adLockOptimistic)"

Зачем они?

Понятно, что если вы указываете, что курсор клиентский, и что вам нужно лазить по записям туда-сюда, то вы тем самым говорите, "Оледиби и Адо, дорогие, не давайте мне записи порциями с сервера, скачайте как мне их в память".

Уберите строку с cnn.CursorLocation, и у rs.Open оставьте параметр курсора по умолчанию, и всё будет нормально.
...
Рейтинг: 0 / 0
07.12.2019, 00:37
    #39899326
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
alexeyvg,

1. Когда начинал топик, то был в полном замешательстве.
Закончил тем, что показал, что в провайдерах SQLOLEDB и MSSELOLESQL есть ошибка при работе с клиентскими курсорами при работе в 32-разрядных приложениях с флагом PE, который позволят использовать 3гб (вместо 2гб) оперативной памяти флагом. Оформил соотв. ключевыми словами. Возможно, кому-то полезно будет.

2. В общем то у меня нет проблем с большими данными. У меня все порции данных маленькие - забрал, обработал, измененное вернул. Конкретно исходный большой запрос был тестовым. Можно сказать, случайным.

3. По части rs.Open без параметров. Действительно, берет любые миллионы записей. Интересно чисто технически - как это сделано? Очевидно, что это серверный курсор. Но почему профайлер ничего не показывает? Только "select * from t". Может, знаете? Спасибо.
...
Рейтинг: 0 / 0
07.12.2019, 14:35
    #39899392
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Timokhov
Обсужу с серверменом, почему мы изначально не пользуемся серверными курсорами (Вы же про серверные курсоры говорите, когда говорите "однонаправленные курсоры"?)

Ты думаешь я дизлексик и говорю не то, что говорю?
https://docs.microsoft.com/en-us/sql/relational-databases/cursors?view=sql-server-ver15
Forward-only

A forward-only cursor is specified as FORWARD_ONLY and READ_ONLY and does not support scrolling.
Если ты программируешь на Delphi, то RTFM TDataSet.Unidirectional.
...
Рейтинг: 0 / 0
07.12.2019, 15:38
    #39899400
Dimitry Timokhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Sibiryakov,

Дмитрий, я вижу. ты разбираешься в ADO.
Можешь объяснить, как технически сделана связка CursorLocation=adUseServer/CursorType=adOpenForwardOnly?
Сначала пример:
Код: pascal
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.
var
   fCnn, fRS: OleVariant;
begin
   fCnn := CreateOleObject('ADODB.Connection');
   fCnn.CursorLocation := $00000002{adUseServer};
   fCnn.Open('Provider='+cProvider_MSOLEDBSQL+';Server=<server>;Database=<db>;Trusted_Connection=Yes;Application name=test1');

   fRS := CreateOleObject('ADODB.Recordset');
   fRS.ActiveConnection := fCnn;
   fRS.Open(Source := 'select 1234 as [fld]'

// В профайлере только "select 1 as [fld]"
//      , CursorType := $00000000{adOpenForwardOnly}

// В профайлере есть обращение к "sp_cursorfetch" и CursorOpen
//      , CursorType := $00000001{adOpenKeyset}
//      , CursorType := $00000002{adOpenDynamic}
//      , CursorType := $00000003{adOpenStatic}
   );

   while not fRS.Eof do
   begin
      ShowMessage(fRS.Fields['fld'].Value);
      fRS.MoveNext;
   end;
end;



При работе через CursorType = adOpenKeyset/adOpenDynamic/adOpenStatic профайлер показывает, что это сделано через сист. проц. sp_cursorfetch и CursorOpen.

При работе через CursorType=adOpenForwardOnly в профайлере есть только select 1234 as [fld] и всё (в профайлере включены события OLEDB и Cursor - там пусто!).

Как же так, ведь сказано, что fCnn.CursorLocation := $00000002{adUseServer}!!! Значит должна быть работа с курсором!

Как в случае использования связки adUseServer+adOpenForwardOnly OLEDB использует серверный курсор, если нет обращений к серверу по части курсоров?

Объясни, если можешь. Собственно этот необъяснимый вопрос и не позволил мне в 2000 году начать использовать adUse Server +adOpenForwardOnly вместо текущих adUse Client +adOpenStatic.
...
Рейтинг: 0 / 0
07.12.2019, 16:43
    #39899417
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных?
Dimitry Timokhov,

Для adOpenForwardOnly не требуется обеспечивать навигацию по курсору. Поэтому курсор на стороне сервера, которым и реализуется навигация, не нужен.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Провайдер SQLOLEDB - есть ли ограничение объем выбираемых данных? / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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