Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/55: Рейтинг темы: голосов - 55, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 13
1

Количество строк в DBGrid

21.02.2016, 15:46. Показов 11190. Ответов 39
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста с кодом. Имеется форма на которой располагаются DBGrid к которой применяется фильтр из edit1. Нужно чтобы в Label 2 отображалось количество строк из DBGrid. Прописан следующий код, НО разультат показывает количество строк которые поместились в "видимую часть" таблицы (30 записей), если прокрутить вниз - есть и другие записи соответствующие фильтру.
Delphi
1
2
3
4
TDBGridX = class(TDBgrid);
// ...
ko:=TDBGridX(dbGrid1).RowCount-1;
Label2.Caption :='Отфильтровано: '+ inttostr(ko);
Вопрос.
Кол-во строк видимой части должно отображаться не при помощи ko:=TDBGridX(dbGrid1).VisibleRowCount-1 разве???
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2016, 15:46
Ответы с готовыми решениями:

Количество строк в DBgrid
Здравствуйте! у меня вопрос, как посчитать кол-во строк в DBgrid'e. НА форме находится DBgrid ,...

Определить количество строк DbGrid-а
На форме есть два компонента DBGrid. В зависимости от выбранной строки в DBGrid1, в DBGrid2...

Количество строк в DbGrid после фильтраций
как можно вывести количество строк после фильтраций? не через запрос

из таблицы DBGrid нужно вывести в edit количество строк из столбца Статус со значением работает, вот код, но выдает ошибку
Здравствуйте, запрограммировала базу данных через библиотеку ADO, из таблицы DBGrid нужно вывести...

39
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
21.02.2016, 17:35 2
Кол-во записей надо смотреть в ДатаСете, подключенном к Гриду.
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 13
21.02.2016, 17:51  [ТС] 3
не подскажете как?
чтобы показывал после фильтрации. т.е то что остается. я поэтому смотрел у грид
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
21.02.2016, 17:57 4
Delphi
1
2
3
  DBGrid.DataSource.DataSet.Last;
  DBGrid.DataSource.DataSet.First;
  ko := DBGrid.DataSource.DataSet.RecordCount;
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 13
21.02.2016, 18:19  [ТС] 5
Я попробовал. так как Вы написали выводится общее количество записей в таблице, а НЕ после фильтрации
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
21.02.2016, 18:45 6
1. не используйте Table, используйте Query
2. не используйте Filter, используйте условие в Query
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 13
21.02.2016, 18:58  [ТС] 7
Я бы переделал все, но проект программы очень большой - много переделывать придется.
ko:=TDBGridX(dbGrid1).VisibleRowCount-1 это по сути долна выдавать только те строки которые помещаются в границы грида (т.е. видимые, у меня она не большая - отображаются 30 строк примерно)
но я пишу без Visible
ko:=TDBGridX(dbGrid1).RowCount-1 но все ровно кол-во только 30, хотя если ниже прокрутить там есть записи еще.

я вот думаю может что-то включить нужно в свойствах грида???
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
21.02.2016, 19:07 8
Лучший ответ Сообщение было отмечено Asylguzin как решение

Решение

при
чем
здесь
грид
???
он ОТОБРАЖАЕТ записи из подключенного к нему ДАТАСЕТА
там и ищите RecordCount, но он не отображает количество записей после фильтра
не хотите делать как нужно делать, сделайте тупой цикл
Delphi
1
2
3
4
5
6
7
dataset.first;
n:=0;
while not dataset.eof do
begin
  inc(n);
  dataset.next;
end;
и подсчитайте свой FilteredRecordCount
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 13
21.02.2016, 20:34  [ТС] 9
хотя и тупой цикл, но он здорово помог! Теперь все работает. Спасибо Вам!
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,251
22.02.2016, 01:49 10
Цитата Сообщение от FIL Посмотреть сообщение
ko := DBGrid.DataSource.DataSet.RecordCount;
.RecordCount надо забыть первым делом! И больше никогда о нем не вспоминать.
0
Эксперт Pascal/Delphi
1134 / 615 / 129
Регистрация: 13.02.2009
Сообщений: 3,553
22.02.2016, 04:32 11
Цитата Сообщение от northener Посмотреть сообщение
.RecordCount надо забыть первым делом! И больше никогда о нем не вспоминать.
Хе )) Почему ? документации и в книге он есть
1. http://docwiki.embarcadero.com... 8Delphi%29
2. http://docwiki.embarcadero.com... ecordCount
3. http://docwiki.embarcadero.com... C%2B%2B%29
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
22.02.2016, 11:53 12
Цитата Сообщение от northener Посмотреть сообщение
RecordCount надо забыть первым делом!
Если правильно его приготовить, то проблем не будет)
0
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
13.11.2017, 12:37 13
Цитата Сообщение от krapotkin Посмотреть сообщение
он ОТОБРАЖАЕТ записи из подключенного к нему ДАТАСЕТА
именно. лично я прекрасно понимаю, что делает DBGrid и что Dataset. так вот, мне нужно именно подсчитать количество строк в Гриде именно после фильтрации именно при помощи свойства DataSet.Filter, потому что мне нужно выполнить действие именно, когда пр иоперации фильтрации DBGrid становится пустым. так что нечего писать, что обращаться к DBGrid'у - это некомильфо
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
13.11.2017, 13:19 14
обращаться к DBGrid не комильфо
"количество строк в гриде"
"фильтрация в Dataset.Filter"
как бы намекаэ
0
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
13.11.2017, 13:31 15
krapotkin, мне нужно. если знаешь как из ДатаСета считать количество строк после фильтрации, подскажи, будь добр. во всем интернете одно и то же: "нельзя, да нельзя". капец какой-то. а если мне в какой-то момент нужно вывести сообщение типа "не найдены записи, удовлетворяющие условию фильтрации", что тогда? без написания запроса select count ..., я имею в виду
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
13.11.2017, 15:19 16
а где у грида количество строк после фильтрации ??
0
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
13.11.2017, 15:49 17
krapotkin,
Цитата Сообщение от krapotkin Посмотреть сообщение
а где у грида количество строк после фильтрации ??
вот и я хочу узнать это
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
13.11.2017, 16:44 18
Цитата Сообщение от DenNik Посмотреть сообщение
мне нужно именно подсчитать количество строк в Гриде именно после фильтрации
нету строк в гриде. нечего считать
есть VisibleRowCount - это количество строк на экране, а не количество отфильтрованных строк в датасете
как подсчитать уже сказано выше
не забудьте только про dataset.DisableControls; ... dataset.EnableControls;
0
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
13.11.2017, 17:51 19
Цитата Сообщение от krapotkin Посмотреть сообщение
dataset.DisableControls; ... dataset.EnableControls;
кстати, хотел узнать, для чего эти операторы?

Добавлено через 7 минут
Цитата Сообщение от krapotkin Посмотреть сообщение
нету строк в гриде
а по сути вопроса: ну как это нету? что за мантра?!
датасет отфильтровал строки по каким-то критериям, он их не выбрал заново из БД, а просмотрел ту кучу, которую он выбрал ранее, следовательно, где "хранятся" эти отфильтрованные строки? датасет создал еще одну кучу с отфильтрованными строками или он пометил отфильтрованные строки в первой куче каким-то флагом?!

далее. датасет передает (или, насколько я понимаю, ДатаСорс вытягивает из ДатаСета) гриду отфильтрованные строки. как он знает какие строки нужно ОТОБРАЖАТЬ в гриде? по каким параметрам он их отбирает?!

Добавлено через 2 минуты
я как новичок в вопросе БД, хотел бы получить не одно слово "низя", а ответы на вопросы "почему?" и "как правильно решить мою задачу?"
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
13.11.2017, 20:33 20
TDataset в делфи генерирует всякие события
эти события через TDataSource передаются всяким DB-aware компонентам и обратно
поэтому получается если сделать текущей запись в dataset, событие уйдет в грид и он перерисуется, отобразив себя относительно датасета
если мы в гриде кликнем по строке, то он инициирует переход датасета на эту строку, а потом читать сначала - он перерисуется в соответствии с состоянием датасета, а не из-за вашего клика по строке...

Выводы
1) обычный DBGrid не хранит ничего, только ссылки на датасет, откуда и берет свои данные
2) если нам надо поползать по датасету, поискать что-нибудь, то на каждый чих будут перерисовываться все подключенные к нему компоненты. это сильно медленно. чтобы этого не происходило, разрываем связь с помощью DisableControls и потом восстанавливаем обратно EnableControls

Добавлено через 1 минуту
датасет ничего не знает
если мы ставим фильтр, то при переходе на следующую строку он просто проверяет, попала она в фильтр или нет
если не попала, переходит дальше
доступ к записям всегда только последовательный
1
13.11.2017, 20:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2017, 20:33
Помогаю со студенческими работами здесь

Количество строк в DBGrid
Помогите пожалуйста посчитать количество строк в DBGrid. Можно ли это число вывести на Panel,...

Посчитать количество строк в dbgrid
Как посчитать количество строк в dbgrid Задача в следующем имеется колонка возраст в которой...

Как определить количество строк в DBGrid
Только взялся за этот компонент и туплю. (Загрузил данные из базы в DBGrid) 1. Подскажите как...

Узнать количество строк в DBGrid и проанализировать логические поля
Хочу запилить такую фичу: для вывода статистики прохождения тестов мне надо взять из БД логич. поле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru