Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.04;
Скачать: CL | DM;

Вниз

Ну слишком медленный StringGrid. Что делать?   Найти похожие ветки 

 
DmitrichJ   (2007-01-17 05:07) [0]

Вопрос в том, что вывожу данные в StringGrid. При около 100 записей это дело слишком затягивается. Делаю так:

form1.IBQuery1.First;
while not form1.IBQuery1.Eof do begin
 count:=count+1;
 StringGrid1.RowCount:=count+1;
   StringGrid1.Cells[0,count]:=Form1.IBQuery1.FieldByName("npfiz").AsString;
   StringGrid1.Cells[1,count]:=Form1.IBQuery1.FieldByName("fizfamil").AsString+" "+
                               Form1.IBQuery1.FieldByName("fizname").AsString+" "+
                               Form1.IBQuery1.FieldByName("fizotch").AsString;
end;

Примерно так.

Подскажите как выводить данные лучше? Или каки компонентом воспользоваться, кроме DBGrid.

Спасибо.


 
Virgo_Style ©   (2007-01-17 06:37) [1]

попробуй BeginUpdate - EndUpdate


 
ASoft   (2007-01-17 07:25) [2]


DmitrichJ   (17.01.07 05:07)
> Примерно так.

хорошо, что "примерно" так, а то из цикла не выйдешь :)
А DBGrid чем не устраивает?


 
Loginov Dmitry ©   (2007-01-17 07:44) [3]

> Подскажите как выводить данные лучше?


Довольно цивильно получается с помощью TListView


 
Fredy314 ©   (2007-01-17 10:04) [4]

а что за запрос? у меня 4,5 тис записей выводится в StringGrid  обновляется постоянно изменяется запрос(фильтруется часть записей в запросе) и никаких тормозов незамечено.


 
Amoeba ©   (2007-01-17 10:48) [5]


> вывожу данные в StringGrid

Какая цель преследуется этим если отображаются даные из базы данных? Объясни честнОму народу. Есть ведь DBGrid, и не надо городить огород.


 
DmitrichJ   (2007-01-17 12:02) [6]

Fredy314, и как ты это делаешь?

Amoeba, больше нравится в ручную делать и к томуже в одно из полей нужно собрать данные из разных таблиц. Легче всё таки в  StringGrid.


 
DmitrichJ   (2007-01-17 12:06) [7]

В цикле, конечно же form1.IBQuery1.Next. =)


 
evvcom ©   (2007-01-17 12:08) [8]

> [6] DmitrichJ   (17.01.07 12:02)
> в одно из полей нужно собрать данные из разных таблиц

А Query у тебя на что? Ты, видимо, не умеешь им пользоваться?


 
Сергей М. ©   (2007-01-17 12:18) [9]

Пробуй:

with form1.IBQuery1, StringGrid1 do begin
Last;
RowCount := RecordCount;
First;
while not Eof do begin
  Inc(count);
  Cells[0,count]:= Fields[0].AsString;
  Cells[1,count]:= Fields[1].AsString+" "+ Fields[2].AsString + " " Fields[3].AsString + " " + Fields[4].AsString;
end;
end;

Если "тормоза" по-прежнему ощутимы, то проблема не иначе как в тексте самого запроса или в БД/СУБД


 
Amoeba ©   (2007-01-17 12:41) [10]


> DmitrichJ   (17.01.07 12:02) [6]
>
> Fredy314, и как ты это делаешь?
>
> Amoeba, больше нравится в ручную делать и к томуже в одно
> из полей нужно собрать данные из разных таблиц. Легче всё
> таки в  StringGrid.

Конечно, вольному воля. Но, вообще-то, такие вещи легко и эффективно делаются запросами к базе. Изучай SQL.


 
DmitrichJ   (2007-01-17 12:45) [11]

Amoeba. Да знаю я SQL. Это я самый простой пример написал. А то что мне нужно сделать работает ещё медленнее.=(


 
Думкин ©   (2007-01-17 12:59) [12]


> Сергей М. ©   (17.01.07 12:18) [9]

А где Next?


 
Сергей М. ©   (2007-01-17 13:04) [13]


> Думкин ©   (17.01.07 12:59) [12]


Ну и Next, конечно же.

Но есть большие подозрения, что StringGrid (или любой другой виз.компонент) здесь ни при чем, засада - в самом запросе и/или том что за ним скрывается.


 
Fredy314 ©   (2007-01-17 13:12) [14]

> [6] DmitrichJ   (17.01.07 12:02)
примерно так
 mySQLResult := MysqlClient.query(s, true, ok);
................
 For i := 0 To mySQLResult.RowsCount - 1 Do
   Begin
     For j := 0 To mySQLResult.FieldsCount - 1 Do
       Begin
        SG.Cells[j, i] := mySQLResult.FieldValue(j);
...........
Врятли парадокс тормознее мускула, скорее всего прав:> [9] Сергей М. ©   (17.01.07 12:18)
а StringGrid я юзаю потому что ненашёл в DBGrid-е OnDrawCell мне нужно поразному отрисовырать разные данные(Раравнивание по запятой например).


 
Думкин ©   (2007-01-17 13:30) [15]


> что ненашёл в DBGrid-е OnDrawCell мне нужно поразному отрисовырать
> разные данные(Раравнивание по запятой например).

??

В Ф1 даже пример есть:

he following example conditionally changes the font color of rows in a DB Grid. The following code is added to the DB Grid’s OnDrawDataCell event. If the field Size is greater than 10, the row’s font will be red.

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);

begin
 if Table1.FieldByName("Size").AsFloat > 10 then
   DBGrid1.Canvas.Font.Color := clRed;
 DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;


 
Amoeba ©   (2007-01-17 13:43) [16]


> потому что ненашёл в DBGrid-е OnDrawCell мне нужно поразному
> отрисовырать разные данные(Раравнивание по запятой например).
>
>

Плохо искал, и в результате пришлось удалять гланды через анус.


 
Fredy314 ©   (2007-01-17 13:52) [17]

Возможно и так. Лёгких путей не ищем.
Чтото вне в нём не понравилось, не помню уже.


 
Fredy314 ©   (2007-01-17 14:14) [18]

И как соединить ТQuery с DBGrid если DataSource не принимает ТQuery в качестве ДатаСета


 
Думкин ©   (2007-01-17 14:17) [19]

> Fredy314 ©   (17.01.07 14:14) [18]

Извини, но три цифры в твоем нике, это не начало тизвестного слова? Ничего личного, но это таки опять 3.14...шь.


 
Fredy314 ©   (2007-01-17 14:20) [20]

> [19] Думкин ©   (17.01.07 14:17)

Ето именно те самые три цыфры.
Но как отобразить результат ТQuery в DBGrid я не понял. Ткните пальцем пожалуйста.


 
Думкин ©   (2007-01-17 14:26) [21]

> Fredy314 ©   (17.01.07 14:20) [20]

DataSource не принимает ТQuery в качестве ДатаСета

А как не принимает?


 
Elen ©   (2007-01-17 14:30) [22]


> DataSource не принимает ТQuery в качестве ДатаСета

DataSource это в Гриде. Он принимает TDataSource, который принимает в свой  DataSet тот самый TQuery


 
Fredy314 ©   (2007-01-17 14:37) [23]

> [22] Elen ©   (17.01.07 14:30)
Пробовала? я какраз про ето и говорю TDataSource принимает  TTable и промто не видит TQuery

Можно конечно и TTable использовать свойствa Filter и Filtered Но как быть к запросам к нескольким таблицам?


 
Fredy314 ©   (2007-01-17 14:39) [24]

[19]ту3.14шь Бывает


 
Elen ©   (2007-01-17 14:44) [25]


> Пробовала? я какраз про ето и говорю TDataSource принимает
>  TTable и промто не видит TQuery

Хм. Незнаю как в D7, а у меня  в D6 это только через TDataSource. DBGrid Ttable так просто без посредника DataSource не подключается.


 
Fredy314 ©   (2007-01-17 14:47) [26]

D7 так-же связка TDataSource+ТDBGrid+TТable нормально работает, а вот
TDataSource+ТDBGrid+TQuery не хочет.


 
stone ©   (2007-01-17 14:52) [27]


> TDataSource+ТDBGrid+TQuery не хочет.

Это что за связка такая? ты последовательность не перепутал?
ТDBGrid -> TDataSource -> TQuery


 
Elen ©   (2007-01-17 14:53) [28]


> TDataSource+ТDBGrid+TТable

Разве так? путь такой :
TDbGrid.DataSource:=TDataSource; TDataSource.DataSet:=Ttable (или TQuery)
Так ведь?


 
Fredy314 ©   (2007-01-17 15:06) [29]

Извиняюсь у всех, всё работает, я просто TDataSource и TQuery лишний раз соединил
Query1.DataSource присвоил DataSource1 и как результат
DataSource1.DataSet не хотел принимать Query1, вот ведь как бывает.


 
evvcom ©   (2007-01-17 15:17) [30]

> [29] Fredy314 ©   (17.01.07 15:06)

Ты бы хоть хелп почитал. Я такого свойства тоже не помнил. Сейчас почитал. Никогда не использовал. ИМХО, ненужное свойство, может даже вредное, в чем мы только что и убедились.


 
Fredy314 ©   (2007-01-17 15:39) [31]

> [30] evvcom ©   (17.01.07 15:17)
Если чтото нужно сделать, пользуемся таким алгоритмом:
1. Методом тыка, вдруг получится.
2. Спросить на форуме.
3. Поискать на Яндексе.
4. Прочесть наконец хелп.

шутка.

зы. а хелп я читаю, и книжки тоже, и поиском пользоватся умею. Но всякое бывает.


 
DmitrichJ   (2007-01-17 22:51) [32]

Если кому интересно: сделл замеры времени. Всё дело оказалось в IBQuery.next. Т.е. в переходе к следющей записи. А StringGrid выдерживает хорошее время даже на 4000 строчек. Буду думать что делать.


 
ЮЮ ©   (2007-01-18 03:19) [33]


> Я такого свойства тоже не помнил.(Query1.DataSource) Сейчас почитал. Никогда  не использовал. ИМХО, ненужное свойство, может даже вредное, в чем мы только что и убедились.
>


:)  Это для организвции Master-Details связи двух DataSet-ов. Вешь вполне необходимая и полезная


 
evvcom ©   (2007-01-18 08:42) [34]

> [33] ЮЮ ©   (18.01.07 03:19)

А... Да, да... Кажется все ж использовал. Давно. Склероз, видимо, начинает проявляться. :)



Страницы: 1 вся ветка

Текущий архив: 2007.02.04;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.049 c
6-1157030488
DelphiLexx
2006-08-31 17:21
2007.02.04
Отправка SMS с помощью INDY


2-1169121332
TCrash
2007-01-18 14:55
2007.02.04
Кол-во и список мониторов


2-1168978640
jerriola
2007-01-16 23:17
2007.02.04
как задать элементы множества в декларативной части программы ?


15-1168634182
ProgRAMmer Dimonych
2007-01-12 23:36
2007.02.04
Подскажите софтинку...


15-1168972025
AFKer
2007-01-16 21:27
2007.02.04
И это есть тот самый Delphimaster который я знал???