|
ADO: Запрос возвращает только часть записей
|
|||
---|---|---|---|
#18+
Поиском не нашёл. Подозреваю, какая-то детская проблема. - Использую С++ и ADO для работы с Oracle - Есть таблица с 1 млн записей. - Использую _RecorodsetPtr + Open, примерно так: Код: plaintext 1.
(пробовал по-разному, в т.ч. через _CommandPtr::Execute) - Запрос выполняется быстро, после чего тяну записи через Код: plaintext 1. 2. 3. 4. 5. 6.
ошибок не возникает, но число записей гораздо меньше, чем в базе. Цикл завершается по EndOfFile если уменьшаю число колонок в запросе, число записей на выходе растёт. Т.е. чувствуется какое-то ограничение на полный объём данных. Но где оно устанавливается? Тот же Oracle SQL Developer этот запрос отрабатывает нормально и возвращает все записи. Работает он, я так понимаю, через jdbc? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:58 |
|
ADO: Запрос возвращает только часть записей
|
|||
---|---|---|---|
#18+
1) С первого же взгляда, нафига курсор adOpenStatic что бы было? чем стандартный adOpenForwardOnly не удовлетворяет 2) Если что то не работает, самое первое дело попробывать на стандартных (дефолтных) настройках. Т.е. без всяких adOpenStatic, adAsyncFetch и прочей порнографии p.s. первый же поиск по гугле находит: Указывает, что оставшиеся строки после начальной количество указанных в CacheSize асинхронно нужно извлечь свойство. подозреваю, что Вы как-то не корректно работается с курсором adAsyncFetch и с ним нужно работать как-то по особенному (асинхронно?))) ) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 14:41 |
|
ADO: Запрос возвращает только часть записей
|
|||
---|---|---|---|
#18+
p.p.s. сталкивался с тем. что "стандартный" MS драйвер не все фичи Oracle корректно поддерживал. Сталкивался на blob'ах. Приходилось ставить Oracle драйвера (ODBC и пр.) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 14:42 |
|
ADO: Запрос возвращает только часть записей
|
|||
---|---|---|---|
#18+
p.p.p.s. "Давайте я почитаю документацию за Вас" ( C ) https://books.google.ru/books?id=VjtvaDlEIF0C&pg=PA128&lpg=PA128&dq=ADO RecordSet EndOfFile adAsyncFetch&source=bl&ots=xrasD-sB2g&sig=ACfU3U1ZfCchsVM7N1YzRrcbfyxgBT7mWw&hl=ru&sa=X&ved=2ahUKEwibqseY6ozmAhXBtYsKHX_fA94Q6AEwDnoECAkQAQ#v=onepage&q=ADO RecordSet EndOfFile adAsyncFetch&f=false p.p.p.p.s. деньги на пиво переводить на счет крафт-бара ТвинПикс. Санкт-Петербург, Лиговский пр. 9.31 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 14:48 |
|
ADO: Запрос возвращает только часть записей
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev 1) С первого же взгляда, нафига курсор adOpenStatic что бы было? чем стандартный adOpenForwardOnly не удовлетворяет Leonid Kudryavtsev самое первое дело попробывать на стандартных (дефолтных) настройках. Т.е. без всяких adOpenStatic, adAsyncFetch и прочей порнографии Leonid Kudryavtsev подозреваю, что Вы как-то не корректно работается с курсором adAsyncFetch и с ним нужно работать как-то по особенному (асинхронно?))) ) Leonid Kudryavtsev сталкивался с тем. что "стандартный" MS драйвер не все фичи Oracle корректно поддерживал. Сталкивался на blob'ах. Приходилось ставить Oracle драйвера (ODBC и пр.) Leonid Kudryavtsev деньги на пиво переводить на счет крафт-бара ТвинПикс. Санкт-Петербург, Лиговский пр. 9.31 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 20:12 |
|
ADO: Запрос возвращает только часть записей
|
|||
---|---|---|---|
#18+
Что-то не помогло :( Пробовал так: Код: plaintext 1.
и так: Код: plaintext 1.
где cn - _ConnectionPtr, который Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 06:16 |
|
ADO: Запрос возвращает только часть записей
|
|||
---|---|---|---|
#18+
Делать тестовый пример (простейший .C который просто подсчитывает результат + скрипт на создание данных). IMHO Странно это. Не верю я, что ADO настолько кривой ))) ==> где-то ошибка в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 15:01 |
|
ADO: Запрос возвращает только часть записей
|
|||
---|---|---|---|
#18+
Похоже, проблема была в том, что из-за огромной выборки приложению не хватает памяти. При этом ADO перестаёт тянуть данные, не сообщая об ошибке. Это в случае adOpenForwardOnly. Просто на очередной записи говорит eof и всё. А вот в случае CursorLocation = adUseServer, оно падает, всё ок. И вот интересно, по идее, adOpenForwardOnly - это получение 1 записи за 1 раз? Если так, то почему по мере MoveNext использование памяти в приложении нарастает? Или я опять что-то не так делаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2020, 09:31 |
|
|
start [/forum/topic.php?fid=52&msg=39895654&tid=1881655]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 153ms |
0 / 0 |