Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 1
Регистрация: 05.05.2013
Сообщений: 158

Результат sql - запроса в стлобец dbgrid

28.05.2013, 15:54. Показов 4893. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На форме находится dbgrid в его первом столбце вводятся данные из таблицы БД. Мне необходимо в пустые столбцы вывести результат sql - запросов (иными словами, количество записей в других таблицах). Как это можно сделать?

Вот код который я использовал для вывода результата в Label
Delphi
1
2
3
4
5
6
7
8
9
10
str := 'SELECT Count(students.code) as kol FROM grup INNER JOIN students ON grup.code_group = students.code_group where students.code_group='''
      + Form11.DBGridGrup.DataSource.DataSet.FieldByName('code_group').AsString
      + ''' group by grup.code_group';
      with Unit2.DataModule2.CountAllQuery do
        begin
          SQL.Clear;
          SQL.Add(str);
          Active := True;
        end;
      Form10.Label9.Caption := VarToStr(Unit2.DataModule2.CountAllQuery.FieldByName('kol').Value);
Картинка для наглядности того как это выглядит
Миниатюры
Результат sql - запроса в стлобец dbgrid  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2013, 15:54
Ответы с готовыми решениями:

Как занести результат SQL запроса в dbgrid?
Подскажите пожалуйста, как занести результат SQL запроса в dbgrid? Мне нужно в БД найти товар по его коду и занести в таблицу название и...

Отобразить результат выполнения запроса в DbGrid
Здравствуйте, подскажите пожалуйста, как сделать, чтобы в DBGrid отобразил результаты выполнения запроса..

Как вывести результат запроса в DbGrid?
Здравствуйте! Есть база Oracle. Есть код: DataModule2.OracleQuery.Sql.Add('select * from table'); DataModule2.OracleQuery.Execute; ...

46
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.05.2013, 16:19
Цитата Сообщение от 2serg1 Посмотреть сообщение
Как это можно сделать?
заменить одну таблицу другой
0
0 / 0 / 1
Регистрация: 05.05.2013
Сообщений: 158
28.05.2013, 16:22  [ТС]
а занести результат sql - запроса как в примере нельзя ни каким способом?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.05.2013, 16:28
Цитата Сообщение от 2serg1 Посмотреть сообщение
Результат sql - запроса в стлобец dbgrid
DBGrid сам по себе данные не содержит, а только их отображает. Данные находятся в таблицах (вы же откуда-то берете названия групп). Если вы хотите результаты выборки занести в таблицу - то это можно. Для этого можно воспользоваться конструкцией sql Update.
0
0 / 0 / 1
Регистрация: 05.05.2013
Сообщений: 158
28.05.2013, 16:34  [ТС]
Получается вместо SELECT * FROM надо использовать UPDATE * FROM?
и как обратиться к нужному столбцу DBGrid?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.05.2013, 16:40
Цитата Сообщение от 2serg1 Посмотреть сообщение
как обратиться к нужному столбцу DBGrid?
вам не нужно обращаться к DBGrid'у. Он отображает какую-то вашу таблицу (Поле1, Поле2, Поле3...). Вот и меняйте данные в самой таблице.

Намного легче отобразить сделанную выборку, чем заморачиваться с изменением данных в таблице. Может быть вы просто не понимаете как сделать sql-запрос, чтобы вам отображалось все что нужно?
0
0 / 0 / 1
Регистрация: 05.05.2013
Сообщений: 158
28.05.2013, 16:42  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
Может быть вы просто не понимаете как сделать sql-запрос, чтобы вам отображалось все что нужно?
Наверно, дело в том, что выборку делаю я из других таблиц, а в этой таблице всего два столбца
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.05.2013, 16:50
Цитата Сообщение от 2serg1 Посмотреть сообщение
в этой таблице всего два столбца
куда же тогда вам данные обновлять? Вам прямой путь к sql-запросу. Если есть вид таблицы и структура БД - давайте помогу. (Если mdb - еще лучше).
0
0 / 0 / 1
Регистрация: 05.05.2013
Сообщений: 158
28.05.2013, 16:57  [ТС]
Вот база.
Вложения
Тип файла: rar base.rar (27.1 Кб, 14 просмотров)
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.05.2013, 16:59
2serg1, саму таблицу еще дайте (названия столбцов и откуда чего)
0
0 / 0 / 1
Регистрация: 05.05.2013
Сообщений: 158
28.05.2013, 17:03  [ТС]
таблица "grup". Для примера, количество записей из таблицы Students Where grup.code_group = students.code_group
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.05.2013, 17:19
Пример отображает названия групп, специальность и количество студентов в каждой группе:
SQL
1
2
3
4
5
SELECT b1.code_group, b2.title, COUNT(b3.code)
FROM (grup AS b1
LEFT JOIN special AS b2 ON b1.number_cpec=b2.number_spec)
LEFT JOIN students AS b3 ON b1.code_group = b3.code_group
GROUP BY b1.code_group, b2.title
Добавлено через 8 минут
Аналогичным образом в эту таблицу можно добавить данные из всех таблиц, которые содержат поле code_group
1
0 / 0 / 1
Регистрация: 05.05.2013
Сообщений: 158
28.05.2013, 17:42  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm29.BitBtn1Click(Sender: TObject);
var
  str: string;
begin
  str := 'SELECT b1.code_group, b2.title, COUNT(b3.code)'
        + ' FROM (grup AS b1'
        + ' LEFT JOIN special AS b2 ON b1.number_cpec=b2.number_spec)'
        + ' LEFT JOIN students AS b3 ON b1.code_group = b3.code_group'
        + ' GROUP BY b1.code_group, b2.title';
  with Unit2.DataModule2.ADOQuery1 do
    begin
      Active := False;
      SQL.Clear;
      SQL.Add(str);
      Active := True;
    end;
end;
вот я добавил ваш код на событие клика на кнопку в Delphi. И он теперь выдает ошибку как только я нажимаю на кнопку - "ADOQuery1: Field 'number_cpec' not found"
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.05.2013, 17:53
Цитата Сообщение от 2serg1 Посмотреть сообщение
И он теперь выдает ошибку как только я нажимаю на кнопку - "ADOQuery1: Field 'number_cpec' not found"
Как у вас в базе называются поля, так я их и писал. Кроме того, текст запроса проверен в MS Access - никаких ошибок не выскакивает и показывается табличка. Сейчас в Delphi проверю.

Добавлено через 6 минут
Все прекрасно работает. Либо вы название поля поменяли в таблице, либо какими-нибудь русскими буквами написали название поля в тексте sql. Вот рабочий код:
Delphi
1
2
3
4
5
6
7
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add('SELECT b1.code_group, b2.title, Count(b3.code)');
   ADOQuery1.SQL.Add('FROM (grup AS b1');
   ADOQuery1.SQL.Add('LEFT JOIN special AS b2 ON b1.number_cpec=b2.number_spec)');
   ADOQuery1.SQL.Add('LEFT JOIN students AS b3 ON b1.code_group = b3.code_group');
   ADOQuery1.SQL.Add('GROUP BY b1.code_group, b2.title');
   ADOQuery1.Open;
0
0 / 0 / 1
Регистрация: 05.05.2013
Сообщений: 158
28.05.2013, 17:54  [ТС]
Нашел ошибку спасибо. Еще вопрос, при таком формировании запроса как нибудь можно указать размер поля, а то при отображении если в колонке задано большое значение он его растягивает полностью?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.05.2013, 17:57
Цитата Сообщение от 2serg1 Посмотреть сообщение
при таком формировании запроса как нибудь можно указать размер поля
а вот это уже вопрос к DBGrid'у. У него есть свойство Columns. Нажимаете [...] и переходите к списку отображаемых полей (у вас, наверное, должно быть пусто). Нажмите кнопку <Add all fields> - отобразится весь список полей, и уже у каждого выставляйте в инспекторе объектов нужную ширину.
1
0 / 0 / 1
Регистрация: 05.05.2013
Сообщений: 158
28.05.2013, 18:05  [ТС]
Можете еще помочь модернизировать этот запрос таким образом?
На эту же форму добавлю два DateTimePicker, выбираю какой-то определенный промежуток и формирую другую выборку, например такую: из таблицы vipusk выбрать тех кто попадает в текущий диапазон по полю date_konec
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.05.2013, 18:14
Цитата Сообщение от 2serg1 Посмотреть сообщение
Можете еще помочь модернизировать этот запрос
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
uses DateUtils;
...
ADOQuery1.SQL.Add('SELECT b1.code_group, b2.title, Count(b3.code)');
ADOQuery1.SQL.Add('FROM (grup AS b1');
ADOQuery1.SQL.Add('LEFT JOIN special AS b2 ON b1.number_cpec=b2.number_spec)');
ADOQuery1.SQL.Add('LEFT JOIN vipusk AS b3 ON b1.code_group = b3.code_group');
ADOQuery1.SQL.Add('WHERE b3.date_konec BETWEEN :param1 AND :param2');
ADOQuery1.SQL.Add('GROUP BY b1.code_group, b2.title');
ADOQuery1.Parameters.Refresh;
ADOQuery1.Parameters[0].Value:=DateOf(DateTimePicker1.Date);
ADOQuery1.Parameters[1].Value:=DateOf(DateTimePicker2.Date);
ADOQuery1.Open;
1
0 / 0 / 1
Регистрация: 05.05.2013
Сообщений: 158
28.05.2013, 18:26  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm29.BitBtn1Click(Sender: TObject);
var
  str: string;
begin
  str := 'SELECT b1.code_group, b2.title, COUNT(b3.code) as Количество'
        + ' FROM (grup AS b1'
        + ' LEFT JOIN special AS b2 ON b1.number_cpec=b2.number_spec)'
        + ' LEFT JOIN vipusk AS b3 ON b1.code_group = b3.code_group'
        + ' WHERE b3.date_konec BETWEEN :param1 AND :param2'
        + ' GROUP BY b1.code_group, b2.title';
  with Unit2.DataModule2.ADOQuery1 do
    begin
      Active := False;
      SQL.Clear;
      SQL.Add(str);
      Parameters.Refresh;
      Parameters[0].Value:=Trunc(DateTimePicker1.Date);
      Parameters[1].Value:=Trunc(DateTimePicker2.Date);
      Active := True;
    end;
end;
Выдает ошибку - "несоответствие типов данных в выражении условия отбора"
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.05.2013, 18:28
Найдите разницу:
Delphi
1
2
3
DateOf(DateTimePicker1.Date);
// и
Trunc(DateTimePicker1.Date);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.05.2013, 18:28
Помогаю со студенческими работами здесь

Результат запроса присвоить в отдельную ячейку dbgrid
как результат запроса присвоить в отдельную ячейку dbgrid

Dbgrid+combobox фильтр без sql запроса
По двойному клику в дбгриде открывается новая форма и в располженном на этой форме дбгрид выполнятся запрос procedure...

Результат запроса SQL в переменную
Помогите пожалуйста Есть таблица в access (Sloti) в ней несколько столбцов, один из них числительные (ObiomSlota), другой столбец с...

Как получить результат SQL запроса?
простейший запрос select * from Table where name='Андрей'т.е. вообще существует такая запись.

Неполный результат запроса SQL делфи
Доброго времени суток! Помогите пжст. Есть таблица с данными, в одном из ее полей (msg) есть номер, но перед каждым номером стоит...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru