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

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

Как узнать колличество записей в DBGrid? [XP]


Страницы:   1 2 3

Neket ©   (2009-07-03 10:59:00) 

Собственно САБЖ...


Neket   (2009-07-03 12:25:00) [21]

Вооо вроде как-то так...
Компилируйте ))))

For i:=0 to dbgrid1.FieldCount-1 do
begin
razm:=DBGrid1.Canvas.TextWidth(DBGrid1.Columns[i].FieldName);
For n:=0 to Query1.RecordCount do
str:=Query1.FieldValues[DBGrid1.Columns[i].FieldName];
Razmtp:=DBGrid1.Canvas.TextWidth(str);
if razmtp>=razm then razm:=razmtp;
DBGrid1.Columns[i].Width:=razm+6;


Anatoly Podgoretsky   (2009-07-03 12:14:00) [22]

> sniknik  (03.07.2009 11:57:25)  [25]

Потому что FOR


Dennis I. Komarov   (2009-07-03 12:13:00) [23]

Ну ты напиши код, а потом выслушаешь... :) Будет очень интересно, ибо в [20] я оказался прав


Anatoly Podgoretsky   (2009-07-03 12:13:00) [24]

> Dennis I. Komarov  (03.07.2009 11:37:15)  [15]

А мы чего гадать должны, что у него, если он сам молчит как партизан?


Neket   (2009-07-03 12:10:00) [25]

Если есьт другие варианты решения то с удоваольствием выслушаю... Самому интересно


Neket   (2009-07-03 12:07:00) [26]

Я как сделаю напишу код...
а так основная мысль - это пробежать по всем ROWS текущей СOLUMN и используя razm:=DBGrid1.Canvas.TextWidth(str); найти максимальное значение потом чтобы более или менее красиво было задаем
DBGrid1.Columns[i].Width:=razm+6; (6-эксперементально подобрана)


Dennis I. Komarov   (2009-07-03 12:01:00) [27]


> Neket   (03.07.09 11:49) [22]

И каким образом оно будет проходить зная количество записей?


sniknik   (2009-07-03 11:57:00) [28]

> Это мне нужно чтобы как в экселе можно было подравнять все колонки по самой длиннойзаписи в этой колонке )))))
а почему тогда вопрос про количество записей, а не полей?


sniknik   (2009-07-03 11:55:00) [29]

> 1. Взять количество записей в TDataSet.
> 2. Взять DBGrid.Height
> 3. Вычислить DBGrid.RowHeight (не помню как, но можно)
> 4. Разделить одно на другое. Если разделилось не ровно, то div и потом +1
> 5. Значение из 3 (или 4) сравнить с количеством записей в TDataSet.
> 6. Если меньше или равно, то искомое число - в 3 (или 4).
> 7. Иначе - искомое число равно количеству записей в TDataSet.
все гораздо проще...

type
 TMyDBGrid = class(TDBGrid);
...
ShowMessage( IntToStr(TMyDBGrid(DBGrid1).RowCount) );


Sergey13   (2009-07-03 11:50:00) [30]

> [19] Ega23 ©   (03.07.09 11:42)
> Вобщем, самый более-менее надёжный способ

А самый, без всяких "более-менее", надежный способ - в цикле подсчитать. 8-)


Neket   (2009-07-03 11:49:00) [31]


> Dennis I. Komarov ©   (03.07.09 11:44) [20]


)))))))))) А как ты догадался ?
Это мне нужно чтобы как в экселе можно было подравнять все колонки по самой длинной записи в этой колонке )))))


Ega23   (2009-07-03 11:49:00) [32]


> Сейчас выясниться что все это надо для for i....


:)))))))))
5 баллов!!!!


Dennis I. Komarov   (2009-07-03 11:44:00) [33]


> Ega23 ©   (03.07.09 11:39) [18]

Я не знаю, поэтому и спросил ;) А вобще ну его фтопку...

ЗЫ

Сейчас выясниться что все это надо для for i....


Ega23   (2009-07-03 11:42:00) [34]

Вобщем, самый более-менее надёжный способ:
Query.Open; // Открыли НД
Query.Last;  // Получили все данные до конца
ShowMessage(IntToStr(Query.RecordCount));  // Вот теперь одлжно быть всё нормально. Но не факт, возможны нюансы в зависимости от реализации конкретного потомка TDataSet


Ega23   (2009-07-03 11:39:00) [35]


> Он вроде про Access говорил, хотя про ADO ни слова... БЕДЕ
> и с аксесом работает?


А почему нет-то? Там драйверок какой-то нужно ставить (не помню какой уже). Я в своё время (очень давно) курсач делал, как раз RxQuery и Access использовал.


Dennis I. Komarov   (2009-07-03 11:39:00) [36]


> Neket   (03.07.09 11:33) [14]

Тут тоже не факт, т.к. за время меджу двумя запросами могут иметь место изменения данных в БД


Ega23   (2009-07-03 11:37:00) [37]


> Тогда соме оно select count(*) from  * )))


Это да. Но учти, что пока ты получил count, а потом открыл набор данных, прошло некоторое время. И нет никакой гарантии, что за это время данные остались те же самые. Может кто-то что-то добавил/удалил/изменил за это время. И это "что-то" попадает под твои условия выборки.


Dennis I. Komarov   (2009-07-03 11:37:00) [38]


> Ega23 ©   (03.07.09 11:33) [13]

Он вроде про Access говорил, хотя про ADO ни слова... БЕДЕ и с аксесом работает?


Neket   (2009-07-03 11:33:00) [39]

Тогда соме оно select count(*) from  * )))


Ega23   (2009-07-03 11:33:00) [40]


> Узаю Query1.RecordCount


Это ненадёжное решение. Сдаётся мне, ты используешь BDE. А там далеко не факт, что данные профетчились все до конца.


Страницы:   1 2 3

Наверх

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