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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2009, 15:16   #1
Alexander_20
Пользователь
 
Аватар для Alexander_20
 
Регистрация: 29.04.2009
Сообщений: 10
По умолчанию Подсчет данных в DBGrid

В DBGrid есть таблица с полями:
Дата пропуска
Пропусков
Причина (не уважительный,уважительный, по болезни),выбирается через dbcombobox, заносится в причину;
Ниже три edita
Мне необходимо чтобы по щелчку на кнопку всего в первый edit внеслось количество по болезни,во второй по уважительной причине,а в третий не уважительный,как это сделать,тока без SQl(это на крайняк),помогите....
Alexander_20 вне форума Ответить с цитированием
Старый 29.04.2009, 15:40   #2
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

А чем Вас SQL не устраивает?
Бросаете на форму компонент Query, подсоединяете его к базе
и по нажатию кнопки пишите следующую процедуру
Код:
Query.Active:=False;
Query.SQL.Clear;
Query.SQL.ADD('SELECT * FROM Tablica WHERE Pricihina="не уважительный"');
Query.Active:=True;
Edit1.text:=IntToStr(Query.RecordCount);

Query.Active:=False;
Query.SQL.Clear;
Query.SQL.ADD('SELECT * FROM Tablica WHERE Pricihina="уважительный"');
Query.Active:=True;
Edit2.text:=IntToStr(Query.RecordCount);

Query.Active:=False;
Query.SQL.Clear;
Query.SQL.ADD('SELECT * FROM Tablica WHERE Pricihina="по болезни"');
Query.Active:=True;
Edit3.text:=IntToStr(Query.RecordCount);
S@fer вне форума Ответить с цитированием
Старый 29.04.2009, 15:47   #3
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

Код:
ed1:=0;
ed2:=0;
ed3:=0;
while not table1.eof do
 begin
  if table1.fieldbyname('<имя_поля_куда_записывается_причина>').asstring='не уважительный'
   then ed1:=ed1+table1.fieldbyname('<имя_поля_где_указано_колличество_пропусков>').asinteger;
  if table1.fieldbyname('<имя_поля_куда_записывается_причина>').asstring='уважительный'
   then ed2:=ed2+table1.fieldbyname('<имя_поля_где_указано_колличество_пропусков>').asinteger;
  if table1.fieldbyname('<имя_поля_куда_записывается_причина>').asstring='по болезни'
   then ed3:=ed3+table1.fieldbyname('<имя_поля_где_указано_колличество_пропусков>').asinteger;
end;
edit1.text:=inttostr(ed1);
edit2.text:=inttostr(ed2);
edit3.text:=inttostr(ed3);
Тяжело быть бестолковым.....

Последний раз редактировалось Dark_Spirit; 29.04.2009 в 15:55.
Dark_Spirit вне форума Ответить с цитированием
Старый 29.04.2009, 17:20   #4
Alexander_20
Пользователь
 
Аватар для Alexander_20
 
Регистрация: 29.04.2009
Сообщений: 10
Радость

Спасибо,огромное,попробовал оба варианта,все работает.
Правда во втором случае,чего-то прога виснит,хотя при компиляции все ОК.

Честно говоря не очень люблю SQL,я в нем часто сбиваюсь.

Но у меня он считает сколько строк указано что по болезни, а по болезни у меня допустим в этот день не час, а скажем 6 часов,вот мне,если можно,узнать бы как считать сколько часов,если не трудно...

Последний раз редактировалось Alexander_20; 30.04.2009 в 08:10.
Alexander_20 вне форума Ответить с цитированием
Старый 30.04.2009, 08:56   #5
Alexander_20
Пользователь
 
Аватар для Alexander_20
 
Регистрация: 29.04.2009
Сообщений: 10
По умолчанию

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

Я так понимаю, там необходимо поставить
SELECT Sum(значение?),если поставить пропусков, тогда в программе по кнопке всего, он во все 3 edita выводит еденицы....
Alexander_20 вне форума Ответить с цитированием
Старый 30.04.2009, 09:46   #6
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Как-то так
Код:
Query.Active:=False;
Query.SQL.Clear;
Query.SQL.ADD('SELECT Sum(Propuskov) FROM Tablica WHERE Pricihina="не уважительный"');
Query.Active:=True;
Edit1.text:=Query.Fields[0].AsString;

Query.Active:=False;
Query.SQL.Clear;
Query.SQL.ADD('SELECT Sum(Propuskov) FROM Tablica WHERE Pricihina="уважительный"');
Query.Active:=True;
Edit2.text:=Query.Fields[0].AsString;

Query.Active:=False;
Query.SQL.Clear;
Query.SQL.ADD('SELECT Sum(Propuskov) FROM Tablica WHERE Pricihina="по болезни"');
Query.Active:=True;
Edit3.text:=Query.Fields[0].AsString;
S@fer вне форума Ответить с цитированием
Старый 30.04.2009, 13:22   #7
Alexander_20
Пользователь
 
Аватар для Alexander_20
 
Регистрация: 29.04.2009
Сообщений: 10
Хорошо

Спасибо,огромное!!!!Сейчас все работает....
Alexander_20 вне форума Ответить с цитированием
Старый 07.05.2009, 14:08   #8
Lyuka Sin
 
Регистрация: 07.05.2009
Сообщений: 6
По умолчанию

Доброго время суток...У меня два вопроса: Компонент Query подсоединяется при момощи свойства DataSourse?
И второй...Вот почему пример, рассмотренный не через SQL виснет?Хотя впринципе все прописано логично...
Lyuka Sin вне форума Ответить с цитированием
Старый 07.05.2009, 14:12   #9
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Цитата:
Компонент Query подсоединяется при момощи свойства DataSourse?
Компонент Query подключается к базе с помощью свойства Connection
DataSourse служит для связи между Query(Table) и DBGrid(другие компоненты отображения)
Цитата:
Вот почему пример, рассмотренный не через SQL виснет?Хотя впринципе все прописано логично.
Что Вы имеете ввиду, приведите пример кода.
S@fer вне форума Ответить с цитированием
Старый 12.05.2009, 00:09   #10
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
По умолчанию

там просто забыли сделать переход на следующую запись, вот и получается бесконечный цикл

Код:
ed1:=0;
ed2:=0;
ed3:=0;
while not table1.eof do
    begin
    if table1.fieldbyname('<имя_поля_куда_записывается_причина>').asstring='не уважительный'
        then ed1:=ed1+table1.fieldbyname('<имя_поля_где_указано_колличество_пропусков>').asinteger;
    if table1.fieldbyname('<имя_поля_куда_записывается_причина>').asstring='уважительный'
        then ed2:=ed2+table1.fieldbyname('<имя_поля_где_указано_колличество_пропусков>').asinteger;
    if table1.fieldbyname('<имя_поля_куда_записывается_причина>').asstring='по болезни'
        then ed3:=ed3+table1.fieldbyname('<имя_поля_где_указано_колличество_пропусков>').asinteger;
    table1.Next;
    end;
edit1.text:=inttostr(ed1);
edit2.text:=inttostr(ed2);
edit3.text:=inttostr(ed3);
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)

Последний раз редактировалось koma_grusha; 12.05.2009 в 00:12.
koma_grusha вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перенос данных из DBGrid в DBGrid KingSize БД в Delphi 17 24.04.2009 09:30
Перенос данных из StringGrid-а в DBGrid artemavd БД в Delphi 16 21.03.2009 08:26
DBGrid: Как сделать собственную сортировку данных? AnTe БД в Delphi 17 26.02.2009 17:38
Расчет баз данных с выводом редактирования в DBGrid Veiron БД в Delphi 1 22.12.2008 14:53
Вставка данных(Excel) из clipboard в DBGrid mahsus Общие вопросы Delphi 1 07.10.2007 02:02