Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Сортировка данных


Автор: Tenyps 1.8.2005, 23:06
Доброго времени суток! Шутка вот такая...
Есть база (Interbase, в принципе ето не важно), из базы делаеться выборка (IBDataSet), навешан DataSource и подключен DBGrid....
В результате запросика получаем большую кучу записей, отсортированных допустим по первичному ключику (ет тоже не важно)....

Надо, после выполнения запроса на выборку сортировать полученные данные по разным столбцам в DBGrid-е либо в IBDataSet-e (если это возможно)...сортировать SQL запросам заново выбирая данные из базы неприемлимо (записей куча...а трафик не резиновый)
Следовательно хотелось бы получить данные из базы всего один раз, а уже в клиентской части сортировать как угодно, с отображением этого в DBGride (причем у всего остального подключенного к IBDataSet эти изменения тоже должны быть активны)

Если вопросик детский...то извините за спам..и дайте линк что почитать......

Автор: Петрович 1.8.2005, 23:09
Воспользуйся компонентами FIB+. Там есть локальная сортировка. Либо попробуй поиграться с tClientDataset.

Автор: Tenyps 1.8.2005, 23:13
Цитата
Воспользуйся компонентами FIB+. Там есть локальная сортировка. Либо попробуй поиграться с tClientDataset.

Fib+ - я понимаю что есть..но оно немного платное smile...демки юзать не перевариваю
а поиграться - да уже наигрался, потому и обращаюсь

Автор: Лисеночек 2.8.2005, 11:42
Могу посоветовать использовать вместо DBGrid DBGridEh. Нужно установить библиотеку. Там сортировка автоматом идет

Автор: Петрович 2.8.2005, 13:48
Цитата
Могу посоветовать использовать вместо DBGrid DBGridEh. Нужно установить библиотеку. Там сортировка автоматом идет

Ну автомато-то автоматом. Но, DBGridEh ее не сам делает. Если набор данных не умеет локально сртироваться, то и EhLib не поможет. Правда, там есть некий компонет tMemTable, который может помочь. Но, лично мне не удалось им нормально воспользоваться. Мне показалось что он (tMemTable) больно глючный.
Есть QuantumGrid, там есть локальная сортировака. Но он во первых тоже платный, а во вторых, очень громоздкий.

Цитата(Tenyps @ 2.8.2005, 00:13)
Цитата (Петрович @ 1.8.2005, 23:09)
Воспользуйся компонентами FIB+. Там есть локальная сортировка. Либо попробуй поиграться с tClientDataset.


Fib+ - я понимаю что есть..но оно немного платное ...демки юзать не перевариваю
а поиграться - да уже наигрался, потому и обращаюсь

Т.е. с tClientDataset наигрался?

Автор: Tenyps 2.8.2005, 20:51
Игрался я с IBDataSet....так как пользуюсь вкладкой исключительно Interbase...только оно подделано под IBAPI...
Записи все то храняться в Датасете определенным образом..я вот думал что можно вручную поменять порядок их хранения.... smile и как это отразится на подключенных визуальных компонентах если такое возможно smile

Хоть бери и компонент переписывай...неужели авторы не могли подумать о такой простой штуке....причем вполне логичной smile

Автор: Tenyps 2.8.2005, 21:06
Цитата
Правда, там есть некий компонет tMemTable, который может помочь. Но, лично мне не удалось им нормально воспользоваться. Мне показалось что он (tMemTable) больно глючный.

Что за компонентик? чет я не слыхал и не видовал о нем ничего....

Автор: Петрович 3.8.2005, 02:01
Цитата(Tenyps @ 2.8.2005, 22:06)
Что за компонентик? чет я не слыхал и не видовал о нем ничего....

Посмотри, он там в папке EhLib\AdvTech\MemTableEh\. Там же есть некоторое описалово к нему.

Автор: Tenyps 3.8.2005, 09:38
Цитата
Посмотри, он там в папке EhLib\AdvTech\MemTableEh\. Там же есть некоторое описалово к нему.

Ясненько...посотрю скажу что получилось в конечном итоге.....
И как я понимаю больше идей нема? smile

Автор: Петрович 3.8.2005, 12:23
Цитата(Tenyps @ 3.8.2005, 10:38)
И как я понимаю больше идей нема?

Дык я уже писал:
Цитата
Либо попробуй поиграться с tClientDataset.

А ты не с тем игрался:
Цитата(Tenyps @ 2.8.2005, 21:51)
Игрался я с IBDataSet....так как пользуюсь вкладкой исключительно Interbase...только оно подделано под IBAPI

tClientDataset и IBDataSet это не одно и тоже!
Вот тебе пример в котором таблица с IB-сервера отображается в обычном гриде, а по щелчку на заголовке колонок можно сортировать по тому или иному полю. Сделано на tClientDataset+tIBQuery.

Автор: Tenyps 3.8.2005, 16:59
Респект..все работает..большое спасибо...
Сначало при активизации tClientDataSet подчистую приложение висло(при активизации всего остального все было ок)...пришлось дополнтельно покопаться в настройках фаервола...потом все пошло...
Код конешна прикольный...хе...поидее ети свойства должны быть и у других DataSet-ов и также работать..

Автор: Tenyps 3.8.2005, 21:37
Хотя я наверно погарячился что все....
у нас вся ета байда весит на Query....а у меня все запросы на выборку, обновление, изменения весели на IBDataSete....если перевесить все на IBDataSet ??? возможны неприятности ???

Автор: Петрович 4.8.2005, 02:15
Цитата(Tenyps @ 3.8.2005, 22:37)
изменения весели на IBDataSete....если перевесить все на IBDataSet ???

smile

Автор: Tenyps 4.8.2005, 22:10
Не надо вырывать фразы из контекста....
В примере запрос прописан в Query.....в реальной программе все запросы на выборку, обновление, изменения весят в IBDataSete....
Вот я и спрашиваю что если преместить все то что подсоедино в примере к Query на IBDataSet ...то что хорошего из этого получиться ??? Или никаких проблем в етом нет ???
Получается IBDataSEt - Provider - TClientDataSet - DBGrid.....странноватая конструкция.... smile

Автор: Петрович 5.8.2005, 08:27
Цитата(Tenyps @ 4.8.2005, 23:10)
Не надо вырывать фразы из контекста....

Прости, не понял исходной фразы.

Цитата(Tenyps @ 4.8.2005, 23:10)
Вот я и спрашиваю что если преместить все то что подсоедино в примере к Query на IBDataSet ...то что хорошего из этого получиться ??? Или никаких проблем в етом нет ???


Если честно, то сам широко не использую TClientDataSet, поэтому о потенциальных проблемах ничего сказать не могу. Хотя, например, что-то я не нашел как там сделать обратную сортировку (по убыванию)

Вообще, все-таки рекомендую приобрести FIB+ - не так дорого. Зато очень многие проблемы там решены. Сам я опять-же пока ими не пользуюсь. Раньше тоже пользовал IBX, а сейчас просто последние полгода-год вообще IB не пользуюсь smile. Но, имею ОЧЕНЬ положительные отзывы о FIB+ от человека который тоже раньше использовал IBX, и которому я вполне доверяю. С его слов, там много разных "вкусностей" которых очень не хватало в IBX. Да и вообще, IBX довольно кривоват и не доделан smile.

Цитата(Tenyps @ 4.8.2005, 23:10)
Получается IBDataSEt - Provider - TClientDataSet - DBGrid.....странноватая конструкция....

Ну а то что "странноватая конструкция" это не страшно. В нашем мире вообще много странного. А уж в программах ...


Автор: Tenyps 5.8.2005, 22:26
Цитата
С его слов, там много разных "вкусностей" которых очень не хватало в IBX. Да и вообще, IBX довольно кривоват и не доделан smile.

Да что есть то есть..тут и спорить нечего....а Фиб+ я демки смотрел - действительно стоящая штука и вкусностей там хоть отбавляй..особенно для сетей с частыми обрывами связи (как банкоматы например, правда у них свой протокол передачи)..так незаменимая штука...просто лично я не хочу покупать..если Заказчик возьмет..тогда перейду быстро...

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

Автор: Петрович 6.8.2005, 10:17
Цитата(Tenyps @ 5.8.2005, 23:26)
где можно посмотреть более менее полную документацию?

Не знаю. Так что бы все и в одном месте ... Никогда не видел.

Автор: Akella 9.8.2005, 13:37
Цитата
Либо попробуй поиграться с tClientDataset.

вот-вот, я бы то же так сделал, это называется кэширование данных на клиенте.
вначале работы все загружаешь в ClientDataset и уже работаешь с ним локально, можешь даже сохранить всё в xml одной строчкой кода.

Автор: Tenyps 10.8.2005, 23:48
Хотя вопрос решился - я договорился уже про покупку ФИБ+...и не буду мозги себе морочить....
С вордом тоже вроде порядок....единственное не могу вставить данные из базы в конкретную ячейку в таблице в ворде...

Автор: Akella 11.8.2005, 14:32
Цитата(Tenyps @ 10.8.2005, 23:48)
единственное не могу вставить данные из базы в конкретную ячейку в таблице в ворде...

http://forum.vingrad.ru/index.php?showtopic=60398&st=0&unread=#entry488852

Автор: Tenyps 11.8.2005, 23:49
Ну и ниче я не нашел по этой ссылке....
У меня уже есть вордовский файл с таблицей...у которой сложное форматирование...и вот мне надо точно спозиционироваться в определенную ячейку и записать туда пару цифр...
Со строками получаеться все просто замечательно...а вот с таблицей.....

Автор: Петрович 12.8.2005, 01:26
Когда то давно, делал так:
В вордовом документе в нужном месте вместо текста вставлял поле, например {DOCPROPERTY Вася}.
Соответственно, в свойствах этого документа добавлял соответсвующее свойство "Вася".
А дальше, после открытия документа из программы, очень легко изменить значение этого свойства на нужное.
Естественно, тогда и искать ничего не надо - ворд сам все подставит.

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

Автор: Tenyps 13.8.2005, 21:48
Попробую ....сейчас кода ищу куда вставить - очень долго пашет....и притом на неплохой машине...

Автор: Akella 22.8.2005, 14:44
для Word что-то вроде
Код

  Documents.Item.Tables.Item.Cell и т.д. дальше сам пробуй

Автор: Guest 23.8.2005, 22:16
делаю через два варианта......не могу раздуплить какие связи в памяти получаються....
в первом случае после закрытия ворда связи остаютьяся и при закрытии ворда возникает ошибка в сервере при закрыти программы из которой вызываю ворд
во втором случае при закрытие ворда с работающей программой - никаких глюков нет...

Код

WordApplication1.Documents.Open(FileName,......);

потом

WordDocument1:=TWordDocument.Create(nil);
WordDocument1.ConnectTo( WordApplication1.ActiveDocument);



Код

WordApplication:=CreateOleObject('Word.Application');
WordApplication.workbooks.add(OpenDialog1.FileName);


Автор: artzub 28.2.2011, 10:13
а как работать с CleintDataSet на больших выборках.
IBDataSet то буфферизирует указанное колво записей, а ClietnDataSet зачем-то заставляет IBDataSet получать все!!!
Как сказать ClientDataSet чтоб он не получал все?

Автор: Akella 28.2.2011, 11:31
Создай новую тему и поясни нормально, что ты делаешь, что не получается. Ты влез в тему от 2005 года!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)