Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
Андрусь   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
14-47688
777
2002-06-18 00:03
2002.07.15
ASPLinux


7-47815
aleksander
2002-04-18 17:25
2002.07.15
Блокировка клавиатуры из сервиса


1-47339
Soft_solution
2002-07-01 14:31
2002.07.15
Очень срочно! Qreport, RichEdit, StringGrid


4-47909
skovorodka
2002-05-10 20:23
2002.07.15
Как узнать handle окна под курсором.


1-47537
Gamar
2002-06-27 11:25
2002.07.15
Как определить существует ли папка





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский