Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2009, 20:06   #1
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос Наилучшее событие для подсчета записей

В моей программе в углу должно писаться кол-во записей в таблице. Я использую событие таблицы (которая DBGrid) OnDrawCell. Но наверное это не экономично... Есть ли событие у TADOTable или у TDBGrid, что-то типо OnChange?
k1r1ch вне форума Ответить с цитированием
Старый 26.09.2009, 20:26   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
В моей программе в углу должно писаться кол-во записей в таблице.
Вообще количество всех записей (строк) во всей таблице? Или только количество записей по какому-то полю? Если первое, то запрос такой будет:
Код:
select count(*) from Table
Запрос выше покажет сколько всего в таблице записей. Поставьте вместо * имя поля и получите количество записей только по этому полю.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.09.2009, 21:05   #3
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Не-не, я знаю как это написать:
Код:
StatusBarInfo.Caption := 'Записей: ' + IntToStr(D.Table.RecordCount);
Вопрос - в каком обработчике события? Ведь OnDrawCell у DBGrid вызывается при каждой перерисовке таблицы, даже если база данных не изменялась...
k1r1ch вне форума Ответить с цитированием
Старый 26.09.2009, 21:22   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Можно повесить Timer с interval=1000. И пусть каждую секунду отображает количество записей. Хотя не уверен, что правильное решение. А вообще можете "повесить" Вашу строчку кода в любую процедуру любой кнопки по нажатию которой идет работа с БД .
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.09.2009, 21:34   #5
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Я рассматривал такой вариант (с обработчиком каждой кнопки), просто думал есть решение лучше...
k1r1ch вне форума Ответить с цитированием
Старый 26.09.2009, 21:42   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
В ADO так же есть события связанные с набором данных, а не с соединением, как вышеописанные. Они инкапсулированы в компоненты имеющие набор данных - TADODataSet, TADOTable, TADOQuery и TADOStoredProc.

Эти события можно разбить на три группы.

1) События выборки данных
OnFetchProgress - многократно вызывается в процессе выборки набора данных.
OnFetchComplete - завершение выборки.

2) Уведомления об изменении положения текущей записи в наборе.
OnWillMove, OnMoveComplete - вызываются до и после изменения положения текущей записи. OnWillMove позволяет отменить действие.
OnEndOfRecordset - вызывается при достижении конца набора данных, позволяет добавить новую запись.

3) Уведомления об изменении набора данных
OnWillChangeField, OnFieldChangeComplete - до и после изменения текущей записи набора.
OnWillChangeRecord, OnRecordChangeComplete - вызываются до и после изменения, добавления, удаления строки набора и отмене этих действий.
OnWillChangeRecordset, OnRecordsetChangeComplete - вызываются до и после открытия, закрытия, повторного запроса и синхронизации набора данных.

Многие события допускают прерывание действия. Эта возможность бывает полезна при асинхронной работе с сервером. Например, для прерывания слишком длинного запроса.
(c) http://www.interface.ru/home.asp?artId=3671
pu4koff вне форума Ответить с цитированием
Старый 26.09.2009, 22:45   #7
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

k1r1ch, а не проще ли поставить, например, компоненты EhLib ? ... там в самом ДБГриде есть єта фун-я ... и считает она автоматом
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 28.09.2009, 00:37   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

StatusBarInfo.Caption := 'Записей: ' + IntToStr(D.Table.RecordCount);
добавить это после всех операций изменяющих D.table

т.е D.table.open (requery) add и т.д.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция для подсчета количества символов в строке типа std::string a Артэс Общие вопросы C/C++ 3 06.07.2009 17:43
запрограммировать событие для TBotton VVk Компоненты Delphi 3 09.01.2009 23:35
Событие для динамически созданной Button Dogmat Помощь студентам 8 24.07.2008 12:44
Прога для подсчета tag Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 06.06.2007 12:40