Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подкачка данных [D6, MSSQL]


Страницы:   1 2

Роман Антонов ©   (2003-02-20 13:29:00) 

MS SQL Server 2000, Delphi 6. Связь с базой данных
через ADO (MS OLE DB Provider for MS SQL Server).
Выполняется SELECT (TADOQuery) к таблицам.
Данные отображаются в DBGrid"е. Если SELECT возвращает очень
большое количество записей, то DBGrid получает фокус только тогда,
когда закачиваются все записи. А мне необходимо начать работу
с DBGrid"ом сразу же (просмотр первых закаченных записей и т.д.) и получать
количество закаченных записей (как в Enterprise Manager).
Пожалуйста, помогите!


Роман Антонов   (2003-02-21 12:55:00) [21]

К Delphi6 сделан уже второй upgrade.


sniknik   (2003-02-21 12:53:00) [22]

Вот это и странно, глюк грида какой?. Такой вопрос, апдейты дельфям делал? Нет, проапдейть и попробуй еще раз тоже самое.

ftp://ftpd.borland.com/devsupport/delphi/d6/


Роман Антонов   (2003-02-21 12:41:00) [23]

DBGrid стандартный. С "Out of memory" тоже понятно.
Количество закаченных записей отображает нормально. Но как только кликаю на DBGrid, происходит следующее:
1. цифры уже не бегут
2. в DBGrid"е отображаются наименования колонок (до этого ничего не было) и отображается разлиновка (вертикальная и горизонтальная по всей площади DBGrid"а). Ячейки пустые. Все тормозится, пока не закачаются все записи, после чего DBGird их нормально отображает.


sniknik   (2003-02-21 12:33:00) [24]

попробовал с запросом на полную таблицу 2097920 записи, в общем как и ожидалось от размера не зависит (работает и так).


sniknik   (2003-02-21 12:20:00) [25]

уверен что он у тебя стандартный? у меня с гридом никогда проблем не было (хотя вру один раз были, но уж очень экзотический случай). А с твоим "Out of memory" можно подумать что твой грид типа "EhGreed?" или что там подобное вкачивает рекордсет в себя наподобие СтрингГрида.

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

попробуй положи новый грид с палитры и никаких изменений в настройках по умолчанию не делай (ну кроме DataSource конечно).


Роман Антонов   (2003-02-21 12:06:00) [26]

Забегали!. Просто сделал DBGrid.DataSource:=Nil; Похоже, проблемы с DBGrid"ом. Но как теперь отобразить данные на экране?


Роман Антонов   (2003-02-21 11:52:00) [27]

К сожалению, не бегают. 1Млн записей. После продолжительной работы выдает "Out of memory".


sniknik   (2003-02-20 16:20:00) [28]

не получилось? давай по порядку
(переписываю свои параметры)
DBGrid = стандартный

ADOConnection.CursorLocation = clUseServer

ADODataSet.CursorLocation = clUseClient
ADODataSet.CursorType = ctKeyset
ADODataSet.CacheSize = 10
ADODataSet.ExecuteOptions = [eoAsyncFetc]

на событиях onFetchProgress и onFetchComplete

procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
Label1.Caption:= IntToStr(MaxProgress);
Application.ProcessMessages; //не знаю зачем стоит и без него работает но в примере хелпа стоит
end;

procedure TForm1.ADODataSet1FetchComplete(DataSet: TCustomADODataSet;
const Error: Error; var EventStatus: TEventStatus);
begin
Label1.Caption:= IntToStr(DataSet.RecordCount);
end;

попробуй должны циферки бегать (у меня бегают).


Anatoly Podgoretsky   (2003-02-20 16:13:00) [29]

Именно эти влияют CursorLocation и CursorType, поэкспериментируй


Роман Антонов   (2003-02-20 16:06:00) [30]

sniknik, спасибо за помощь.
Эта проблема стоит передо мной уже давно, но, к сожалению, никак не решается (может, руки не оттуда растут). Находил решения через TRecordSet, но тогда, похоже, вместо TDBGrid надо использовать что-то другое или писать свое :(. Вот такие дела.


sniknik   (2003-02-20 14:30:00) [31]

логично было бы OnFetchProgress, его и смотри.

насчет "результат тот же", попробуй поменяй чегонибудь но в хелпе никакие зависимости не указаны.


Роман Антонов   (2003-02-20 14:19:00) [32]

Установил ADODataSet.ExecuteOptions = [eoAsyncFetch], результат тот же. Может надо изменить CursorLocation и CursorType? И какое событие ADODataSet выдает количество закаченных записей?


sniknik   (2003-02-20 13:35:00) [33]

попробуй открыть с параметром
ADODataSet.ExecuteOptions = [eoAsyncFetch]


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо