Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
7-44930
Renegate
2003-05-05 09:26
2003.07.14
Считывание и запись данных паралельного порта.


1-44679
INTAARI
2003-06-30 11:48
2003.07.14
Как исправить ошибки при подсчете контрольной суммы XOR


6-44779
Igor__
2003-05-07 22:20
2003.07.14
idHTTP


3-44546
Belkova
2003-06-19 15:02
2003.07.14
Exeption AAccessVialation


3-44616
b_baranov
2003-06-19 13:00
2003.07.14
По какому принципу назначать имена таблицам в базе?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский