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

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

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

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

30.04.2013, 00:16. Просмотров 1844. Ответов 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
30.04.2013, 18:50  [ТС] #2
Ребята помогите пожалуйста, это срочно надо на диплом
0
The_Immortal
1560 / 496 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
30.04.2013, 19:24 #3
Didilom, что конкретно должен в себя включать отчет?
Как вариант, использовать FastReport.

FastReport. Руководство программиста
0
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
30.04.2013, 19:33  [ТС] #4
У меня есть вот запрос на фамилии
C++
1
2
3
4
5
6
7
8
9
10
Form1->ADOQuery1->Close();
Form1->ADOQuery1->SQL->Clear();
Form1->ADOQuery1->SQL->Add("SELECT Sotrud.Tab_nomer, Sotrud.Famil, Sotrud.Name, Sotrud.Otchestvo, Sotrud.Dolghnost, Sotrud.Razrayd, Sotrud.Foto FROM Sotrud WHERE Sotrud.Famil Like '%"+ sComboBox1->Text +"%'");
Form1->ADOQuery1->Open();
if (Form1->ADOQuery1->RecordCount==0)
{Application->MessageBoxA("Нет записей","Внимание",MB_OK);
Form1->DataSource1->DataSet=Form1->ADOTable1;
}
else
{Form1->DataSource1->DataSet=Form1->ADOQuery1;}
И запрос на дату

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;
}
Отчет должен содержать: Фамилие того кого я выберу в комбобокс на форме, дата, наименование деталей какие он делал в период который тоже выбираю на форме и кол-во. Ну отчет я и буду делать в Fastreporte. Просто не знаю как это осуществить.
0
The_Immortal
1560 / 496 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
30.04.2013, 21:23 #5
Didilom,
Цитата Сообщение от Didilom Посмотреть сообщение
Фамилие того кого я выберу в комбобокс на форме, дата, наименование деталей какие он делал в период который тоже выбираю на форме и кол-во.
Насколько я вижу у Вас получились независимые друг от друга запросы.
Результатом первого является детализированная информация о выбранном сотруднике.
Результатом второго является информация о выполненных работах (по идее по всем сотрудникам).
Интуитивно их надо объединить.

Но может я что-то не так понял.

А вообще было бы неплохо увидеть структуру БД.
0
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
30.04.2013, 21:32  [ТС] #6
Вот моя база вся для этого проекта, там таблицы и запросы.
BD.rar
0
The_Immortal
1560 / 496 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
30.04.2013, 21:42 #7
Didilom, среди представленных запросов я не вижу ни одного, который соединяет таблицу.

Постройте мне следующий запрос: что конкретно выполнил Иванов с 11.04.2013 по 12.04.2013?
0
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
30.04.2013, 21:48  [ТС] #8
Окей, попробовал кое что
BD.rar
1
The_Immortal
1560 / 496 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
30.04.2013, 21:57 #9
Didilom, ну отлично. Я правда немного по-другому это дело рассмотрел (без диапазона дат):
SQL
1
SELECT  Vipolnenie.Data, Detal.Name_detal, Vipolnenie.[Kol-vo], Vipolnenie.[Kol-vo] * Detal.Stoimost AS Obsh_Stoimost FROM Sotrudniki,  Vipolnenie, Detal WHERE Sotrudniki.Tab_nomer = Vipolnenie.Tab_nomer AND Vipolnenie.Kod_detali = Detal.Kod_detali AND Sotrudniki.Famil = 'Иванов'
Только с выводом общей стоимости надо еще поработать. Хотя не знаю, нужна ли она вообще.

Вот теперь подобный запрос и организовывайте в программе.
1
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
30.04.2013, 22:06  [ТС] #10
А вы этот запрос в Accesse или сами написали на SQL ? Если в Acesse? то хотел бы просмотреть как сделали, для себя чисто.

И еще хотел спросить, если я вставлю этот запрос, то он мне не будет выдавать только "Иванова"?
0
The_Immortal
1560 / 496 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
30.04.2013, 22:10 #11
Didilom, в общем, Ваш уровень подготовки мне понятен - только не в обиду.
Буду поздно. Но постараюсь накидать проект с отчетом. Возможно, сделаю видео.

Но, повторюсь, это будет ночью.

Только уточните, что Вам нужно:
Цитата Сообщение от Didilom Посмотреть сообщение
Отчет должен содержать: Фамилие того кого я выберу в комбобокс на форме, дата, наименование деталей какие он делал в период который тоже выбираю на форме и кол-во.
- это точно все?
1
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
30.04.2013, 22:44  [ТС] #12
Immortal, вот я взял код запроса, который я делал последним
C++
1
2
3
SELECT Фам.Famil, дата.Data, дата.Kod_detali, дата.[Kol-vo]
FROM дата, Фам
WHERE (((Фам.Famil) Like "Иванов") AND ((дата.Data) Between #4/11/2013# And #4/12/2013#));
и он мне выдает в отчете только Иванова и к нему же приписывает детали других сотрудников периода с 11.04.2013 по 12.04.20013

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

Добавлено через 2 минуты
Immortal, да точно все. Окей, спасибо большое! Буду ждать
0
The_Immortal
1560 / 496 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
01.05.2013, 10:46 #13
Didilom, в общем, Вам не повезло. У меня неожиданно навернулась IDE, так что сделать ничего не удалось.
Возможно, проблему решу в течение дня, но пока давайте сами.


Цитата Сообщение от Didilom Посмотреть сообщение
А как сделать чтобы он мне выдавал того который я выбираю в комбобокс и именно его детали с указанного периода?
SQL
1
2
3
4
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
C++
1
2
3
4
5
Form1->ADOQuery2->Parameters->ParamByName("lastname")->Value=sComboBox1->Text;
Form1->ADOQuery2->Parameters->ParamByName("time1")->Value=sDateEdit1->Date.DateString();
Form1->ADOQuery2->Parameters->ParamByName("time2")->Value=sDateEdit2->Date.DateString();
Form1->ADOQuery2->Open();
frxReport1->ShowReport();
Сейчас объясню так.

1. Запрос помещаете в свойство SQL компоненты ADOQuery2 (не забудьте убрать косые черточки).
2. Код вешаете на кнопку "Отчет".
3. В компоненте frxDBDataset1 в свойстве DataSet выбираете ADOQuery2.
4. Два раза щелкаете по frxReport1 - откроется дизайнер.
5. Если не сообразите, что делать в дизайнере, то пишите.
6. Реал Мадрид - засранцы. Я спать.
1
Didilom
4 / 4 / 0
Регистрация: 23.01.2013
Сообщений: 90
01.05.2013, 10:57  [ТС] #14
Цитата Сообщение от The_Immortal Посмотреть сообщение
6. Реал Мадрид - засранцы. Я спать.
Ахаххаа
0
The_Immortal
1560 / 496 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
01.05.2013, 16:22 #15
Didilom, кое-что забыл:
C++
1
2
3
4
5
6
Form1->ADOQuery2->Close();
Form1->ADOQuery2->Parameters->ParamByName("lastname")->Value=sComboBox1->Text;
Form1->ADOQuery2->Parameters->ParamByName("time1")->Value=sDateEdit1->Date.DateString();
Form1->ADOQuery2->Parameters->ParamByName("time2")->Value=sDateEdit2->Date.DateString();
Form1->ADOQuery2->Open();
frxReport1->ShowReport();
- в данном случае при вызове отчета НД надо обязательно каждый раз закрывать.


Если очень горит, то могу помочь удаленно.
Смотрите ПМ.
1
01.05.2013, 16:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2013, 16:22
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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