![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подкачка данных [D6, MSSQL]
Роман Антонов © (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]