![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема в выводом последней части запроса [D5]
Alex Chu © (2002-07-16 10:56:00)Мужики! Есть банальная проблема, с которой должны сталкиваться были все, кто писал складские или любый другие программы с документообротом...
Суть в том, что при запросе списка документов, надо в dbgrid"е показывать последние, т.е. нижнюю часть запроса (в хронологическом порядке).
select * from DOC order by -iddoc
выплевыется ТО, что надо, есессно, снизу-вверх.
Может есть какая-нить компонента, "переворачивающая" dbgrid?
kaif (2002-07-16 16:00:00) [1]Скачал gb_DataSets Components по совету Johnmen. Очень остроумная вещь. Правда еще не попробовал. Жаль, что ничего раньше не знал об этих компонентах. Они умеют перезапрашивать части набора основного запроса, на ходу соображая, какие условия в WHERE нужно добавить, обеспечивая, таким образом, как бы "навигацию" по набору в сотни тысяч строк.
Хотя, все же хорошо бы свойство иметь TDBGrid.ReverseDisplay. Это мое мнение и никто меня не переубедит. Небось, TLabel-ов под углом 45 градусов наверняка можно надыбать штук 10 версий... А ReverseDisplay явно имеет право на жизнь.
Fiend (2002-07-16 14:58:00) [2]То Alex Chu
Признайся в натуре как добился требуемого результата, бы тоже хотел у себя такое делать не через Desc
VAleksey (2002-07-16 14:13:00) [3]
> надо приучить юзера! :))
Да, да да. И еще. Если что-то не можешь реализовать, то как раз это пользователю и не нужно :)) !
roottim (2002-07-16 13:45:00) [4]точно ... поделись!!!
у меня юзеры на складе 3 года работают...
и очень даже довольны видеть накладные и прочее в порядке DESC, то что последнее всегда лежит сверху, им нравится.
имхо.. ненадо городить грид с такой возможностью, надо приучить юзера! :))
Sergey13 (2002-07-16 13:33:00) [5]2Alex Chu (16.07.02 12:00)
>Вопрос практически решен, спасибо mnefedov!
Ну дак поделись решением. Видишь, тут народ заинтересовался.
Desdechado (2002-07-16 12:44:00) [6]2 kaif © (16.07.02 12:17)
вообще-то я ни на какой криминал не намекал. и если задача есть, ее надо решать.
я просто попытался сформулировать попроще то, как я понял постановку автора.
а то, что грид не работает с запросом напрямую, истина очевидная :)
kaif (2002-07-16 12:17:00) [7]2 Desdechado © (16.07.02 12:10)
DBGrid сам по себе не требует fetch всех записей. А здесь юзеру будет предоставлена оперативная возможность самому управлять количеством fetch. Я не вижу здесь никакого криминала. В MSSQL и в IB 6.5 есть возможность возвращать N строк в самом SELECT. В IB6.0 можно написать хр.процедуру для этого и так решить вопрос.. Но такой грид все равно имеет право на существование.
Johnmen (2002-07-16 12:14:00) [8]>kaif © (16.07.02 11:59)
Проблема в тормозах отображения последних записей НД. Так ?
Если да, то есть набор компонент "gb_DataSets Components"
, решающих эту проблему (дополнение к IBX и FIBPlus).
Desdechado (2002-07-16 12:10:00) [9]Вообще, постановка интересная :)
Сформировать на сервере набор данных, но читать его с конца, наполняя грид как в тетрисе стакан.
имхо, веселенькое занятие :)
kaif (2002-07-16 12:06:00) [10]Уверяю вас, даже если ограничивать зарос датой, это ограничение выставляет пользователь. Поэтому большой диапазон дат, выставленный пользователем вполне вероятен. Предположим, поток документов крайне неравномерен... Сетка с разверткой "наоборот" -идеальное решение, так как позволяет:
1. видеть документы в привычном порядке сверху вниз
2. не требует fetch всех записей
3. не имеет ограничений на диапазон дат, благодаря второму условию.
4. сразу показывает наиболее актуальные (свежие) документы.
Alex Chu (2002-07-16 12:00:00) [11]Вопрос практически решен, спасибо mnefedov!
И всем остальным МАСТЕРАМ тоже...спасибо за участие!
--
Народ, вы сначала вдумайтесь в вопрос...уточните, если, что не понятно, а потом ругайте вопрошавшего!
Или не отвечайте ему вообще, если считаете, что он не достоин Вашего внимания...
Е-мое, все НАСТОЛЬКО умные....что просто стыдно иной раз что-то спрашивать.
kaif (2002-07-16 11:59:00) [12]Вопрос, который задает Alex Chu, чрезвычайно интересен. Действительно, существует такая проблема. Я из-за этого вынужден использовать DESC в запросах, давая юзеру выбрать порядок. И все равно, мне не нравится такое решение, так как нормальный человек не привык видеть список "вверх ногами", даже если его поставить перед выбором из двух зол "Или тормоз - или так".
И Alex Chu прав. И главное, он сумел взглянуть проблеме в лицо и правильно сформулировал ее решение:
нужен DBGrid, выводящий записи из набора на экран в обратном порядке, то есть скроллинг назад, а не вперед. Естественно, что такой Grid должен работать с набором, уже упорядоченным наоборот (DESCENDING) и при этом делать fetch первых N записей набора, отображая их снизу вверх в Canvas.
К сожалению, я не знаю такого компонента, хотя было бы чрезвычайно полезно его иметь. Но я полагаю, что можно переписать текст TDBGrid или его предка. Наверняка там есть место, где происходит разверткаячеек при прорисовке в Canvas. Странно, что это вопрос до сих пор не звучал. И даже не был понят, когда, наконец, прозвучал.
Sergey13 (2002-07-16 11:53:00) [13]2Alex Chu (16.07.02 11:45)
Ну ты блин даешь! Ты же сам писал, что запрос датой ограничивать не надо. Так как же ты не все данные на клиента потянешь?
Johnmen (2002-07-16 11:50:00) [14]Ну ты, блин, даешь ! Даже не указал тип СУБД !
:)))
Alex Chu (2002-07-16 11:45:00) [15]Ну вы, блин, даете!!!
мне не надо качать все данные на клиента!!!
а если их не закачать, переход на поледнюю не имеет смысловой нагрузки!!
Sergey13 (2002-07-16 11:38:00) [16]2Alex Chu (16.07.02 11:25)
Ну дык тебе fnatali © (16.07.02 11:22) и написала. Открой запрос с нормальным Order By(по возрастанию) Query.Open и перейди на последнюю запись Query.Last. Соответственно в гриде курсор уйдет вниз на последнюю запись. Для просмотра более поздних листай вверх. В чем проблема то, зачем грид то "переворачивать"?
mnefedov (2002-07-16 11:36:00) [17]моя аська 12414838
Alex Chu (2002-07-16 11:33:00) [18]ВО! мне, по большому счету все равно, что переворачивать: входящие данные или сам грид...
слово "переворачивать" звучит утрированно.
2mnefedov : к сожалению, БД уже есть и данные в ней уже есть...
а сортировать надо по времени создания, т.к. сегодня можно содавать документы, за прошлую дату.
Как перевернуть входящие данные, сохраняя направление сверху-вниз????
mnefedov (2002-07-16 11:30:00) [19]Можно использовать QuantumGrid - он поддерживает любые сортировки конечного набора данных.
А можно так базу построить чтобы можно было бы написать примерно так:
select * from doc order by DocDate DESC, DocDayNumber ASC
то бишь для этого у документа должна быть дата создания (без времени), уникальный сквозной номер и уникальный номер для одного дня. в результате видим последние документы, отсортированные в порядке их создания в течение дня...
Johnmen (2002-07-16 11:28:00) [20]Еще раз. Зачем переворачивать окно (dbgrid), если можно перевернуть то, что ты в него видишь ?