cxGrid + FetchAll + GridMode

AlexSmith
Дата: 13.05.2011 17:37:22
Есть табличка, которая содержит в себе 5млн. записей.
БД: MSSQL 2005

Cтавим на форму cxgrid1, создаем cxgrid1DBTableView, привязываем к нему DataSource.
К DataSource привязываем Query.

Делаем чтобы отображалось в cxGrid по 100 записей, cледующим образом:

cxGrid1DBTableView1.DataController.DataModeController.GridMode := True;
cxGrid1DBTableView1.DataController.DataModeController.GridModeBufferCount := 100;

MSQuery1.FetchAll := False;
MSQuery1.FetchRows := 100;

Приложение запускаем, отображается 100 записей, как только делаешь

MSQuery1.Close;

то понимаем,что Query пытается зафетчить все записи, которые только есть в ДатаСете и только после этого закрывается. (На это у него уходит порядка 1 минуты).

Делал Free у Query, тоже самое, впадает в минутный ступор.

Как сделать так, чтобы при частичном просмотре, Close у процедуры отрабатывал моментально, а недогружал все данные, которые не отобразил?
andreymx
Дата: 14.05.2011 08:14:51
AlexSmith
Как сделать так, чтобы при частичном просмотре, Close у процедуры отрабатывал моментально, а недогружал все данные, которые не отобразил?
пользоваться нормальным методом отбора данных -
select <fields>
  from <tables>
 where <conditions>
Ramin Hashimzade
Дата: 14.05.2011 09:59:23
че то не верится , у меня в таблице 9214722 записей все нормально.... но правда у меня оракле с ODAC , но и с МССГЛ тоже самое должен быть!!

покажы код.....
andreymx
Дата: 14.05.2011 10:46:47
Ramin,

а ты where в запросе пишешь?
X11
Дата: 14.05.2011 11:18:40
А зачем where, если человеку нужно отображать все записи порциями?

Возможно в момент закрытия у Вас выполняется какой-то код, про который вы забыли? А попробуйте отвязать грид от набора данных и переоткрыть запрос. Может это грид глючит?
andreymx
Дата: 14.05.2011 14:58:43
X11
А зачем where, если человеку нужно отображать все записи порциями?

Возможно в момент закрытия у Вас выполняется какой-то код, про который вы забыли? А попробуйте отвязать грид от набора данных и переоткрыть запрос. Может это грид глючит?
просматривать 5 миллионов записей даже порциями, без фильтра и сортировки - бред сивой кобылы
iscrafm
Дата: 14.05.2011 18:31:38
andreymx
Ramin,

а ты where в запросе пишешь?

интересно как это связано с вопросом ТС...
iscrafm
Дата: 14.05.2011 18:32:25
andreymx
X11
А зачем where, если человеку нужно отображать все записи порциями?

Возможно в момент закрытия у Вас выполняется какой-то код, про который вы забыли? А попробуйте отвязать грид от набора данных и переоткрыть запрос. Может это грид глючит?
просматривать 5 миллионов записей даже порциями, без фильтра и сортировки - бред сивой кобылы

схGrid
Дата: 16.05.2011 12:28:02
Q: TpFIBDataSet;
FetchAll - стоит False.

 GridViewData.DataController.DataModeController.GridModeBufferCount := 100;
 GridViewData.DataController.DataModeController.GridMode := true;
 Q.Open;

Смотрю SQL монитор тянутся все записи. Как сделать ограничение на 100 записей?
Леонов Юрий
Дата: 30.08.2018 17:26:08
Если тема еще не закрыта, то хотелось бы оживить, поскольку проблема та же, только решения найти не удалось.

Есть компонент TOraQuery (ODAC), у которого FetchAll=False и FetchRows=300,
есть cxGrid, у cxGridDBTableView которого свойства GridMode=True и GridModeBufferCount=300.
В самом TOraQuery простой запрос по таблице, результатом выборки есть набор из 6 миллионов записей (к примеру).
При этих всех настройках набор открывается минут 5, хотя должен влет показать первые 300 записей.
Аналогично было реализовано на DOA-шных компонентах, все работало четко.

Студия 10.1 Berlin, ODAC версии 10.1.5, DevExpress версия 16.1.2