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

Вниз

Регулировка закачки данных   Найти похожие ветки 

 
Андрусь   (2002-06-18 11:27) [0]

Помогите,люди знающие добрым советом! Такая проблема:есть база с большими таблицами.Нужно запретить пользователю выкачивать инфу на клиента большими порциями,которые соответственно будут отнимать время. Так вот задачка в том,чтобы регулировать подкачку. Может кто сталкивался с проблемой. Зараннее спасибо!


 
roottim   (2002-06-18 11:38) [1]

а в чем проблема? и какие компоненты доступа?
помоему феч есть везде и в БДЕ тоже


 
Андрусь   (2002-06-18 11:45) [2]

Проблема в скролинге,я извиняюсь за не совсем корректно заданный вопрос. Когда пользователь кликает в конец скролинга на клиент начинается закачка большого количества инфы(попросту смещение на последнюю запись). Спасибо за участие.


 
Sergey13 ©   (2002-06-18 11:50) [3]

А каким макаром они выкачивают? Сами запросы пишут? Или где? Если сами то по рукам бить - административный путь. Если каким то приложением - то лопатить это проложение на предмет оптимизации.


 
Андрусь   (2002-06-18 12:13) [4]

Не ругайся Серегей_13! Вопрос общий. Приложение моё. И я его хочу оптимизировать для удобства пользователей. Они запросов не пишут. А впрочем это не совсем то.. Вопрос то в чём. Когда пользователь кликает на конец скролинга грида,то происходит закачка на клиента,которая в виду больших объёмов может занимать некоторое время,чего и хочется не допускать,регулируя подкачку.
Но всё равно спасибо.


 
Mike_Goblin ©   (2002-06-18 12:34) [5]

Раз приложение твое и пользователь не делает прямых SQL запросов из него, значит ты построил его так что САМ допускаешь возможность получения больших выборок. Попробуй оптимизировать.

В МS SQL когда делал поиск по заданным пользователем условиям писал хранимую процедуру, которая сначала анализировала число записей выборки и если оно превышало порог просто выдавала ошибку


 
Johnny Smith ©   (2002-06-18 12:37) [6]

2Андрусь (18.06.02 12:13)
Вопрос общий
Ну, я бы не сказал, что общий. Очень даже не общий.
Решений я вижу по крайней мере два.
1) Выкачивать на клиента ВСЕ данные до того момента, как пользователь из увидит в гриде. Тогда пусть он хоть обскроллится - все будет летать. Но это будет не совсем клево - время на выкачивание будет просто перераспределено.
2) Более сложный вариант - разработать политику выкачивания отдельных блоков в зависимости от действий юзера.


 
Андрусь   (2002-06-18 13:40) [7]

>Johnny Smith, извиняюсь - Вопрос общий - для меня он такой
Я иду по пути 2. И возникшая проблема - сколинг - очередной шаг по этой дорожке.Как по клику на конец скролинга ограничивать порцию закачки. Спасибо.



 
Внук ©   (2002-06-18 13:51) [8]

Андрусь (18.06.02 13:40)
Очень понятная проблема. Сам в свое время решил следующим образом: перписал DbGrid (унаследовал), чтобы при перетаскивании ScrollBar"а он читал не все (как по умолчанию), а очередной пакет. Плюс кнопка Last для особо пытливых пользователей. Посмотри исходники DOA и DBGrid (его реакцию на VM_SCROLL) и станет понятно, как нужно изменить Grid.


 
Внук ©   (2002-06-18 13:57) [9]

А, вот, нашел... Вроде вырезал все лишнее без ошибок...

type
TNSIDBGrid=class(TDBGridEH)
private
procedure WMVScroll(var Message:TWMVScroll);message WM_VSCROLL;
protected
public
published
end;


procedure TNSIDBGrid.WMVScroll(var Message:TWMVScroll);
var SI: TScrollInfo;
begin
if not AcquireFocus then Exit;
if Datalink.Active then
with Message,DataLink.DataSet do
case ScrollCode of
SB_LINEUP: DataLink.DataSet.MoveBy(-Datalink.ActiveRecord - 1);
SB_LINEDOWN: DataLink.DataSet.MoveBy(Datalink.RecordCount - Datalink.ActiveRecord);
SB_PAGEUP: DataLink.DataSet.MoveBy(-VisibleRowCount);
SB_PAGEDOWN: DataLink.DataSet.MoveBy(VisibleRowCount);
SB_THUMBPOSITION:
begin
if IsSequenced then
begin
SI.cbSize := sizeof(SI);
SI.fMask := SIF_ALL;
GetScrollInfo(Self.Handle, SB_VERT, SI);
if SI.nTrackPos <= 1 then First
else if SI.nTrackPos >= RecordCount then DataLink.DataSet.MoveBy(DataLink.DataSet.RecordCount-RecNo+1)
else RecNo := SI.nTrackPos;
end
else
case Pos of
0: First;
1: DataLink.DataSet.MoveBy(-VisibleRowCount);
2: Exit;
3: DataLink.DataSet.MoveBy(VisibleRowCount);
4: begin
First;
DataLink.DataSet.MoveBy(DataLink.DataSet.RecordCount);
end;
end;
end;
end;
end;


 
roottim   (2002-06-18 14:02) [10]

вот насколько большие обьемы.. и от этого зависит..
методы DOA и ODAC оптимизированы и неплохо управляю запрашиваемыми вами требованиями
но
допустим список лиц
ид, ф, и, о, возр, пол, паспорт, и тд и тп

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


 
Андрусь   (2002-06-18 14:59) [11]

Спасибо.



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

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

Наверх




Память: 0.49 MB
Время: 0.015 c
3-47239
Ptr
2002-06-20 18:08
2002.07.15
AutoInc в InterBase


1-47407
Бен
2002-07-01 17:12
2002.07.15
Как в фастрепорте определить расход бумаги при печати?


14-47679
Evgeny
2002-06-17 14:16
2002.07.15
CreateWindow


3-47097
id_privin
2002-06-20 19:55
2002.07.15
Загрузка данных в Oracle


3-47187
SkyWalker
2002-06-18 14:40
2002.07.15
IB