![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
обновление dbgrid [D7, IB6.x]
Богдан © (2009-06-16 05:12:00)как получить данные в дбгрид, так чтобы они при загрузке программы отображались сразу
(2009-12-01 12:31:00) [1]Удалено модератором
(2009-12-01 12:31:00) [2]Удалено модератором
(2009-08-19 14:18:00) [3]Удалено модератором
Anatoly Podgoretsky (2009-06-18 07:11:00) [4]
> можешь поставить там не 100 а 1000 например, и жди до посинения.
За 50 секунд не успеет остыть.
Ega23 (2009-06-17 15:53:00) [5]
> Разумеется, это все настраивается, можно отказаться от таких
> запросов, но выглядит симпатично.
Да не, я не спорю. Если это аналитика и рекордсеты приходят действительно небольшие (а вот сами запросы - очень тяжёлые), то пуркуа бы и не па.
У меня, просто, несколько другой срез задач.
Игорь Шевченко (2009-06-17 15:29:00) [6]
> На самом деле довольно слабо могу себе представить клиента
> под БД, который запросы в отдельном потоке фигачит
Э...у меня полно таких случаев. Например, на главной странице проекта настроить графиков по текущему состоянию, или показать какие-то события, которые могут подтолкнуть пользователя на какие-то действия, а могут и не подтолкнуть. Суть в чем - если пользователь уходит с главной страницы, то потоки благополучно заполняют себе промежуточные dataset'ы, благо небольшие, захочет - обратно вернется и увидит данные, не захочет, выберет другие задачи - ну что же, не сложилось. Заставлять его ждать, пока не выберутся все данные негуманно - может, он программу с другой целью открыл ? Разумеется, это все настраивается, можно отказаться от таких запросов, но выглядит симпатично.
Ega23 (2009-06-17 14:59:00) [7]
> Как альтернатива - выполнять запрос в отдельном потоке (тоже,
> кстати, работает), но кода писать больше.
Не, отдельный поток - это не для нас. :)
На самом деле довольно слабо могу себе представить клиента под БД, который запросы в отдельном потоке фигачит. Ну разве что, когда быкап делает.
Игорь Шевченко (2009-06-17 14:57:00) [8]Ega23 © (17.06.09 12:54) [17]
Как альтернатива - выполнять запрос в отдельном потоке (тоже, кстати, работает), но кода писать больше.
Ega23 (2009-06-17 12:54:00) [9]
> Игорь Шевченко © (16.06.09 15:03) [16]
Интересный вариант. Возьму на заметку.
Игорь Шевченко (2009-06-16 15:03:00) [10]Я при длинных запросах делаю так:
const
UM_RETRIEVEDATA = WM_APP+666;
type
TfFoo = class(TForm)
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
strict private
procedure UmRetrieveData (var Message: TMessage); message UM_RETRIEVEDATA;
end;
procedure TfFoo.FormCreate(Sender: TObject);
begin
...
панельзаставки.BoundsRect := контролсданными.BoundsRect;
панельзаставки.BringToFront;
end;
procedure TfFoo.FormShow(Sender: TObject);
begin
PostMessage(Handle, UM_RETRIEVEDATA, 0, 0);
end;
procedure TfFoo.UmRetrieveData(var Message: TMessage);
begin
Update;
Application.ProcessMessages;
Screen.Cursor := crSQLWait;
try
открыть запрос с данными;
finally
Screen.Cursor := crDefault;
end;
контролсданными.BringToFront;
end;
на месте того контрола, где показываются данные запроса, помещаю панельзаставки с заголовоком "fetching data, please wait"
oldman (2009-06-16 14:45:00) [11]У меня DBGrid привязан к DataSource.
DataSource правда привязан к Table
И если TableName указан прямо и свойство Active=True, то при открытии окна сразу все видно.
Так же, как и в дизайн-тайм.
ЗЫ: Правда программа маленькая и использует только одну таблицу.
Ega23 (2009-06-16 12:07:00) [12]
> можешь поставить там не 100 а 1000 например, и жди до посинения.
1000 для посинения мало, бери 100000.
sniknik (2009-06-16 11:47:00) [13]для показательности можеш еще вот это добавить
procedure TForm1.FormShow(Sender: TObject);
begin
ShowMessage('Show');
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
ShowMessage('Activate');
end;
sniknik (2009-06-16 11:43:00) [14]> Они просто дают "дышать" основному потоку :)
ну и что? создание не завершилось, следующих за ним событий типа шоу/активейта не будет.
проверь, накидай сделай кучу компонент себе на форму и пропиши код в онгрейт типа
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
for i := 1 to 100 do begin
Sleep(50);
Application.ProcessMessages;
end;
end;
можешь поставить там не 100 а 1000 например, и жди до посинения.
MsGuns (2009-06-16 11:38:00) [15]Рисуют, конечно, не компоненты. Они просто дают "дышать" основному потоку :)
sniknik (2009-06-16 11:31:00) [16]есть компоненты которые умудряются рисовать на форме при отсутствии оной?
чудесные наверное компоненты. Хотабыч делал.
MsGuns (2009-06-16 11:15:00) [17]>никаких "скатертей или фрагментов будущего окна" не будет.
Смотря какие компоненты доступа и как используются
sniknik (2009-06-16 10:47:00) [18]> Не пишешь запросы, которые работают по 5-16 часов.
если открывать такой в OnCreate то это приведет только к тому, что форма откроется через 5-16 часов с полностью заполненным гридом.
никаких "скатертей или фрагментов будущего окна" не будет.
Ega23 (2009-06-16 10:04:00) [19]
> Я пишу, посему у меня всегда кнопочка "обновить" прицеплена.
Блин, ну ты же не цепляешь их на FormCreate :)
ANB (2009-06-16 10:00:00) [20]
> У меня не наблюдает. Что я делаю не так?
Не пишешь запросы, которые работают по 5-16 часов.
Я пишу, посему у меня всегда кнопочка "обновить" прицеплена.
:)