С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 24

DataSet и большие объемы данных

28.02.2010, 15:48. Показов 2911. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток.

Имеем Borland C++ Builder (по части работы с данными и соотв. библиотек одно и то же). В базе, с которой работает программа, объемы справочников очень велики (100-200 тыс. записей и более). Обычная двухзвенка. Требуется организовать 'быстрый' просмотр данных без избыточного траффика. Быстрый, т.е. такой, при котором не все данные из справочника загружаются на клиента (как это происходит при открытии DataSet и фетче), а только те, которые будут отображаться в гриде. Что-то типа постраничной загрузки, наверное. Т.е. когда жмем кнопку 'пролистать', то грузится следующая страница выборки, а старая удаляется. Тоже самое при движении назад. Это пока только мысли и 'наметки'. Если кто-нибудь уже сталкивался, напишите как решали подобную проблему.

У меня пока мысли следующие. Написать какого-нибудь потомка от TDBNavigator, в нем при подключении считывать кол-во записей в справочнике, определять номер текущей страницы просмотра. Дальше переопределить нажатие на кнопки навигации и при их нажатии старое собержимое очищать и грузить данные новой страницы. Вот только пока не очень понятно как на сервере разбивать данные на эти самые страницы и выдавать по запросу очередную страницу.

Я работаю с ORACLE. Компоненты доступа Direct Oracle Access. Если кто знает как решить возникшую задачу (может в каких-то компонентах доступа к данным проблема постраничной загрузки уже решена, например, а я и не догадываюсь о существовании этих компонент) или кто-нибудь уже решал подобную задачу, пишите. Буду благодарен за ответ.

У кого есть соображения на эту тему, не стесняйтесь))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.02.2010, 15:48
Ответы с готовыми решениями:

Выбор базы данных, поддерживающей большие объемы данных
Доброго времени суток. Прошу совета в подборе клиента баз данных. Необходимо выполнять следующие задачи: -...

Как оптимально обрабатывать большие объемы данных в DataGridView
Добрый день. Загрузил данные из access в datagridview, в 4 разные таблицы, в одной из таблиц до 1000000 строк, подскажите, как лучше...

Большие объемы печати
Что посоветуете для офиса с большими объемами печати? Варианты: -Canon imageRUNNER 1435i -Canon i-SENSYS MF522x Если честно,...

5
3 / 3 / 0
Регистрация: 16.01.2008
Сообщений: 359
07.03.2010, 04:07
а в хранимых процедурах oracle нет оператора типа: suspend ?
0
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 24
07.03.2010, 12:25  [ТС]
а в хранимых процедурах oracle нет оператора типа: suspend ?
Не очень ясно как при помощи оператора типа suspend (если он есть, конечно и выполняет именно те действия, которые подразумеваете вы) можно организовать 'постраничную загрузку' и зачем этот suspend вообще нужен. Если я правильно понимаю ход ваших мыслей, то вы предполагаете при помощи этого оператора не 'выдавать' в клиента сразу весь набор записей, а подгружать их потом по мере пролистывания пользователем например DBGrid. Или я не прав?
В случае, если я прав, то получается:

1. Если пользователь хочет посмотреть только конец справочника (последнюю страницу), то у него на клиентской машине все равно окажется весь набор записей (опять получаем тот избыточный траффик в сети, ради ухода от которого и планировалась постраничная загрузка).

2. Полученный эффект можно достичь установив всего одно свойство свойства компонента TDataSet, и тогда при открытии DataSet не будет происходить Fetch All, а данные будут 'подгружаться по мере пролистывания.

Или вы хотели добиться другого эффекта при помощи этого оператора? Напишите, пожалуйста.
0
0 / 0 / 0
Регистрация: 19.11.2009
Сообщений: 10
07.03.2010, 15:05
В С++ не знаю, в Дельфи есть TClientDataSet у которого есть свойство PacketRecords. Там есть еще FetchOnDemand для BLOB'ов и т.д.
Посмотри, может в Билдере есть аналоги...
Но это трехзвенкой попахивает...
0
3 / 3 / 0
Регистрация: 16.01.2008
Сообщений: 359
18.03.2010, 12:33
про suspend вы совершенно правильно поняли... добавить нечего.
но других вариантов и не придвидется, кроме 'скачивания' всех записей на клиента, либо сразу, либо по мере надобности

кстати, не думали о сервере приложений?
0
0 / 0 / 0
Регистрация: 07.01.2010
Сообщений: 3
18.04.2010, 09:32
День добрый!
Вообще мне непонятно, как можно юзеру продуктивно пролистывать весь справочник, состоящий из > 200к записей?
Ну если уж нет возможности как то ограничить выборкой набор данных, используйте первичный ключ + ХП
В хранимую процедуру передается параметр - стартовое значение ключа и направление т.е. допустим начиная с 300-й записи пролистать -50 записей. Поскольку это справочник, дырок в ключе особо быть не должно.
Для пущего эффекта поиграть с where ROWNUM <, >
и вообще, сходить по этой ссылке:
http://www.sql.ru/faq/faq_topic.aspx?fid=105
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.04.2010, 09:32
Помогаю со студенческими работами здесь

Нужно передавать большие объёмы текстов
всем привет. Такая проблемка вылезла. Мне нужно передавать большие объёмы текстов через &lt;Input value='здесь переменная с большим...

Как быстро копировать большие объемы информации?
Всем добрый вечер! У меня такая ситуация, нужно копировать объемы от 500гб до 3тб очень часто. почти каждый день. Но скорость USB 2.0...

Хеш-таблица, большие объёмы, переход от C++ Builder к Visual C++
Пытаюсь реализовать быстрый поиск в больших объемах данных (порядка миллиарда строк, до 4 миллиардов точно), SQL-сервер уже проходили,...

Считать/записать большие объемы строк в txt файле
Доброго времени суток. Суть есть файл *.txt, в нем порядка 100-200 тыс. строк нужно раскидать его в несколько файлов. Как это...

Передача данных из таблицы одной dataSet в таблицу другой dataSet
Здравствуйте. У меня возникла ситуация когда необходимо передать данные из таблицы одной dataset в таблицу другой dataset, которая хранит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru