powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вот такая тема !!!!!!
25 сообщений из 26, страница 1 из 2
Вот такая тема !!!!!!
    #32220985
Максим (m-axic)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужики вот такой вопрос.

Делаю новый проект в 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 ...
не предлагать ... :)
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32221004
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Ты че кросспостишь?

Задал вопрос - жди ответ (там, где задал).
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32221079
Максим (m-axic)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понял что ты сказал ...
А в чем собственно проблема ... Моя тема че не попадает в рамки этого форума ??????????!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32221387
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое "первая запись" ?
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32221647
Фотография Mihail R.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй CursorLocation:=clUseServer
он выбирает первую порцию данных, затем по необходимости остальные.
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32221685
Максим (m-axic)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot oleg_e]
Что такое "первая запись"?
[/quot ]
Select выбирает N записей. Кстати N в моем случае около 150.000.
Так вот а мне надо чтоб мой Query выбрал только 1-ую запись.

[quot Maihail]
попробуй CursorLocation:=clUseServer
[/quot ]
К сожалению это только в ADO компонентах.
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32221687
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что если поколдовать над фразой "select * from job". Нафига тебе запрос который возвращает 150 000 записей?
Напоминает сокраментальное "Сами создаем себе трудности, и сами же их мужественно преодолеваем".
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32222042
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> Так вот а мне надо чтоб мой Query выбрал только 1-ую запись.

1-ая запись в каком смысле?
Может в порядке возростания по какому-то полю?
А может в порядке их добавления в таблицу?
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32222058
Максим (m-axic)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1-ая запись в каком смысле?
Может в порядке возростания по какому-то полю?
А может в порядке их добавления в таблицу?


Вот смотри ... Есть Селект.
"select * from job"
или
"select job_id, name from job"
не важно, хоть как


Он выбирает все записи(строки) таблицы Job. Верно ?

А мне надо выбрать, например, не все записи, а первую или, например, первые 100 записей. Вот и встал такой вопрос. Выбирать можно как угодно, хоть по возрастанию, хоть по убыванию по любому полю. Я думаю мы оба знаем как это делать. Но как в BDE выбрать только первые N записей ????

Вот.
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32222327
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если просто надо получить рекордсет со 100 записями, то
select top 100 ...
А если получить на клиента, то в ADO cluseServer. А умеет ли это TBDEDataSet... ? Вроде ссылок на методы работы с internal буферами, кроме их получения через TDataSet.Buffers нет, так что Вы вряд ли можете на это повлиять. Есть TBDEDataset.BlockReadSize, TBDEDataset.CacheBlobs, но это не то маленько...
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32222531
Максим (m-axic)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я УСТАЛ УЖЕ ПИСАТЬ !!!!!!
SELECT TOP xxx ...
SELECT FIRST xxx ...
SELECT * from Table where RECNO() =< XXX

ЭТО ВСЕ НЕ РАБОТАЕТ !!!!
Я бы давно уже так и сделал ...
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32222595
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая стрктура таблицы?

В чем вообще смысл?
При каком-нибудь событии выбираем N (N = 1 и более) записей.
В следующий раз выбираем следующие N записей.
И так далее.
Я правильно понял?

Можно про задачу вообще узнать?
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32222651
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про where почитай
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32223062
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начинать надо было с того, какая используется база. У нас сейчас все телепаты в отпуске.
В MS SQL, например, понятия "номер записи" не существует. А запуск SELECT TOP 1 без order by может выдавать разные записи - какие там первые в кэше подвернуться.

И в дополнение к постингу MPro. И про ORDER BY тоже.
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32223138
Виктор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С какой базой работаешь ?
Уточню ответ Cat2, сказав что в реляционных базах данных вообще нет такого понятия - номер записи.

И вообще, если ты " УСТАЛ УЖЕ ПИСАТЬ !!!!!! ", не писай :)
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32223174
Максим (m-axic)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Всем!
Спасибо всем за активность. Любую.

Описание задачи.
БД - 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.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.

Код: plaintext
1.
2.
3.
4.
5.
6.
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, которые у меня не работают:

Код: plaintext
1.
2.
"select top 100 * from job"
"select first 100 * from job"
"select * from job where recno() < 100"

Какие мысли?
P.s. надо же сколько с утра энергии .... стока на одном дыхании наПисать ;)
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32223415
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что я могу предложить.... Автомат калашникова! (хе-хе)

Надо чтобы Job_id был уникальным полем и индекс по этому полю нужен!

Query1 ('select * from job where Job_id between :FromJob_Id to :ToJob_Id')
В параметрах указывать диапазон значений.
Диапазон можно выбирать приблизительно, например 0..99, 100..199, и т.д.
Годится если Job_Id задавался по порядку, если нет то нужно еще:

Query2 ('select Job_id from job order by Job_id')
Посмотреть сколько времени он выбирет данные.

Далее из Query2 выбираешь нужные элементы диапазона.
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32223787
Максим (m-axic)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To: Oleg_e.

поверхностно ......
Если бы я сортировал по Job_id, то может быть у меня во это бы и вышло и я бы наверняка в условии просто написал Job_id<100

Job_id ____ Name
1 ывафыва
2 фываываы
3 лдаоаппвапап
4 вапвап
5 вапвап
6 вапывалп
7 ывапвыап
...... ............
N

Но у меня может быть любая сортировка (читать выше) и по двум и по трем полям !!!
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32224359
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это Paradox через BDE, то не нужно заморчиваться селектами. Используйте прямой доступ. Фильтры по полям кластерного индекса в парадоксе работают очень шустро, а первые 100 записей без проблем отобрать в цикле по курсору и все это будет в секунды.
========
СУБД Paradox умеет оптимизировать запросы, но только написанные не на SQL, а на QBE. Я не знаю тонкостей реализаци BDE, но у меня создается впечатление, что при выполнении селектов идет тупое сканирование всей базы.
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32224440
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неверный подход однозначно юзер должен указать по какимлибо признакам что ему конкретно надо
непонятно чем listbox лучше dbgrid
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32224463
Виктор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, представляю, как будет материться юзер, просмотрев весь список из четвертьмиллиона строк и обнаружив нужную ему запись предпоследней....
На форуме уже много раз поднимался вопрос о том, как удобнее отображать значения справочников. И много раз предлагалось сделать едит с кнопкой, по нажатию на которую вываливалось бы окно с бдгридом, содержащим справочник.
Неделю назад меня просили переделать прогу в одной конторе. Просьба была такая - сделать удобнее. Единственное, что потребовалось - переделать отображение справочников с сомбобоксов так, как я сказал выше. Народ очень доволен, говорят, раньше, когда у них некоторые справочники перевалили за 1000 записей, они сходили с ума понемногу :)

И еще, лучше использовать dbgridEh, там много всяких фич, можно простенький поиск забабахать и т.д. и т.п.
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32224515
Максим (m-axic)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужики. Спасибо всем за ответы.
Я думаю много проясниться если вы увидете воочию о чем идет речь.
"О чем идет речь" можно скачать по адресу... Это есть версия 1.1 моей программы и то про что я пытался все это время вас спросить есть список решений Самарского Арбитражного Суда, т.е. судебная практика. Я пытался приводить вам простые примеры дабы не загромождать лишним, но видимо не очень это здорово получилось - как-то в другом направлении решались вопросы. Так вот то что тут можно скачать - это http://sas.technova.ru/ ]демоверсия . Там около 100 документов всего. В рабочей же версии есть разделы в которых порядка 5000 документов. Согласен это мрачно, но суть не в этом - это уже не моя задача, а юристов.
Вот так.
Я щас напишу еще одну тему по этой программе в этом форуме и форуме С++ - если что пишите, отвечайте. Думаю тема будет интересна.

Спасибо за внимание.
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32224960
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
абсолютно нечего обсуждать
таких програм милион и во всех приличных используется поиск, а идея с просмотром всех подряд просто дебильна на уровне просмотра всех сайтов подряд вместо ramblerа или другого поиска
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32225102
Максим (m-axic)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To mpro

Обсуждать как раз есть чего. Читай внимательно !!!

"А что такое поиск ?" (философ.)
...
Рейтинг: 0 / 0
Вот такая тема !!!!!!
    #32225393
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше пиши короче и яснее
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вот такая тема !!!!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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