![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Регулировка закачки данных [D5, Oracle]
Андрусь © (2002-06-18 11:27:00)Помогите,люди знающие добрым советом! Такая проблема:есть база с большими таблицами.Нужно запретить пользователю выкачивать инфу на клиента большими порциями,которые соответственно будут отнимать время. Так вот задачка в том,чтобы регулировать подкачку. Может кто сталкивался с проблемой. Зараннее спасибо!
Андрусь (2002-06-18 14:59:00) [1]Спасибо.
roottim (2002-06-18 14:02:00) [2]вот насколько большие обьемы.. и от этого зависит..
методы DOA и ODAC оптимизированы и неплохо управляю запрашиваемыми вами требованиями
но
допустим список лиц
ид, ф, и, о, возр, пол, паспорт, и тд и тп
если действительно нужен весь этот список... то достаточно ограничится выводом в грид
скажем
ид, ф
а лучше вообще один ид... а в остальном детайл запросы на этот ид.. и по ним лучше иметь индексы (это для сортированного списка) будет и информативно и быстро.
конечно метод не единственный
Внук (2002-06-18 13:57:00) [3]А, вот, нашел... Вроде вырезал все лишнее без ошибок...
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;
Внук (2002-06-18 13:51:00) [4]Андрусь (18.06.02 13:40)
Очень понятная проблема. Сам в свое время решил следующим образом: перписал DbGrid (унаследовал), чтобы при перетаскивании ScrollBar"а он читал не все (как по умолчанию), а очередной пакет. Плюс кнопка Last для особо пытливых пользователей. Посмотри исходники DOA и DBGrid (его реакцию на VM_SCROLL) и станет понятно, как нужно изменить Grid.
Андрусь (2002-06-18 13:40:00) [5]>Johnny Smith, извиняюсь - Вопрос общий - для меня он такой
Я иду по пути 2. И возникшая проблема - сколинг - очередной шаг по этой дорожке.Как по клику на конец скролинга ограничивать порцию закачки. Спасибо.
Johnny Smith (2002-06-18 12:37:00) [6]2Андрусь (18.06.02 12:13)
Вопрос общий
Ну, я бы не сказал, что общий. Очень даже не общий.
Решений я вижу по крайней мере два.
1) Выкачивать на клиента ВСЕ данные до того момента, как пользователь из увидит в гриде. Тогда пусть он хоть обскроллится - все будет летать. Но это будет не совсем клево - время на выкачивание будет просто перераспределено.
2) Более сложный вариант - разработать политику выкачивания отдельных блоков в зависимости от действий юзера.
Mike_Goblin (2002-06-18 12:34:00) [7]Раз приложение твое и пользователь не делает прямых SQL запросов из него, значит ты построил его так что САМ допускаешь возможность получения больших выборок. Попробуй оптимизировать.
В МS SQL когда делал поиск по заданным пользователем условиям писал хранимую процедуру, которая сначала анализировала число записей выборки и если оно превышало порог просто выдавала ошибку
Андрусь (2002-06-18 12:13:00) [8]Не ругайся Серегей_13! Вопрос общий. Приложение моё. И я его хочу оптимизировать для удобства пользователей. Они запросов не пишут. А впрочем это не совсем то.. Вопрос то в чём. Когда пользователь кликает на конец скролинга грида,то происходит закачка на клиента,которая в виду больших объёмов может занимать некоторое время,чего и хочется не допускать,регулируя подкачку.
Но всё равно спасибо.
Sergey13 (2002-06-18 11:50:00) [9]А каким макаром они выкачивают? Сами запросы пишут? Или где? Если сами то по рукам бить - административный путь. Если каким то приложением - то лопатить это проложение на предмет оптимизации.
Андрусь (2002-06-18 11:45:00) [10]Проблема в скролинге,я извиняюсь за не совсем корректно заданный вопрос. Когда пользователь кликает в конец скролинга на клиент начинается закачка большого количества инфы(попросту смещение на последнюю запись). Спасибо за участие.
roottim (2002-06-18 11:38:00) [11]а в чем проблема? и какие компоненты доступа?
помоему феч есть везде и в БДЕ тоже