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

Вниз

Как узнать колличество записей в DBGrid?   Найти похожие ветки 

 
Neket   (2009-07-03 10:59) [0]

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


 
Dennis I. Komarov ©   (2009-07-03 11:11) [1]

Ты не поверишь, но их там нет...


 
Neket   (2009-07-03 11:16) [2]

Я так и знал ))))
Ладно поподробнее задам вопрос.
Выгружаю из БД данные. Они прогружаются в DBGrid из DATASOURSE.
Как узнать колличество строк прогруженных в DBGrid.
Я когда-то давно делал это но непомню как. Помоему вообще нужно в DATASOURSE копать. Но непомню. Парни ну подскажите а то так нехочется пробегать лишний раз весь DATASOURSE и подсчитывать колличество строк.


 
Юрий Зотов ©   (2009-07-03 11:18) [3]

> Neket   (03.07.09 10:59)

Записи содержатся в DataSet"е, а не в Grid"е. В Grid"е они только отображаются, причем не обязательно все сразу.

Какие БД и DataSet используете? От этого зависит ответ.


 
Neket   (2009-07-03 11:21) [4]

Ну DataSet обычный DATASOURSE... а база Access


 
Anatoly Podgoretsky ©   (2009-07-03 11:21) [5]

В dbGrid данных нет, нельзя туда прогрузить. И в DATASOURSE тоже данных нет.


 
Anatoly Podgoretsky ©   (2009-07-03 11:22) [6]

Что такое DataSet обычный?


 
Юрий Зотов ©   (2009-07-03 11:23) [7]

> Neket   (03.07.09 11:21) [4]

DataSet и DataSource - вещи совершенно разные.


 
Neket   (2009-07-03 11:24) [8]

))))) Ну емае )))
Стандартная схема
Query1->DATASOURSE1->DBGRID1

Query1 - Делает запрос в Access-овскую базу.


 
Dennis I. Komarov ©   (2009-07-03 11:27) [9]


> Neket   (03.07.09 11:24) [8]

Скажу по секрету, TQuery и есть (почти) TDataSet


 
Юрий Зотов ©   (2009-07-03 11:30) [10]

> Neket   (03.07.09 11:24) [8]

Тогда самое надежное - сделать еще один запрос:
select count(*) from [дальше те же таблицы и тот же where, что и в Query1]


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

Ага всеее спасибо... Узаю Query1.RecordCount


 
Ega23 ©   (2009-07-03 11:31) [12]


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


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


 
Ega23 ©   (2009-07-03 11:33) [13]


> Узаю Query1.RecordCount


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


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

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


 
Dennis I. Komarov ©   (2009-07-03 11:37) [15]


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

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


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


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


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


 
Dennis I. Komarov ©   (2009-07-03 11:39) [17]


> Neket   (03.07.09 11:33) [14]

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


 
Ega23 ©   (2009-07-03 11:39) [18]


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


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


 
Ega23 ©   (2009-07-03 11:42) [19]

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


 
Dennis I. Komarov ©   (2009-07-03 11:44) [20]


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

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

ЗЫ

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


 
Ega23 ©   (2009-07-03 11:49) [21]


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


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


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


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


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


 
Sergey13 ©   (2009-07-03 11:50) [23]

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

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


 
sniknik ©   (2009-07-03 11:55) [24]

> 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) );


 
sniknik ©   (2009-07-03 11:57) [25]

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


 
Dennis I. Komarov ©   (2009-07-03 12:01) [26]


> Neket   (03.07.09 11:49) [22]

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


 
Neket   (2009-07-03 12:07) [27]

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


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

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


 
Anatoly Podgoretsky ©   (2009-07-03 12:13) [29]

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

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


 
Dennis I. Komarov ©   (2009-07-03 12:13) [30]

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


 
Anatoly Podgoretsky ©   (2009-07-03 12:14) [31]

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

Потому что FOR


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

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

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;


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

6-ка для 8-го шришта


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

6-ка для 8-го шришта


 
Dennis I. Komarov ©   (2009-07-03 12:26) [35]


> Ega23 ©   (03.07.09 11:49) [21]
>
> > Сейчас выясниться что все это надо для for i....
>
>
> :)))))))))
> 5 баллов!!!!

А это на сколько?


 
Dennis I. Komarov ©   (2009-07-03 12:28) [36]

А если у меня плохо со зрением и я 8-ку не вижу, и для этого у меня все крупнее, как быть?


 
Плохиш ©   (2009-07-03 12:28) [37]


> Neket   (03.07.09 12:07) [27]
>
> Я как сделаю напишу код...

Это, что угадайка "расставь запятые"?

Только сюда глюкокодов не надо, тем более по работе с акцессом через бде.


 
Neket   (2009-07-03 12:28) [38]

Дану вас... Напишите свое виденье на эту проблему. Только умеете балы раставлять


 
Neket   (2009-07-03 12:30) [39]

Удалено модератором


 
Dennis I. Komarov ©   (2009-07-03 12:42) [40]

что бы два раза ее не писать смотрим TDataSet.Eof + F1, даже с примером...
ЗЫ
 Это если тонкие намеки на for никчему не приводят...



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

Форум: "Начинающим";
Текущий архив: 2009.08.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.005 c
15-1245481247
Gydvin
2009-06-20 11:00
2009.08.30
Детские сиденья


2-1246192670
Guest___
2009-06-28 16:37
2009.08.30
Сравнить значение Мемо с заданым


15-1246521108
Andy BitOff
2009-07-02 11:51
2009.08.30
Помогите найти изображение...


3-1226317055
ssa
2008-11-10 14:37
2009.08.30
перенос текстовых данных с Дельфи формы в таблицу Oracle


15-1246288695
Kerk
2009-06-29 19:18
2009.08.30
Работа в Питере





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский