Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1297944223
Ghost del vonte
2011-02-17 15:03
2011.05.29
Указатель на последниий компонент потока


15-1297697277
Копир
2011-02-14 18:27
2011.05.29
Давно ждал термина. Оказывется orthorexia!


6-1237868359
RGV
2009-03-24 07:19
2011.05.29
Размер буфера в scktscomp.pas


10-1173447466
Provodnick
2007-03-09 16:37
2011.05.29
Проблема в консольном приложении с COM


2-1297972724
Luzir
2011-02-17 22:58
2011.05.29
Интерфейс пользователя