Форум: "Базы";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
ВнизПодскажите как в 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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.008 c