Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.14;
Скачать: CL | DM;

Вниз

Подскажите как в DBGrid1 отображать только часть записей, а при   Найти похожие ветки 

 
diokant   (2003-06-18 14:13) [0]

Уважаемые Мастера Delphi! Подскажите как в DBGrid1 отображать только часть записей таблицы сервера, а при очередном нажатии пользователем на кнопку - отображенные записи в DBGrid1 оставались и добавлялись следующие n записей этой таблицы.


 
NickBat ©   (2003-06-18 14:32) [1]

Ну так все нормальные компоненты доступа к БД тянут с сервера только, то что в данный момент видно на экране.


 
MsGuns ©   (2003-06-18 16:18) [2]

>NickBat © (18.06.03 14:32)
>Ну так все нормальные компоненты доступа к БД тянут с сервера только, то что в данный момент видно на экране.

Где мне взять такую компоненту, чтоб было видно на экране в данный момент все 743 записи, что вернул сервер


;)))


 
diokant   (2003-06-18 16:19) [3]

Да, но мне необходимо, чтобы после того с сервера на клиент получен набор записей и отображен в DBGrid, он оставался, а значения следующего запроса добавлялись в DBGrid.
Т.е есть таблица из 100000 записей, по нажатию кнопки в DBGrid отображается 50 интересуемых пользователя записей, следуюжий запрос к серверу - еще 50, но в DBGrid отображается уже 100 записей и так с каждым следующим нажатием... При этом с сервера на клиента поступает по 50.


 
SaS13   (2003-06-18 16:27) [4]

diokant (18.06.03 16:19)
не использовать DBGrid


 
SaS13   (2003-06-18 16:28) [5]

или юзать временную таблу, куда сливать данные с сервера (если записей по 50 штук :)))


 
JibSkeart ©   (2003-06-18 16:30) [6]

top


 
NickBat ©   (2003-06-18 17:53) [7]

> MsGuns © (18.06.03 16:18)


> Где мне взять такую компоненту, чтоб было видно на экране в
> данный момент все 743 записи, что вернул сервер

??? Я писал не об этом.
На экране помещается 20 записей - с сервера перекачиваются только эти 20 записей.
Технологией сжатия изображения не владею. :)))



 
diokant   (2003-06-18 17:55) [8]

>или юзать временную таблу, куда сливать данные с сервера
думаю мне не подойдет, так как нужно редактировать данные в DBGrid1.

>не использовать DBGrid
Если не трудно - подскажите подробнее




 
SaS13   (2003-06-18 18:14) [9]

diokant (18.06.03 17:55)
Да хотябы стандартный StringGrid, данные хранишь в структуре TList + record. Когда необходимо добавляешь данные в структуру и таблицу, отлавливаешь изменения данных в табле - update"ишь запись на сервере.


 
diokant   (2003-06-18 18:22) [10]

>top
Если не трудно - подскажите подробнее

А можно ли в одном DBGrid отобразить данные не из одного, а из нескольких DataSource. Если да (и можно бы было редактировать) - то думаю это подошло бы...


 
diokant   (2003-06-19 09:46) [11]

Уважаемые Мастера Delphi!
Мне нужно, вытаскивать на клиента записи порциями из одной таблицы сервера, но так, чтобы в DBGrid отображались записи всех порций и любую из записей можно бы было редактировать прямо в DBGrid.

Пожалуйста, подскажите, наиболее "красивый" вариант реализации.


 
Johnmen ©   (2003-06-19 09:58) [12]

Во-первых, тебе уже сказали, что с нормальные компоненты доступа так и делают - NickBat © (18.06.03 14:32)
А во-вторых, не совсем представляю, как ты хочешь "чтобы в DBGrid отображались записи всех порций" ? А если их 1000 ? Ил у тебя монитор 1700 дюймов ? :)))



 
Zacho ©   (2003-06-19 10:02) [13]


> diokant (19.06.03 09:46)

Не совсем понятно все-таки, чем не устраивает стандартное поведение TDataSet. Данные в него и так загружаются не все сразу, а именно порциями. Т.е. примерно так:
Есть DataSet и подключенный к нему DBGrid. Открываем DataSet. Он закачивает с сервера столько записей, сколько видно в гриде. Когда пользователь начинает перемещаться по записям в гриде, то если нужно показать еще не закачанные записи, с сервера закачивается новая порция и добавляется в буфер DataSet"а.


 
diokant   (2003-06-19 11:00) [14]

>Во-первых, тебе уже сказали, что с нормальные компоненты >доступа так и делают - NickBat © (18.06.03 14:32)
>А во-вторых, не совсем представляю, как ты хочешь "чтобы в >DBGrid отображались записи всех порций" ? А если их 1000 ? Ил у >тебя монитор 1700 дюймов ? :)))

Дело в том, что клиент связывается с сервером по модемной связи.
Если я сделаю запрос SELECT * FROM T1 - то запрос будет выполняться долго.
Поэтому я хочу:
- сообщить количество записей в таблице (скажем 50000)
- пользователь формировал условие,
- после чего я определяю количество записей, которые соответствуют условию и сообщаю это пользователю
- если пользователь хочет увидеть эти записи, а число этих записей меньше скажем 100 (100-потому что это по времени где-то секунд 10), то я отображаю их в DBGrid (если они не помещаются на экране - есть вертикальная прокрутка)
- пользователь формирует новое условие,
- после чего я определяю количество записей, которые соответствуют условию (среди них определяю количество уже имеющихся на клиенте (в DBGrid) и количество, которое необходимо еще получить с сервера на клиента)
- если число таких записей меньше скажем 100(100-потому что это по времени где-то секунд 10), то я отображаю их в DBGrid, т.е в DBGrid будут старые записи + новые подкачанные.

Таким образом на клиенте будет множество записей(все они доступны в DBGrid, а если они не помещаются на экране - есть вертикальная прокрутка ), подмножествами которого являются множества записей, удовлетворяющее всем условиям, которые формировал пользователь. При этом пользователь имеет возможность редактировать любую из отображенных в DBGrid записей


 
Zacho ©   (2003-06-19 11:18) [15]


> diokant (19.06.03 11:00)

Как я понял, на самом деле тебе надо, что бы пользователь мог видеть (и редактировать в гриде) результат нескольких последовательных запросов.
Один из вариантов решения: использовать какую-либо MemoryTable, в которою и сливать результаты запросов.


 
Zacho ©   (2003-06-19 11:24) [16]

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


 
diokant   (2003-06-19 11:57) [17]

>Как я понял, на самом деле тебе надо, что бы пользователь мог >видеть (и редактировать в гриде) результат нескольких >последовательных запросов.
Да.

>Один из вариантов решения: использовать какую-либо MemoryTable, >в которою и сливать результаты запросов.
А можно немного подробнее?


 
Zacho ©   (2003-06-19 12:09) [18]


> diokant (19.06.03 11:57)

Есть компоненты, наследники TDataSet, которые работают с данными не в какой-либо БД, а в памяти. Я в свое время использовал TRxMemoryTable (могу и ошибаться в названии, давно это было), спроси - тебе здесь посоветуют каким лучше пользоваться и где взять.
А алгоритм работы примерно такой:
Выполняется запрос. Полученный в результати этого запроса набор данных записывается в MemoryTable. Выполняется следующий запрос - полученный набор данных добавляется к набору в MemoryTable. И т.д.
Для того, чтобы отредактированные данные можно было отправить на сервер у этой MemoryTable пишется обработчик, например, OnBeforePost, в котором и выполняется запрос UPDATE .. .


 
diokant   (2003-06-19 13:04) [19]

Спасибо...



Страницы: 1 вся ветка

Текущий архив: 2003.07.14;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
3-44574
mikeee
2003-06-18 15:47
2003.07.14
Подскажите по InstallShield Express


1-44713
yura
2003-07-01 05:14
2003.07.14
Создание папки


4-44955
alex_2_2
2003-05-12 16:51
2003.07.14
консольный вопрос


1-44747
Th
2003-06-30 13:10
2003.07.14
Изменение высоты Caption-области у окна


14-44869
LinOS
2003-06-26 07:47
2003.07.14
Плодимся и размножаемся.