Форум: "Начинающим";
Текущий архив: 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.063 c