Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ Builder и базы данных

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
#1

Запросы: отчет по сотруднику в указанный интервал времени - C++ Builder БД

30.04.2013, 00:16. Просмотров 1814. Ответов 27
Метки нет (Все метки)

Ребята можете помочь. Вот делаю проект в С++ builder,
Запросы: отчет по сотруднику в указанный интервал времени

Вот для комбобокс прописал код:
C++
1
2
3
4
5
6
7
8
9
Form1->ADOTable1->Filtered=false;
sComboBox1->Items->Clear();
Form1->ADOTable1->First();
for (int i=0; i<Form1->ADOTable1->RecordCount; i++)
 
{
sComboBox1->Items->Add(Form1->ADOTable1->Fields->Fields[1]->AsString);
Form1->ADOTable1->Next();
}
Для даты сделал запрос
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Form1->ADOQuery2->SQL->Clear();
Form1->ADOQuery2->SQL->Text="SELECT Vipoln.Kod_vipoln, Vipoln.Data, Vipoln.Tab_nomer, Vipoln.Kod_detali, Vipoln.[Kol-vo] FROM Vipoln WHERE Vipoln.Data Between :time1 And :time2";
Form1->ADOQuery2->Parameters->ParamByName("time1")->Value=sDateEdit1->Date.DateString();
Form1->ADOQuery2->Parameters->ParamByName("time2")->Value=sDateEdit2->Date.DateString();
 
Form1->ADOQuery2->Open();
if (Form1->ADOQuery2->RecordCount==0)
{Application->MessageBoxA("По заданному интервалу ничего не найдено!","Внимание",MB_OK);
Form1->DataSource3->DataSet=Form1->ADOTable3;
}
else
{Form1->DataSource3->DataSet=Form1->ADOQuery2;
}
И что я хотел собственно, чтобы я выбрал сотрудника в комбобокс и указал интервал времени и потом щелкал на кнопку отчет, и чтобы он выдавал отчет по сделанной работе этого сотрудника в указанный интервал времени. Как это можно сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2013, 00:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запросы: отчет по сотруднику в указанный интервал времени (C++ Builder БД):

Определить, входит ли текущее время в указанный интервал времени - C++ Builder
Здравствуйте! Нужно определить или текущее время входит в указанный интервал времени. Делаю от 00:00:00 до 23:00:00 Проблема...

Запросы: отчет о сделанной работе - C++ Builder БД
Доброго времени суток всем!! Хотел спросить, вот я хочу чтобы при выборе &quot;фамилия&quot; и &quot;даты&quot; мне выдавала отчет о сделанной работе...

Вывод информации за интервал времени - C++ Builder БД
Есть таблица pytlist, в ней есть поле datevoz. Как вывести содержимое таблицы за интервал отображеный в DateTimePicker1 и DateTimePicker1?

Табель рабочего времени: получить отчет по сотруднику в виде таблицы с полями: день, сумма - MySQL
здравствуйте, помогите пожалуйста с чего начать, есть табель рабочего времени, в табеле отмечается день и статус дня(рабочий, выходной)...

Генерация процессов через указанный интервал времени - C Linux
Подскажите, как правильно составить блок кода на С, использовав fork(), чтобы через 2 с генерировалось 5 процессов, которые останавливались...

Выдавать сообщение через интервал времени, указанный в TextBox - Visual Basic .NET
Даны textbox1,2 и 1 timer1. в textbox1 задается начальное время а в textbox2 минуты. Надо чтобы timer1 выводил msgbox() каждые...

27
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
02.05.2013, 16:59  [ТС] #16
Immortal, ты не поверишь на сколько сильно горит, через неделю диплом защищать, а я до сих пор с этой программой вожусь
0
The_Immortal
1554 / 490 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
02.05.2013, 19:59 #17
Didilom,
Цитата Сообщение от Didilom Посмотреть сообщение
сильно горит
Так я же Вам написал личное сообщение с предложением помочь. Читайте.
0
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
03.05.2013, 23:49  [ТС] #18
Вот Бд, запрос называется "на проверку"
BD.rar
1
The_Immortal
1554 / 490 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
04.05.2013, 00:07 #19
Didilom, ух ты! Джоины пошли - одобряю
Однако результат не соотвтетствует действительности: подсчитайте сами сколько Иванов заработал за апрель (вручную) и сравните с результатом Вашего запроса.
0
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
04.05.2013, 00:10  [ТС] #20
До этого (незнаю что я сделал), были две строчки и одну из них я проверил было правильно. Потом что то сделал появилась одна строчка и неправильно :-)
0
The_Immortal
1554 / 490 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
04.05.2013, 00:38 #21
Didilom, наверное, можно как-то по уму сделать, но вот мой вариант:

SQL
1
2
3
4
SELECT SUM ([Общее количество]) AS ЗарплатаИвановаЗаАпрель FROM (SELECT Detal.Kod_detali, Detal.Stoimost * SUM (Vipolnenie.[Kol-vo])  AS [Общее количество]
FROM Vipolnenie, Detal, Sotrudniki
WHERE Vipolnenie.Kod_detali = Detal.Kod_detali AND Vipolnenie.Tab_nomer = Sotrudniki.Tab_nomer AND Sotrudniki.Famil = 'Иванов' AND Vipolnenie.Data BETWEEN #04/01/2013# AND #04/30/2013#
GROUP BY Detal.Kod_detali, Detal.Stoimost)
- проверяйте в Акцессе.
0
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
04.05.2013, 00:51  [ТС] #22
The_Immortal, спасибо,я проверил все работает. А можете сделать чтобы в одном столбце фамилия была, а в другом сумма? Но с этого запроса я постараюсь кое что взять в отчет.
0
The_Immortal
1554 / 490 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
04.05.2013, 05:26 #23
Didilom,
Цитата Сообщение от Didilom Посмотреть сообщение
А можете сделать чтобы в одном столбце фамилия была, а в другом сумма?
Пожалуйста:
SQL
1
2
3
4
5
SELECT Sotrudniki.Famil, SUM ([Общее количество]) AS ЗарплатаИвановаЗаАпрель
FROM (SELECT  Sotrudniki.Famil, Detal.Stoimost * SUM (Vipolnenie.[Kol-vo])  AS [Общее количество]
FROM Vipolnenie, Detal, Sotrudniki
WHERE Vipolnenie.Kod_detali = Detal.Kod_detali AND Vipolnenie.Tab_nomer = Sotrudniki.Tab_nomer AND Sotrudniki.Famil = 'Иванов' AND Vipolnenie.Data BETWEEN #04/01/2013# AND #04/30/2013#
GROUP BY  Sotrudniki.Famil, Detal.Kod_detali, Detal.Stoimost) GROUP BY Sotrudniki.Famil
0
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
04.05.2013, 11:21  [ТС] #24
The_Immortal, а почему, когда я проверяю запрос в accesse, он все выдает как положено. А как закинул в с++ ->Sql, он мне выдает ошибку
Запросы: отчет по сотруднику в указанный интервал времени
Убираю скобки перед Select или ставлю круглые, дает другую ошибку
Запросы: отчет по сотруднику в указанный интервал времени
а там вроде все норма ?
0
The_Immortal
1554 / 490 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
04.05.2013, 15:14 #25
Didilom, работает:

C++
1
2
3
4
5
6
7
8
9
10
11
Form1->ADOQuery1->Close();
Form1->ADOQuery1->SQL->Clear();
Form1->ADOQuery1->SQL->Add("SELECT SUM ([Общее количество]) AS ЗарплатаИвановаЗаАпрель FROM (SELECT Detal.Kod_detali, Detal.Stoimost * SUM (Vipolnenie.[Kol-vo])  AS [Общее количество]  \
FROM Vipolnenie, Detal, Sotrudniki \
WHERE Vipolnenie.Kod_detali = Detal.Kod_detali AND Vipolnenie.Tab_nomer = Sotrudniki.Tab_nomer AND Sotrudniki.Famil = :lastname AND Vipolnenie.DATA BETWEEN :time1 AND :time2  \
GROUP BY Detal.Kod_detali, Detal.Stoimost)");
Form1->ADOQuery1->Parameters->ParamByName("lastname")->Value=Edit1->Text;
Form1->ADOQuery1->Parameters->ParamByName("time1")->Value=DateTimePicker1->Date.DateString();
Form1->ADOQuery1->Parameters->ParamByName("time2")->Value=DateTimePicker2->Date.DateString();
 
Form1->ADOQuery1->Open();
0
Миниатюры
Запросы: отчет по сотруднику в указанный интервал времени  
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
04.05.2013, 17:29  [ТС] #26
The_Immortal, вы это прислали первый код запроса
SQL
1
2
3
4
SELECT SUM ([Общее количество]) AS ЗарплатаИвановаЗаАпрель FROM (SELECT Detal.Kod_detali, Detal.Stoimost * SUM (Vipolnenie.[Kol-vo])  AS [Общее количество]
FROM Vipolnenie, Detal, Sotrudniki
WHERE Vipolnenie.Kod_detali = Detal.Kod_detali AND Vipolnenie.Tab_nomer = Sotrudniki.Tab_nomer AND Sotrudniki.Famil = 'Иванов' AND Vipolnenie.DATA BETWEEN #04/01/2013# AND #04/30/2013#
GROUP BY Detal.Kod_detali, Detal.Stoimost)
я вам про второй говорил, вот этот
SQL
1
2
3
4
5
SELECT Sotrudniki.Famil, SUM ([Общее количество]) AS ЗарплатаИвановаЗаАпрель
FROM (SELECT  Sotrudniki.Famil, Detal.Stoimost * SUM (Vipolnenie.[Kol-vo])  AS [Общее количество]
FROM Vipolnenie, Detal, Sotrudniki
WHERE Vipolnenie.Kod_detali = Detal.Kod_detali AND Vipolnenie.Tab_nomer = Sotrudniki.Tab_nomer AND Sotrudniki.Famil = 'Иванов' AND Vipolnenie.DATA BETWEEN #04/01/2013# AND #04/30/2013#
GROUP BY  Sotrudniki.Famil, Detal.Kod_detali, Detal.Stoimost) GROUP BY Sotrudniki.Famil
Добавлено через 2 минуты
Я хотел чтобы я не одного сотрудника и дату выбирал, а дату выбрал просто, зарплату он сразу всем сотрудникам посчитал

Добавлено через 43 минуты
The_Immortal, а какая тут может быть ошибка
SQL
1
2
3
4
5
SELECT Sotrudniki.Famil, SUM ([Общее количество]) AS ЗарплатаИвановаЗаАпрель
FROM (SELECT  Sotrudniki.Famil, Detal.Stoimost * SUM (Vipolnenie.[Kol-vo])  AS [Общее количество]
FROM Vipolnenie, Detal, Sotrudniki
WHERE Vipolnenie.Kod_detali = Detal.Kod_detali AND Vipolnenie.Tab_nomer = Sotrudniki.Tab_nomer AND Sotrudniki.Famil = 'Иванов' AND Vipolnenie.DATA BETWEEN #04/01/2013# AND #04/30/2013#
GROUP BY  Sotrudniki.Famil, Detal.Kod_detali, Detal.Stoimost) GROUP BY Sotrudniki.Famil
что она мне выдает такие ошибки?
0
The_Immortal
1554 / 490 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
04.05.2013, 17:39 #27
Didilom,
Цитата Сообщение от Didilom Посмотреть сообщение
вы это прислали первый код запроса
Цитата Сообщение от Didilom Посмотреть сообщение
я вам про второй говорил
- ага попутал, но его (второго) структура для Jet тоже должна быть понятна.


Цитата Сообщение от Didilom Посмотреть сообщение
Я хотел чтобы я не одного сотрудника и дату выбирал, а дату выбрал просто, зарплату он сразу всем сотрудникам посчитал
В свойстве SQL компонента ADOQuery3 пишете:
SQL
1
SELECT Sotrudniki.Famil, SUM ([Общее количество]) AS ЗарплатаИвановаЗаАпрель FROM (SELECT Sotrudniki.Famil, Detal.Stoimost * SUM (Vipolnenie.[Kol-vo])  AS [Общее количество]  FROM Vipolnenie, Detal, Sotrudniki WHERE Vipolnenie.Kod_detali = Detal.Kod_detali AND Vipolnenie.Tab_nomer = Sotrudniki.Tab_nomer AND Vipolnenie.Data BETWEEN :time1 AND :time2 GROUP BY Sotrudniki.Famil, Detal.Kod_detali, Detal.Stoimost) GROUP BY Sotrudniki.Famil
На кнопку:
C++
1
2
3
4
5
6
    Form1->ADOQuery3->Close( );
    Form1->ADOQuery3->Parameters->ParamByName( "time1" )->Value =
        sDateEdit1->Date.DateString( );
    Form1->ADOQuery3->Parameters->ParamByName( "time2" )->Value =
        sDateEdit1->Date.DateString( );
    Form1->ADOQuery3->Open( );
На всякий случай форматирование:

Запросы: отчет по сотруднику в указанный интервал времени



Результат:

Запросы: отчет по сотруднику в указанный интервал времени
0
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
04.05.2013, 23:47  [ТС] #28
В свойстве SQL компонента ADOQuery3 пишете:
Код SQL
SQL
1
SELECT Sotrudniki.Famil, SUM ([Общее количество]) AS ЗарплатаИвановаЗаАпрель FROM (SELECT Sotrudniki.Famil, Detal.Stoimost * SUM (Vipolnenie.[Kol-vo]) *AS [Общее количество] *FROM Vipolnenie, Detal, Sotrudniki WHERE Vipolnenie.Kod_detali = Detal.Kod_detali AND Vipolnenie.Tab_nomer = Sotrudniki.Tab_nomer AND Vipolnenie.DATA BETWEEN :time1 AND :time2 GROUP BY Sotrudniki.Famil, Detal.Kod_detali, Detal.Stoimost) GROUP BY Sotrudniki.Famil
The_Immortal, А до этого который там был SQL мне удалить. Или просто его дописать, ведь у меня уже там есть код
SQL
1
SELECT Sotrudniki.Famil, Vipolnenie.DATA, Detal.Name_detal, Vipolnenie.[Kol-vo]  FROM Sotrudniki, Vipolnenie, Detal WHERE Sotrudniki.Tab_nomer = Vipolnenie.Tab_nomer AND Vipolnenie.Kod_detali = Detal.Kod_detali AND Sotrudniki.Famil = :lastname AND Vipolnenie.DATA BETWEEN :time1 AND :time2
Добавлено через 1 час 5 минут
The_Immortal, то что до этого писал не обращайте внимание, я справился с этой задачей. Сделал то что предложили все также, только он мне в отчете почему выдает только фамилие и сумму только одного сотрудника (Голованов). А в accesse выдает всех сотрудников. Из за чего так может быть?

Добавлено через 15 минут
И я не знаю почему , когда я указываю дату (первую и вторую) он мне не все детали мои считает. Одни и те же даты в программе он мне выдает сумму 1020,35 - а в Accesse 2004,60/
0
04.05.2013, 23:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2013, 23:47
Привет! Вот еще темы с ответами:

Отчет за указанный период времени QuickReport - Delphi БД
Помогите пожалуйста разобраться с ошибкой при нажатии Кнопки Отчет. Выскакивает такая ошибка.Вот код программыprocedure...

Отчет по выбранному сотруднику - 1С
Лабораторная работа. Считаю зар.плату сотрудникам. Есть отчет, который выводит список всех сотрудников и их зар.платы, можно ли как то...

Определить, сколько будет времени через заданный интервал времени - C#
Текущее показание электронных часов: m часов, n минут и k секунд. Какое время будут показывать часы через p ч q мин и r c? Помогите,...

Написать программу, которая преобразует введен в минутах интервал времени в интервал в часах и минутах - C++
3. Написать программу, которая преобразует введен в минутах интервал времени в интервал в часах и минутах.


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru