Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];

Вниз

Ну слишком медленный 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.053 c
6-1156510127
DVM
2006-08-25 16:48
2007.02.04
WinSock и ProxyServer. Правильная форма HTTP запроса


1-1165648879
Medved_
2006-12-09 10:21
2007.02.04
Brush


2-1169139285
Garacio
2007-01-18 19:54
2007.02.04
сохранить значение в ini из другой формы


2-1169045733
AlexanderMS
2007-01-17 17:55
2007.02.04
Как узнать, что созданный объект "свободен"?


11-1143445780
nester
2006-03-27 11:49
2007.02.04
[Error] Need imported data reference ($G) to access GUID_NULL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский