Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78

Внесение данных в таблицу DBGridEh

19.04.2016, 09:42. Показов 2367. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Не могу разобраться с многообразием этой библиотеки. Как заполнить таблицу, представленную на рисунке сверху? Данные сформированы запросом и отображены в нижней таблице на рисунке. Можно ли заполнять эту таблицу используя данные из разных запросов? Получается по отдельности формировать необходимые данные запросами для верхней таблицы, но как их свести в одну не понимаю.
Миниатюры
Внесение данных в таблицу DBGridEh  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.04.2016, 09:42
Ответы с готовыми решениями:

внесение данных в таблицу
необходимо ввести данные в таблицу...немогу внести выдаёт ошибку Parametr in_number not found вот код ...

Внесение данных из файла в таблицу
Всем привет.Сегодня я столкнулся с проблемой и поскольку я новичок, решил задать вопрос на форуме. Существует таблица в 2 колонки и...

Внесение данных в таблицу ADODB
Здравствуйте,уважаемые! Подскажите,пожалуйста,почему вносит только числовые значения?а текст напрочь отказывается...:-( Вот код на...

30
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
19.04.2016, 10:22
почему-то думаю, что Grid здесь вовсе ни при чем
а при чем тут SQL запросы

Delphi
1
2
3
4
5
6
7
select
  table1.field1,
  (select sum(f1) from table2 where table2.aaa=table1.bbb and ....) as MyField1,
...
from table1
where
...
1
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
19.04.2016, 10:43  [ТС]
DBGridEh не причем, просто он позволяет делать нужную мне, многоуровневую шапку. А вот поля этого грида должны заполняться и группироваться определенным образом исходя из записей, приведенных в нижней таблице.
"Наименование залов" - здесь должны быть перечислены все залы, которые есть (т.е. сгруппированы по названию).
Н-р: первой строкой будет "Игровой", а далее выборка из нижней таблицы: Работники ЛПУ->Кол-во человек = 2, Кол-во посещений = 8, Сумма = 124. Аналогично по всем остальным: Пенсионеры, Сторонние и Дети, только данные уже свои.
вторая строка будет уже, н-р: "Тренажерный" - и так же полная выкладка по нему.

Насчет запросов: с помощью них я могу по отдельным видам посетителей выкладку получать. В частности нижняя таблица сформирована с помощью запроса и отражает только нужные мне данные (ФИО не в счет, это поле лишнее).
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
19.04.2016, 10:49
еще раз.
в качестве поля в итоговом датасете задавайте целый селект с агрегатными функциями и правильным условием, который возвращает единственное значение
0
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
19.04.2016, 10:59  [ТС]
Этот запрос дает данные по всем залам и всем посетителям:
Delphi
1
2
3
4
5
ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT DISTINCTROW Gym.Name_gym, Sum(Abonement.Total_abonement) AS [Total_abonement], Sum(Abonement.Cost) AS [Cost], Sum(Abonement.Kol_abonement) AS [Kol_abonement]');
  ADOQuery1.SQL.Add('FROM Users INNER JOIN (Gym INNER JOIN Abonement ON Gym.id_gym = Abonement.Gym_abonement) ON Users.id_user = Abonement.User_abonement');
  ADOQuery1.SQL.Add('GROUP BY Gym.Name_gym');
  ADOQuery1.Active:=True;
указав нужные поля получаем такой результат, который на рисунке.

Изменив запрос на:
Delphi
1
2
3
4
5
ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT DISTINCTROW Gym.Name_gym, Sum(Abonement.Total_abonement) AS [Total_abonement], Sum(Abonement.Cost) AS [Cost], Sum(Abonement.Kol_abonement) AS [Kol_abonement]');
  ADOQuery1.SQL.Add('FROM Users INNER JOIN (Gym INNER JOIN Abonement ON Gym.id_gym = Abonement.Gym_abonement) ON Users.id_user = Abonement.User_abonement');
  ADOQuery1.SQL.Add('WHERE Users.Name_user='Работники ЛПУ' GROUP BY Gym.Name_gym');
  ADOQuery1.Active:=True;
Получу нужные данные только по работникам ЛПУ

Но это два разных запроса, которые нужно объединить в одну таблицу, в этом и проблема.
Миниатюры
Внесение данных в таблицу DBGridEh  
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
19.04.2016, 12:36
вы вообще читаете, то, что я пишу?

select
table1.field1,
(select sum(f1) from table2 where table2.aaa=table1.bbb and ....) as MyField1,
...
from table1
where

вложенный запрос должен содержать условие связи с главной таблицей и условие фильтрации
0
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
19.04.2016, 12:53  [ТС]
Я прочитал, но не совсем понятна эта конструкция. Пытаюсь понять, как это применить конкретно к моему случаю. Что подразумевается под table1 и table2, у меня есть query1 и query2. Table не используется.

Названия полей и типы данных исходной таблицы представлены на рисунке, её можно представить и рассматривать как table, а вот как собрать из неё данные в мой DBgrid, согласно представленной Вами конструкции пока не понимаю...

Смысл в том, что помимо сбора всех данных за весь период, нужно будет ещё фильтровать по месяцам.

Извините, что сходу не могу понять то, что Вы мне пытаетесь донести, буду признателен, если соберете конструкцию применительно к названиям полей моей таблицы...
Миниатюры
Внесение данных в таблицу DBGridEh  
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
19.04.2016, 13:59
если непонятна, то надо писать- я не понял, давайте разберемся...

это SQL. простая текстовая строка.
где у вас в SQL написано Query1 и Query2 ??? нигде

там у вас там 3 таблицы склеено users, gym, abonement
а показываете только одну
давайте по частям. я пофантазирую.
одна строка итоговой таблицы - это одна строка из GYM. значит начнем
SQL
1
SELECT  Gym.Name_gym FROM gym
далее вы скажите мне как подсчитать колонку всего-количество человек
1
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
19.04.2016, 14:12  [ТС]
SQL
1
2
3
SELECT Gym.Name_gym, SUM(Abonement.Kol_abonement) AS [Kol_abonement]
FROM Gym INNER JOIN Abonement ON Gym.id_gym=Abonement.Gym_abonement
GROUP BY Gym.Name_gym;
как-то так

Добавлено через 1 минуту
да все верно, есть две таблицы связанные: Users:id_user, Name_user ; Gym: id_gym, Name_gym
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
19.04.2016, 14:21
неверно. достаточно вот так
SQL
1
2
3
SELECT SUM(Abonement.Kol_abonement) AS [Kol_abonement]
FROM Abonement
GROUP BY Abonement.Gym_abonement
тогда выйдет вторая строка нашего SQL, (при условии, что вы мне дали верный запрос...)
SQL
1
2
3
SELECT  Gym.Name_gym,
  (SELECT SUM(A.Kol_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym) AS [Kol_abonement]
FROM gym
давайте дальше
1
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
19.04.2016, 14:31  [ТС]
количество посещений:
SQL
1
2
3
SELECT SUM(Abonement.Total_abonement) AS [Total_abonement]
FROM Abonement
GROUP BY Abonement.Gym_abonement;
Сумма:
SQL
1
2
3
SELECT SUM(Abonement.Cost) AS [Cost]
FROM Abonement
GROUP BY Abonement.Gym_abonement;
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
19.04.2016, 14:39
Лучший ответ Сообщение было отмечено Николай Спешил как решение

Решение

ну вот, абсолютно аналогично первому примеру
SQL
1
2
3
4
5
SELECT  Gym.Name_gym,
  (SELECT SUM(A.Kol_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym) AS [Kol_abonement],
  (SELECT SUM(A.Total_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym) AS [Total_abonement],
  (SELECT SUM(A.cost) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym) AS [Cost]
FROM gym
в следующих колонках добавится еще условие, которое будет отбирать для суммы из всех только нужных нам
пробуйте
1
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
19.04.2016, 14:56  [ТС]
SQL
1
2
3
4
5
6
7
SELECT  Gym.Name_gym,Users.Name_user,(SELECT SUM(A.Kol_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym) AS [Kol_abonement],
(SELECT SUM(A.Total_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym) AS [Total_abonement],
(SELECT SUM(A.cost) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym) AS [Cost],
(SELECT SUM(A.Kol_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=Users.id_user) AS [Kol_abonement1],
(SELECT SUM(A.Total_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=Users.id_user) AS [Total_abonement1],
(SELECT SUM(A.cost) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=Users.id_user) AS [Cost1]'
FROM gym, Users;
почему-то данные закладываются в те же колонки

Добавлено через 2 минуты
что-то тут не так... блин нужно подумать
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
19.04.2016, 15:01
A.User_abonement=Users.id_user
неверно
зачем нам вообще Users ??
нам нужно отобрать только работников ЛПУ
каким условием мы их определяем?

Добавлено через 36 секунд
from GYM - это окончательно
сюда больше ничего не пойдет
1
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
19.04.2016, 15:03  [ТС]
В исходной таблице это поле user_abonement
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
19.04.2016, 15:17
в смысле?
user_abonement - это ID из таблицы users
а как определить, что это работник ЛПУ ??
0
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
19.04.2016, 16:05  [ТС]
Таблица gym и users связаны с основной таблицей по ключевому полю id. Т.е. в таблицу abonement записываются коды. Это вроде очевидно было, поэтому отбор нужно производить по коду н-р: работники ЛПУ это код 1
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
19.04.2016, 21:21
код чего? id_user по идее это id пользователя, нет?
если нет, и это код подразделения, то
...
SQL
1
(SELECT SUM(A.Total_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=1) AS [Total_LPU],
1
20.04.2016, 01:06

Не по теме:

Я вот не понимаю нафига нужна такая сводная таблица в компоненте а-ля DBGrid на форме? Обычно такие сводки принято делать в генераторах отчетов. Так почему бы сразу не плясать от этой печки? А то потом встанет вопрос - "А как мне теперь распечатать содержимое этой (не к ночи будь упомянутой) DBGridEh?"

0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
20.04.2016, 06:17
согласен
но SQL от этого не поменяется ))
все эти запросы нужно составить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.04.2016, 06:17
Помогаю со студенческими работами здесь

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

Внесение данных UserForm1 в таблицу Excel
Друзья, выручите меня, пожалуйста. Помогите преодолеть собственное бессилие. Итак, хочу автоматизировать процесс внесения данных в...

Внесение данных из списка в подчиненную таблицу
Доброго дня профессионалам ! Подскажите как внести данные с формы на которой находится список, в подчиненную форму - таблицу...

Внесение данных из textBox в таблицу MySQL
При внесении данных из текстового поля в таблицу - в таблице отображается "???" Текст пишу на русском, если писать на английском - все...

Внесение данных из textBox в таблицу MySQL
При внесении данных из текстового поля в таблицу - в таблице отображается "???" Текст пишу на русском, если писать на английском -...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru