Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/10: Рейтинг темы: голосов - 10, средняя оценка - 4.50
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 92
1

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

30.04.2013, 00:16. Просмотров 1873. Ответов 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
Ответы с готовыми решениями:

Определить, входит ли текущее время в указанный интервал времени
Здравствуйте! Нужно определить или текущее время входит в указанный интервал...

Запросы: отчет о сделанной работе
Доброго времени суток всем!! Хотел спросить, вот я хочу чтобы при выборе...

Вывод информации за интервал времени
Есть таблица pytlist, в ней есть поле datevoz. Как вывести содержимое таблицы...

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

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

27
The_Immortal
1560 / 496 / 48
Регистрация: 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
Сообщений: 92
04.05.2013, 00:51  [ТС] 22
The_Immortal, спасибо,я проверил все работает. А можете сделать чтобы в одном столбце фамилия была, а в другом сумма? Но с этого запроса я постараюсь кое что взять в отчет.
0
The_Immortal
1560 / 496 / 48
Регистрация: 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
Сообщений: 92
04.05.2013, 11:21  [ТС] 24
The_Immortal, а почему, когда я проверяю запрос в accesse, он все выдает как положено. А как закинул в с++ ->Sql, он мне выдает ошибку
Запросы: отчет по сотруднику в указанный интервал времени

Убираю скобки перед Select или ставлю круглые, дает другую ошибку
Запросы: отчет по сотруднику в указанный интервал времени

а там вроде все норма ?
0
The_Immortal
1560 / 496 / 48
Регистрация: 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
Сообщений: 92
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
1560 / 496 / 48
Регистрация: 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
Сообщений: 92
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

Выдавать сообщение через интервал времени, указанный в TextBox
Даны textbox1,2 и 1 timer1. в textbox1 задается начальное время а в textbox2...

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

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


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

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

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