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

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

обновление dbgrid [D7, IB6.x]


Страницы:   1 2

Богдан ©   (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 часов.
Я пишу, посему у меня всегда кнопочка "обновить" прицеплена.
:)


Страницы:   1 2

Наверх

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