Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi и базы данных
Войти
Регистрация
Восстановить пароль
 
 
Lady_ya
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 16
#1

График - Delphi БД

18.09.2014, 08:37. Просмотров 1148. Ответов 32
Метки нет (Все метки)

Перед началом работы, выбирается из списка слесарь заступивший на смену.
После открывается форма с таблицей с полями: Задвижка, положение, дата, слесарь.
На этой же форме есть DBLookupComboBox1, с помощью которого можно выбрать новое положение задвижки. При этом запись попадает в таблицу ведомости где есть такие же поля (рисунок ниже): Задвижка, положение, дата, слесарь.
Выбрав месяц и слесаря, нужно нарисовать график с помощью DBChart, который бы показывал в какой день сколько раз крутил задвижку слесарь. т.е. по оси Х дни месяца, по Y количество записей в ведомости с выбранной фамилией в выбранный месяц.
В таблице учитывается принятие и сдача смены, но я её могу перенести фамилию в другое поле, что бы считать по полю - слесарь.
Подскажите как сделать такой график.
В обеих таблицах я использовала Table.
0
Миниатюры
График  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2014, 08:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос График (Delphi БД):

график
Разработать проект построения графиков функций. График строится на одной...

график
Всем привет, нужно отобразить данные с DBGrid (в котором отображается табл с...

вывести график
помогите пожалуйста Вывести график функции. Для построения графика...

График строфоиды
Всем привет!У меня проблемка не могу начертить график строфоиды на Delphi.Если...

график функции
народ помагите плиз....надо нарисовать график функции: y=sin(x+3)+5x....заранее...

график от 3-х переменных
Народ, помогите пожалуйста!! Нужно ооочень быстро помощь в написании кода для...

32
Lady_ya
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 16
21.09.2014, 12:07  [ТС] #21
Огромное спасибо, всё работает. Подскажите для другого графика как мне в sql запросе посчитать каждую фамилию т.е. сколько раз каждая фамилия попадается в таблице за выбранный месяц.
0
Игорь[Igor]
716 / 468 / 128
Регистрация: 24.12.2008
Сообщений: 3,901
21.09.2014, 12:39 #22
COUNT() и WHERE=фамилия GROUP BY фамилия
0
Lady_ya
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 16
21.09.2014, 14:57  [ТС] #23
Работает только так:
Delphi
1
Query1.SQL.ADD('SELECT COUNT(*) Slesar from Izmen WHERE (EXTRACT(MONTH FROM Data)="09") GROUP BY Slesar');
Как не пыталась задействовать DBLookupComboBox1, не получается. и он их всех группирует и выводит сумму записей каждого слесаря, но нет второй колонки с фамилией. и получается я не знаю какая сумма какому слесарю относится.
0
Игорь[Igor]
716 / 468 / 128
Регистрация: 24.12.2008
Сообщений: 3,901
21.09.2014, 18:03 #24
А как еще пробовали что не работает?
0
Lady_ya
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 16
22.09.2014, 15:39  [ТС] #25
Пробую так:
Delphi
1
Query1.SQL.ADD('SELECT COUNT(*) Slesar from Izmen WHERE (EXTRACT(MONTH FROM Data)=DBLookupComboBox1.Text) GROUP BY Slesar');
Не работает.
А если вместо DBLookupComboBox1.Text ставлю какой нибудь месяц, то работает. Но выводит один столбец с количеством записей каждого слесаря без фамилии. ну например:
2
5
4
3
А надо:
2 Слаква
5 Петров
4 Сидоров
3 Пупкин
0
Игорь[Igor]
716 / 468 / 128
Регистрация: 24.12.2008
Сообщений: 3,901
22.09.2014, 15:56 #26
Опять же не правильно, ну. Я же показал как можно.
Delphi
1
Query1.SQL.ADD('SELECT COUNT(*) Slesar from Izmen WHERE (EXTRACT(MONTH FROM Data)='+DBLookupComboBox1.Text+') GROUP BY Slesar');
или так
Delphi
1
Query1.SQL.ADD(format('SELECT COUNT(*) Slesar from Izmen WHERE (EXTRACT(MONTH FROM Data)=%s) GROUP BY Slesar', [DBLookupComboBox1.Text]);
0
Lady_ya
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 16
22.09.2014, 16:00  [ТС] #27
А как мне быть с группировкой? Как понять какое число к какому слесарю относится?
0
Игорь[Igor]
716 / 468 / 128
Регистрация: 24.12.2008
Сообщений: 3,901
22.09.2014, 16:06 #28
Как то так
SQL
1
SELECT COUNT(*) Slesar, Slesar  FROM ...
0
andrey_k3
128 / 128 / 41
Регистрация: 17.10.2013
Сообщений: 333
22.09.2014, 16:07 #29
COUNT(*) Slesar
- пропущена запятая => COUNT(*), Slesar
0
Lady_ya
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 16
22.09.2014, 18:04  [ТС] #30
спс Не знаю как подписать столбики в графике. Когда генерируется SQL запрос появляется поле Slesar1. И я думала можно так:
DBChart1.Labels:=Query1[Slesar1];

Добавлено через 15 секунд
спс Не знаю как подписать столбики в графике. Когда генерируется SQL запрос появляется поле Slesar1. И я думала можно так:
DBChart1.Labels:=Query1[Slesar1];

Добавлено через 27 минут
Ещё в запросе:
Delphi
1
Query1.SQL.ADD(format('SELECT COUNT(*) Slesar, Slesar from Izmen WHERE (EXTRACT(MONTH FROM Data)=%s) GROUP BY Slesar', [DBLookupComboBox1.Text]);
нужно исключить пустые поля с полем Slesar.
Думала просто удалить как с Table:
Delphi
1
Query1.Delete;
но выдаёт: Table is read only

Добавлено через 1 час 1 минуту
я так понимаю к sql запросу надо добавить:
Delphi
1
not slesar='';
но куда?

Добавлено через 12 секунд
я так понимаю к sql запросу надо добавить:
Delphi
1
not slesar='';
но куда?
0
Игорь[Igor]
716 / 468 / 128
Регистрация: 24.12.2008
Сообщений: 3,901
22.09.2014, 19:22 #31
Как-то так
T-SQL
1
... WHERE ((EXTRACT(MONTH FROM Data)=%s))  AND NOT(slesar='' OR slesar is null) ...
0
Lady_ya
0 / 0 / 0
Регистрация: 18.09.2014
Сообщений: 16
23.09.2014, 07:03  [ТС] #32
Delphi
1
Query1.SQL.ADD('SELECT COUNT(*) Slesar, Slesar from Izmen WHERE ((EXTRACT(MONTH FROM Data)='+DBLookupComboBox1.Text+') AND NOT(slesar='' OR slesar is null)) GROUP BY Slesar');
Ошибка: Invalid use of keyword. Token: ' OR slesar is null)) GROUP BY Slesar

Добавлено через 1 час 2 минуты
Разобралась
Delphi
1
Query1.SQL.ADD('SELECT COUNT(*) Slesar, Slesar from Izmen WHERE (EXTRACT(MONTH FROM Data)='+DBLookupComboBox1.Text+') AND NOT(slesar="" OR slesar is null) GROUP BY Slesar');
Добавлено через 52 минуты
Вообщем огромное спасибо, всё работает за исключением одного недочёта.
Делаю sql запрос и по нему строю график:
Delphi
1
2
3
4
5
6
7
8
9
Query1.SQL.Clear;
Query1.SQL.Text:=format('SELECT COUNT (*) Slesar, Object from Izmen WHERE Truba="ÏÐÈÍßË" and (EXTRACT(MONTH FROM Data)="%s")GROUP BY Object;', [DBLookupComboBox1.Text]);
Query1.Active:=True;
DBChart1.Series[0].Clear;
while not Query1.Eof do
Begin
DBChart1.Series[0].Add(Query1.Fields[0].AsInteger,Query1.Fields[1].AsVariant);
Query1.Next;
End;
Всё бы хорошо, но если выбрать месяц где sql запрос не возвращает ни одного значения, то выдаёт ошибку:
Could not convert variant of type (Null) into type (String)
0
andrey_k3
128 / 128 / 41
Регистрация: 17.10.2013
Сообщений: 333
23.09.2014, 10:49 #33
этот запрос, например, можно разместить в блоке try..except..end:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
try
  Query1.SQL.Clear;
  Query1.SQL.Text:=format('SELECT COUNT (*) Slesar, Object from Izmen WHERE Truba="ПРИНЯЛ" and (EXTRACT(MONTH FROM Data)="%s")GROUP BY Object;', [DBLookupComboBox1.Text]);
  Query1.Active:=True;
  DBChart1.Series[0].Clear;
  while not Query1.Eof do
    Begin
      DBChart1.Series[0].Add(Query1.Fields[0].AsInteger,Query1.Fields[1].AsVariant);
      Query1.Next;
    End;
except
  showmessage('нет данных для отчета')
end
0
23.09.2014, 10:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2014, 10:49
Привет! Вот еще темы с решениями:

построить график из значений из БД
Здравствуйте!есть Бд access из 2 столбцов,уже прикручена к программе,в нее...

Построить график по данным из БД
как подключить бд и при нажатий на кнопку построить график строил график

Построить график функции y=A/x.
Ребята, помогите решить задачу. Построить график функции y=A/x.

Delphi+MySQL+График
Здраствуйте, уважаемые форумчане. Пишу сейчас дипломный проект, кратко...


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

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

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