Текущий архив: 2011.05.29;
Скачать: CL | DM;
Вниз
обновление dbgrid Найти похожие ветки
← →
Богдан (2009-06-16 05:12) [0]как получить данные в дбгрид, так чтобы они при загрузке программы отображались сразу
← →
Sirus (2009-06-16 08:04) [1]Если компоненты доступа к данным находятся на отдельном TDataModule, то в событии OnCreate главной формы, иначе в onShow: Открыть базу и датасет.
Привязка DBGrid -> DataSource -> DataSet
← →
MsGuns © (2009-06-16 08:59) [2]>Sirus (16.06.09 08:04) [1]
>Если компоненты доступа к данным находятся на отдельном TDataModule, то в событии >OnCreate главной формы, иначе в onShow: Открыть базу и датасет.
Датамодуль тут не играет рояли
Если в событии OnShow, то будет эффект "белых" окон.
Предпочтительнее в OnActivate с флажком.
Например,
procedure TForm1.FormActivate..
begin
if Tag=0 then
... Открытие датасета
Tag := 0;
end;
end;
← →
Ega23 © (2009-06-16 09:06) [3]
> Предпочтительнее в OnActivate с флажком.
Это очень спорный вопрос, что тут предпочтительнее.
Лично я такие вещи в OnCreate ставлю. Либо в инициализации фрейма (последнее время на фреймах GUI предпочитаю строить). Но точно не на OnFormShow или OnFormActivate
← →
MsGuns © (2009-06-16 09:20) [4]Угу, и при запуске проги юзер наблюдает скатерть или фрагменты будущего окна :)
Особенно если нет соединения или запрос выполняется достаточно долго.
← →
Ega23 © (2009-06-16 09:31) [5]
> Угу, и при запуске проги юзер наблюдает скатерть или фрагменты
> будущего окна :)
У меня не наблюдает. Что я делаю не так?
← →
ANB (2009-06-16 10:00) [6]
> У меня не наблюдает. Что я делаю не так?
Не пишешь запросы, которые работают по 5-16 часов.
Я пишу, посему у меня всегда кнопочка "обновить" прицеплена.
:)
← →
Ega23 © (2009-06-16 10:04) [7]
> Я пишу, посему у меня всегда кнопочка "обновить" прицеплена.
Блин, ну ты же не цепляешь их на FormCreate :)
← →
sniknik © (2009-06-16 10:47) [8]> Не пишешь запросы, которые работают по 5-16 часов.
если открывать такой в OnCreate то это приведет только к тому, что форма откроется через 5-16 часов с полностью заполненным гридом.
никаких "скатертей или фрагментов будущего окна" не будет.
← →
MsGuns © (2009-06-16 11:15) [9]>никаких "скатертей или фрагментов будущего окна" не будет.
Смотря какие компоненты доступа и как используются
← →
sniknik © (2009-06-16 11:31) [10]есть компоненты которые умудряются рисовать на форме при отсутствии оной?
чудесные наверное компоненты. Хотабыч делал.
← →
MsGuns © (2009-06-16 11:38) [11]Рисуют, конечно, не компоненты. Они просто дают "дышать" основному потоку :)
← →
sniknik © (2009-06-16 11:43) [12]> Они просто дают "дышать" основному потоку :)
ну и что? создание не завершилось, следующих за ним событий типа шоу/активейта не будет.
проверь, накидай сделай кучу компонент себе на форму и пропиши код в онгрейт типаprocedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
for i := 1 to 100 do begin
Sleep(50);
Application.ProcessMessages;
end;
end;
можешь поставить там не 100 а 1000 например, и жди до посинения.
← →
sniknik © (2009-06-16 11:47) [13]для показательности можеш еще вот это добавить
procedure TForm1.FormShow(Sender: TObject);
begin
ShowMessage("Show");
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
ShowMessage("Activate");
end;
← →
Ega23 © (2009-06-16 12:07) [14]
> можешь поставить там не 100 а 1000 например, и жди до посинения.
1000 для посинения мало, бери 100000.
← →
oldman © (2009-06-16 14:45) [15]У меня DBGrid привязан к DataSource.
DataSource правда привязан к Table
И если TableName указан прямо и свойство Active=True, то при открытии окна сразу все видно.
Так же, как и в дизайн-тайм.
ЗЫ: Правда программа маленькая и использует только одну таблицу.
← →
Игорь Шевченко © (2009-06-16 15:03) [16]Я при длинных запросах делаю так:
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"
← →
Ega23 © (2009-06-17 12:54) [17]
> Игорь Шевченко © (16.06.09 15:03) [16]
Интересный вариант. Возьму на заметку.
← →
Игорь Шевченко © (2009-06-17 14:57) [18]Ega23 © (17.06.09 12:54) [17]
Как альтернатива - выполнять запрос в отдельном потоке (тоже, кстати, работает), но кода писать больше.
← →
Ega23 © (2009-06-17 14:59) [19]
> Как альтернатива - выполнять запрос в отдельном потоке (тоже,
> кстати, работает), но кода писать больше.
Не, отдельный поток - это не для нас. :)
На самом деле довольно слабо могу себе представить клиента под БД, который запросы в отдельном потоке фигачит. Ну разве что, когда быкап делает.
← →
Игорь Шевченко © (2009-06-17 15:29) [20]
> На самом деле довольно слабо могу себе представить клиента
> под БД, который запросы в отдельном потоке фигачит
Э...у меня полно таких случаев. Например, на главной странице проекта настроить графиков по текущему состоянию, или показать какие-то события, которые могут подтолкнуть пользователя на какие-то действия, а могут и не подтолкнуть. Суть в чем - если пользователь уходит с главной страницы, то потоки благополучно заполняют себе промежуточные dataset"ы, благо небольшие, захочет - обратно вернется и увидит данные, не захочет, выберет другие задачи - ну что же, не сложилось. Заставлять его ждать, пока не выберутся все данные негуманно - может, он программу с другой целью открыл ? Разумеется, это все настраивается, можно отказаться от таких запросов, но выглядит симпатично.
← →
Ega23 © (2009-06-17 15:53) [21]
> Разумеется, это все настраивается, можно отказаться от таких
> запросов, но выглядит симпатично.
Да не, я не спорю. Если это аналитика и рекордсеты приходят действительно небольшие (а вот сами запросы - очень тяжёлые), то пуркуа бы и не па.
У меня, просто, несколько другой срез задач.
← →
Anatoly Podgoretsky © (2009-06-18 07:11) [22]
> можешь поставить там не 100 а 1000 например, и жди до посинения.
За 50 секунд не успеет остыть.
← →
имя (2009-08-19 14:18) [23]Удалено модератором
← →
имя (2009-12-01 12:31) [24]Удалено модератором
← →
имя (2009-12-01 12:31) [25]Удалено модератором
Страницы: 1 вся ветка
Текущий архив: 2011.05.29;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.011 c