Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
29.07.2003, 15:22
|
|||
|---|---|---|---|
|
|||
Вот такая тема ...... |
|||
|
#18+
Мужики вот такой вопрос. Делаю новый проект в C++Builder 5.0 (можно и в Делфях). Ложу на форму комп. Tquery. " Query->SQL->Clear(); Query->SQL->Add("select * from job"); Query->Open(); Query->Close(); " - это реакция на кнопку... Можно как-нить сделать так чтоб он не выбирал все в память когда делаешь Open(). Т.е. типа того что он делает FetchAll() когда запускаешь Query... а мне этого не надо. Надо только первую запись !!!!!!!!!!!!! Select first ... Select top ... не предлагать ... :) не работает ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.07.2003, 16:06
|
|||
|---|---|---|---|
|
|||
Вот такая тема ...... |
|||
|
#18+
Я уже собрал вот такие варианты-предложения: Код: plaintext 1. 2. 3. 4. BDE не признает все это под разными предлогами ... :((( Кто еще ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.07.2003, 18:03
|
|||
|---|---|---|---|
|
|||
Вот такая тема ...... |
|||
|
#18+
Странно.. Select top 1 * from job должно железно сработать. Либо у тебя "веселая" база. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.07.2003, 18:04
|
|||
|---|---|---|---|
Вот такая тема ...... |
|||
|
#18+
Попробуй сделать Query->CachedUpdates = false... TBDEDataSet от которого наследуется TQuery. Help on FetchAll Call FetchAll to reduce network traffic when using cached updates. FetchAll calls CheckBrowseMode to post any pending changes, and then retrieves all records from the current cursor position to the end of the file, and store them locally. Ordinarily when CACHED UPDATES ARE ENABLED, A TRANSACTION RETRIEVES ONLY AS MUCH DATA AS IT NEEDS FOR DISPLAY PURPOSES. Each new fetch starts a new, read-only transaction. To consolidate transactions and reduce network traffic, an application can call FetchAll to retrieve all data in a single transaction. Хотя CachedUpdates по умолчанию и так равен false... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.07.2003, 12:28
|
|||
|---|---|---|---|
|
|||
Вот такая тема ...... |
|||
|
#18+
To: Casper_ " Странно.. Select top 1 * from job должно железно сработать. Либо у тебя "веселая" база. " Наверное странно. Ты не первый мне это предлагаешь - но ничего не работает. Может у меня версия BDE не та. Вообще от версии это может зависить. Еще странней что в описании SQL в файле "C:\Program Files\BDE\localsql.hlp" ни про "Top" ни про "First" нет ничего. Вот. To: MrAlex Попробуй сделать Query->CachedUpdates = false... ....... Хотя CachedUpdates по умолчанию и так равен false... CachedUpdates действительно стоит по умолчанию... и ни черта не помогает. Вот делаю простой проект с одной формой и одним Tquery "select * from таблица" я пробовал на табл. с 250.000 записей. Положил даже на ворму два Label'а которые показывали время Начала и Конца. Запуск с любыми параметрами Query давал около 2 с половиной минут .на Celeron 1200 . Вот так и никакой надежды получить просто первый N записей. :((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.07.2003, 14:20
|
|||
|---|---|---|---|
Вот такая тема ...... |
|||
|
#18+
что у тебя за база?? формат??? и структуру таблицы???? покажи плиз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.07.2003, 15:50
|
|||
|---|---|---|---|
|
|||
Вот такая тема ...... |
|||
|
#18+
что у тебя за база?? формат??? и структуру таблицы???? покажи плиз... To Felix Как тебе ее показать ?! Файл Paradox. Т.е. табл. с двумя полями (int)(VarChar) Все . . . Да эта проблема с любыми базами . . . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.07.2003, 17:36
|
|||
|---|---|---|---|
Вот такая тема ...... |
|||
|
#18+
структуру таблици, ет где какого типа поля и какие ключевые и все остальное... ладно примерное понятно... я с парадоксом не работал там где я проверял все работает... но там не ТОР просто синтаксис СУБД другой... совет... возьми какой нить скул менеджер зайди в сою базу и выполни запрос с ТОР, если не выйдет значить твоя СУБД не поддерживает данный оператор в запросе, ищи в документации.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.07.2003, 17:40
|
|||
|---|---|---|---|
Вот такая тема ...... |
|||
|
#18+
А что значить взять первую запись ... ??? первую попавшуюся ??? Если есть какой то критерий например макс ид или что то в этом роде, то сосавь нормальное where - выражение (фильтр) по этому критерию ... помоему так ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.07.2003, 07:53
|
|||
|---|---|---|---|
|
|||
Вот такая тема ...... |
|||
|
#18+
Привет Всем! Спасибо всем за активность. Любую. Описание задачи. БД - BDE. Файл - Job.DB. - Формат "Paradox". Структура таблицы - Два поля Job_id(int), Name(Varchar), Date_work(Date) (Структура не обсуждается - я ее на ходу придумал - рез-т и причины работы от нее не зависят) Кол-во записей - около 250.000. Есть проект на C++ Builder 5.0 (можно и Делфи - нет разницы) с одной формой. На форме также есть одна кнопка и ListBox, например, для вывода результата. (да и TQuery еще) Что мне надо - надо чтоб по нажатию на кнопку Query выбирал по любому условию записи в ListBox. Но так как записей в таблице достаточно много то сам процесс выборки всего займет очень много времени, да и не целесообразно это - 250000 строк в списке пользователю не надо. Т.е. задача усложняется надо выбрать например 100 первых записей, поместить их в ListBox и, например, когда пользователь дойдет до последней строки в ListBox у него выбирается следующая "партия" строк. Вот. Кончено, это было бы просто сделать через TTable - но этот вариант отпадает (по разным причинам). Вот. И мой то вопрос заключается в том: как реализовать эту схему ? Рассмотрим реакции на кнопку. Вариант 1, когда выбираются Селектом все записи и в цикле пишутся первые 100 в ListBox. Query->SQL->Clear(); Query->SQL->Add("select * from job"); Query->Open(); int i=0; For (Query->First();!Query->EOF; Query->Next()) { ListBox1->Items->Add(Query->FieldByName("name")->AsString); i++; if (i>100) break; } Query->Close(); p.s. Select можно с любым условием Вы знаете сколько выполняется этот селект с 250000 записями? На Celeron 1200 около 2,5 мин. Вариант 2, когда выбираются Селектом первые 100 записей и в цикле пишутся все выбранные в ListBox. Query->SQL->Clear(); Query->SQL->Add("select top 100 * from job"); Query->Open(); For (Query->First();!Query->EOF; Query->Next()) { ListBox1->Items->Add(Query->FieldByName("name")->AsString); } Query->Close(); p.s. Еще варианты Select'a, предложенные на форумах SQL.RU, которые у меня не работают: "select top 100 * from job" "select first 100 * from job" "select * from job where recno() < 100" Какие мысли? P.s. надо же сколько с утра энергии .... стока на одном дыхании наПисать ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.07.2003, 14:36
|
|||
|---|---|---|---|
Вот такая тема ...... |
|||
|
#18+
Может быть дело в том, что применяется локальная БД. Попробуй выполнить такой TQuery например на Access через ODBC. Вообще TTable при открытии (TTable открывается функцией DbiOpenTable) перечитывает все записи, а TQuery (открывается функцией DbiQExec) читает только то количество записей, которое определяется по-видимому внутренним буфером BDE. Поэтому скорость открытия TQuery не зависит от общего количества записей по данному условию, а TTable зависит. Может быть то, что в твоём случае выбирабются все записи, как я сказал ранее, зависит от локальной СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.08.2003, 09:35
|
|||
|---|---|---|---|
|
|||
Вот такая тема ...... |
|||
|
#18+
Так, начнем по-порядку Код: plaintext Если ты пишешь Open() то само-собой получишь весь результат. Т.е никто его для тебя порциями с сервера отправлять не будет. Для решения есть несколько путей: 1 - серверные курсоры. С ними не работал поэтому могу ошибвать. Все ODBC и ADO свою работу с БД строят на концепции курсоров - будем считать что это что-то типа последовательности с операциями навигации ( типа Next() и т.д. ) Далее курсоры бывают разными, в частности клиентскими и серверными. В случае серверного курсора его управлением занимается сам сервер и храниться он на сервере по-этому вся выборка на клиента не попадает. У подхода есть минусы. Как я понял это Legacy и сейчас уже мало какие провайдеры данных его поддерживают 2 - постраничная выборка Как ее реализовать посмотри на форуме по MS SQL IMHO Советую тебе при самом процессе пректирования учитывать что на запрос ты получает результат и если все записи тебе не нужны - тогда надо менять сам запрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.08.2003, 19:43
|
|||
|---|---|---|---|
Вот такая тема ...... |
|||
|
#18+
2Максим (m-axic) согласен... нужно через запрос... я никак не пойму почему у тебя не работает SELECT TOP 100 * FROM job даже потратил 15 мин создал базу парадокса.... проверил, работает.... так вот... выбираешь постранично... как раелизовать переход смотри сам.. либо кнопки вперед назад... либо отслеживай позицию курсора в листбоксе.. и меняй запрос на выборку.... вариант на скорую руку: следить за курсором в лисбоксе... то есть на апдейт выбирать скажем по 10 записей верх и вниз от позиции.. НО... опять таки.. ТОР выберет что то вроде "верхние записи.." нужо ключевое поле ид... но ет как бы для варианта с постояннм нахождением в середине списка.... мдя... глянул так на свой вариант сам запутался.... мораль : выбирай запросом то что нужно.... ТОР работает!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&tablet=1&tid=2036130]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 284ms |

| 0 / 0 |
