powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ADO: Запрос возвращает только часть записей
8 сообщений из 8, страница 1 из 1
ADO: Запрос возвращает только часть записей
    #39895605
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поиском не нашёл. Подозреваю, какая-то детская проблема.

- Использую С++ и ADO для работы с Oracle
- Есть таблица с 1 млн записей.
- Использую _RecorodsetPtr + Open, примерно так:
Код: plaintext
1.
rs.Open("select a1, a2, a3, a4, a5 from T order by a1", ActiveConnection, adOpenStatic, adLockReadOnly, adCmdText | adAsyncFetch)


(пробовал по-разному, в т.ч. через _CommandPtr::Execute)

- Запрос выполняется быстро, после чего тяну записи через
Код: plaintext
1.
2.
3.
4.
5.
6.
rs.MoveFirst()
while (!(rs.EndOfFile))
{
    // …
    rs.MoveNext();
}



ошибок не возникает, но число записей гораздо меньше, чем в базе. Цикл завершается по EndOfFile

если уменьшаю число колонок в запросе, число записей на выходе растёт. Т.е. чувствуется какое-то ограничение на полный объём данных. Но где оно устанавливается?

Тот же Oracle SQL Developer этот запрос отрабатывает нормально и возвращает все записи. Работает он, я так понимаю, через jdbc?
...
Рейтинг: 0 / 0
ADO: Запрос возвращает только часть записей
    #39895654
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) С первого же взгляда, нафига курсор adOpenStatic
что бы было?
чем стандартный adOpenForwardOnly не удовлетворяет

2) Если что то не работает, самое первое дело попробывать на стандартных (дефолтных) настройках. Т.е. без всяких adOpenStatic, adAsyncFetch и прочей порнографии

p.s.
первый же поиск по гугле находит:
Указывает, что оставшиеся строки после начальной количество указанных в CacheSize асинхронно нужно извлечь свойство.
подозреваю, что Вы как-то не корректно работается с курсором adAsyncFetch и с ним нужно работать как-то по особенному (асинхронно?))) )
...
Рейтинг: 0 / 0
ADO: Запрос возвращает только часть записей
    #39895658
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p.p.s.
сталкивался с тем. что "стандартный" MS драйвер не все фичи Oracle корректно поддерживал. Сталкивался на blob'ах. Приходилось ставить Oracle драйвера (ODBC и пр.)
...
Рейтинг: 0 / 0
ADO: Запрос возвращает только часть записей
    #39895668
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
ADO: Запрос возвращает только часть записей
    #39895926
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
1) С первого же взгляда, нафига курсор adOpenStatic
что бы было?
чем стандартный adOpenForwardOnly не удовлетворяет
Чтобы ходить туда-сюда. Сначала была идея через adOpenForwardOnly выгрести все данные в свои структуры. Потом, когда я не понял почему у меня MoveNext так долго работает, я решил сделать "привязку" в ListView напрямую к рекордсету. Потом уже спустя много лет я понял, что проблема не в MoveNext, но adOpenStatic так и оставил, так как скорость особо не поменялась.

Leonid Kudryavtsev
самое первое дело попробывать на стандартных (дефолтных) настройках. Т.е. без всяких adOpenStatic, adAsyncFetch и прочей порнографии
Собственно, в начале так и было, я вообще не пользовался Open-ом, а использовал Command и Execute, у них эти все настройки выставить нельзя. Но, видимо, мне не повезло
, в начале экспериментов над далёкой большой таблицей, у меня не было счётчика строк, я, видимо, просто не дождался момента, когда все строки загрузились. Завтра с утра на работе всё верну назад и буду пробовать дефолтный вариант.

Leonid Kudryavtsev
подозреваю, что Вы как-то не корректно работается с курсором adAsyncFetch и с ним нужно работать как-то по особенному (асинхронно?))) )
Да финн знает, вроде как обычно MoveFirst -> { MoveNext } а как с ним можно необычно работать?

Leonid Kudryavtsev
сталкивался с тем. что "стандартный" MS драйвер не все фичи Oracle корректно поддерживал. Сталкивался на blob'ах. Приходилось ставить Oracle драйвера (ODBC и пр.)
У меня оракловый провайдер.

Leonid Kudryavtsev
деньги на пиво переводить на счет крафт-бара ТвинПикс. Санкт-Петербург, Лиговский пр. 9.31
Это очень хорошая идея, если есть номер карты/телефон, я бы перевёл денег на пиво, люди должны получать радость за свои скиллы, тем более завтра пятница
...
Рейтинг: 0 / 0
ADO: Запрос возвращает только часть записей
    #39896026
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не помогло :(

Пробовал так:
Код: plaintext
1.
rs.Open ("select ...", ActiveConnection, adOpenForvardOnly, adLockUnspecified, adOptionUnspecified);


и так:
Код: plaintext
1.
cn.Execute ("select ...", nullptr, adCmdUnknown);


где cn - _ConnectionPtr, который
Код: plaintext
1.
cn.Open(connString, user, pswd, -1);
...
Рейтинг: 0 / 0
ADO: Запрос возвращает только часть записей
    #39896436
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делать тестовый пример (простейший .C который просто подсчитывает результат + скрипт на создание данных).

IMHO Странно это.
Не верю я, что ADO настолько кривой ))) ==> где-то ошибка в коде.
...
Рейтинг: 0 / 0
ADO: Запрос возвращает только часть записей
    #39915188
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, проблема была в том, что из-за огромной выборки приложению не хватает памяти. При этом ADO перестаёт тянуть данные, не сообщая об ошибке. Это в случае adOpenForwardOnly. Просто на очередной записи говорит eof и всё. А вот в случае CursorLocation = adUseServer, оно падает, всё ок.

И вот интересно, по идее, adOpenForwardOnly - это получение 1 записи за 1 раз? Если так, то почему по мере MoveNext использование памяти в приложении нарастает? Или я опять что-то не так делаю?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ADO: Запрос возвращает только часть записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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