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

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

19.04.2016, 09:42. Показов 2532. Ответов 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
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
20.04.2016, 07:04  [ТС]
Студворк — интернет-сервис помощи студентам
По поводу печати отчетов, это тоже нужно будет, но это уже другая история, с которой ещё предстоит разбираться...

Добавлено через 21 минуту
Все получилось, ОГОРОМНОЕ СПАСИБО Krapotkin окончательный код выглядит так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT  Gym.Name_gym, (SELECT SUM(A.Kol_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym) AS [Kol_abonement],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.Total_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym) AS [Total_abonement],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.cost) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym) AS [Cost],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.Kol_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=1) AS [Kol_LPU],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.Total_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=1) AS [Total_LPU],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.cost) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=1) AS [Cost_LPU],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.Kol_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=2) AS [Kol_Pens],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.Total_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=2) AS [Total_Pens],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.cost) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=2) AS [Cost_Pens],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.Kol_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=4) AS [Kol_stor],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.Total_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=4) AS [Total_stor],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.cost) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=4) AS [Cost_stor],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.Kol_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=5) AS [Kol_det],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.Total_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=5) AS [Total_det],');
  ADOQuery1.SQL.Add('(SELECT SUM(A.cost) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.User_abonement=5) AS [Cost_det]');
  ADOQuery1.SQL.Add('FROM gym');
   ADOQuery1.Active:=True;
Теперь нужно подумать как сделать, чтобы по дате можно было фильтровать данные...
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
20.04.2016, 07:13
не поверишь )))
в раздел Where добавить еще условие...
0
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
20.04.2016, 10:59  [ТС]
Я так и подумал

Добавлено через 3 часа 28 минут
Внесение даты в таблицу Abonement производится с помощью MaskEdit, не получается сделать отбор по дате

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.ComboBox1CloseUp(Sender: TObject);
var d:integer;
     b:string;
begin
d:=ComboBox1.ItemIndex;
case d of
  1: b:='  .01.2016';
  2: b:='  .02.2016';
  3: b:='  .03.2016';
  4: b:='  .04.2016';
end;
 
  ADOQuery3.SQL.Clear;
  ADOQuery3.SQL.Add('SELECT  Gym.Name_gym, (SELECT SUM(A.Kol_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.Data_abonement='+quotedstr(b)+') AS [Kol_abonement],');
  ADOQuery3.SQL.Add('(SELECT SUM(A.Total_abonement) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.Data_abonement='+quotedstr(b)+') AS [Total_abonement],');
  ADOQuery3.SQL.Add('(SELECT SUM(A.cost) FROM Abonement A WHERE A.Gym_abonement=gym.id_gym AND A.Data_abonement='+quotedstr(b)+') AS [Cost],');
попытка выполнить процедуру выдает не соответствие типов данных

Добавлено через 9 минут
Вопрос по не соответствию снимается.

Зато другой вопрос: я вношу дату н-р: 01.01.2016, а отбор нужно сделать по месяцам, я себе это представляю так: *.01.2016, но так не получается.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
20.04.2016, 11:48
гыы)))
бд себе это как-то не так представляет:
(поле_даты>='01.03.2016')and(поле_даты<' 01.04.2016')
0
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
20.04.2016, 12:47  [ТС]
Не получается, тип в БД какой должен быть у этого поля? Если ставить текстовый, то он находит только конкретную запись, а знак >= не обрабатывает.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
20.04.2016, 15:07
интересно, какой тип данных может быть у даты?
дата

а как сравнивать с датами, нужно смотреть доки по вашей БД
0
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
20.04.2016, 21:15  [ТС]
БД сделана в MS Access. Пытаюсь разобрать на простом примере, таблица в режиме конструктор на рисунке.

Текст процедуры:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.ComboBox1CloseUp(Sender: TObject);
var i:integer;
    d,b:shortstring;
begin
i:=ComboBox1.ItemIndex;
case i of
  0: begin d:='#1/1/2016#' ; b:='#1/31/2016#'; end;
  1: begin d:='#2/1/2016#' ; b:='#2/29/2016#'; end;
  2: begin d:='#3/1/2016#' ; b:='#3/31/2016#'; end;
  3: begin d:='#4/1/2016#' ; b:='#4/30/2016#'; end;
end;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT *');
  ADOQuery1.SQL.Add('FROM student');
  //ADOQuery1.SQL.Add('WHERE student.Data_student Between #1/1/2016# And #1/31/2016#');
  ADOQuery1.SQL.Add('WHERE student.Data_student Between '+quotedstr(d)+' and '+quotedstr(b)+'');
  ADOQuery1.Active:=True;
end;
вот здесь не пойму что за проблема, за комментированная строка выдает диапазон дат, но если я пытаюсь записать ту же самую строку с помощью '+quotedstr()+', то уже не работает.
Миниатюры
Внесение данных в таблицу DBGridEh  
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
20.04.2016, 21:38
судя по всему в аксессе нужно без апострофов, вот и все
документация говорит, что Between в аксессе инклюзивный, так что нужно правильно задавать даты
я бы лучше воспользовался явным
SQL
1
myDate >= #04/01/2009# AND myDate < #02/01/2009#
0
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
20.04.2016, 21:53  [ТС]
Работает как с between ,так и по предложенному Вами способу. Проблема с Quotedstr
В case присваиваю переменным значения дат и потом подставляю их в текст sql-запроса и не работает
Delphi
1
2
3
case i of
  0: begin d:='#1/1/2016#' ; b:='#1/31/2016#'; end;
  end;
Delphi
1
ADOQuery1.SQL.Add('WHERE Data_student>='+quotedstr(d)+' And Data_student<'+quotedstr(b)+'');
переменные d,b:string

Добавлено через 2 минуты
Как вариант в этом же case можно полностью дублировать весь текст запроса, меняя лишь диапазон дат, но тогда код получится совсем огромный, применительно к таблице abonement. )
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
20.04.2016, 21:55
Лучший ответ Сообщение было отмечено Николай Спешил как решение

Решение

я и спрашиваю, зачем quotedstr?
'aaa'+quotedStr(b)+'ccc' ==== 'aaa '''+b+'''ccc'
в этом диалекте SQL дата - не строка. её не нужно выделять апострофами...
ADOQuery1.SQL.Add('WHERE Data_student>='+d+' And Data_student<'+b+'');
1
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
20.04.2016, 22:00  [ТС]
кроме quotedstr не знаю альтернативу.

Добавлено через 1 минуту
ну наконец-то целый день и вечер убил на эти даты
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.04.2016, 22:00

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru