Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
2 / 1 / 1
Регистрация: 18.07.2018
Сообщений: 43
Delphi 6-7

Создание отчётов из выбираемых данных

06.05.2019, 10:52. Показов 4895. Ответов 36

Студворк — интернет-сервис помощи студентам
Здравствуйте. Необходимо создать форму отчёта (а отчёт для вывода на печать), где можно было бы выбирать необходимые нам данные не через среду разработки (конечно же), например, есть товар1 и покупатель1 и это всё берётся из разных таблиц MS Access, потом возникает необходимость создать отчёт с товаром2 и покупателем2. Как реализовать такое? А то поисковик не дал результата нужного. Прога пишется на delphi 7
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.05.2019, 10:52
Ответы с готовыми решениями:

Создание отчетов в базе данных Access
Нужна помощь в создании отчета вида: и В данной базе: Возможно это сделать ? Готов заплатить за работу. Извиняюсь если...

Создание запросов и отчетов в базе данных
Помогите, пожалуйста, сделать запросы и отчеты. Дошёл до 5 шага 3 пункт в задании, дальше пока не могу сделать. Задачки простенькие,...

Создание базы данных с поиском и печатью отчетов
На работе прибавилось дел, простой Word теперь не устраивает. Нужно более удобное средство. Помогите создать базу данных. ...

36
2 / 1 / 1
Регистрация: 18.07.2018
Сообщений: 43
23.05.2019, 11:58  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от D1973 Посмотреть сообщение
Если нет - исправьте на свой
Было подключение по datasourse & adotable, попробовал изменить на adoquery, но выдаёт ошибку при лкм на любую запись сетки dbgrid
Изображения
 
0
Модератор
 Аватар для D1973
9959 / 6495 / 2461
Регистрация: 21.01.2014
Сообщений: 27,505
Записей в блоге: 3
23.05.2019, 12:20
Ну так значит нет у Вас такого поля в таблице БД либо в запрос его не включили, на основании которого данные в грид выводите.
0
2 / 1 / 1
Регистрация: 18.07.2018
Сообщений: 43
23.05.2019, 12:26  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Ну так значит нет у Вас такого поля в таблице БД либо в запрос его не включили, на основании которого данные в грид выводите
А всё, да сам не заметил, переименовал "id" на "код", сообщение о номере выводит. Теперь как перевести это в рекомендуемый Вами StringList или что-то другое?
Изображения
 
0
Модератор
 Аватар для D1973
9959 / 6495 / 2461
Регистрация: 21.01.2014
Сообщений: 27,505
Записей в блоге: 3
23.05.2019, 12:50
Ну дальше-то все просто:
1. Объявляете переменную типа TStringList как поле класса формы:

Вложение 1041255

2. В момент создания формы создаете свой список:
Delphi
1
2
3
4
procedure TForm1.FormCreate(Sender: TObject);
begin
  ID_List := TStringList.Create;
end;
3. При клике на DBGrid:
Delphi
1
2
3
4
5
6
procedure TForm1.DBGrid1CellClick(Column: TColumn);
var s: String;
begin
  s := ADOQuery1.FieldByName('ID').AsString;
  if ID_List.IndexOf(s) = -1 then ID_List.Add(s);
end;
4. Создаем набор данных для формирования отчета, т.е. генерируем и выполняем запрос:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
var s: String;
    i: integer;
begin
  s := Format('SELECT * FROM LichData WHERE (ID=%s) ', [ID_List.Strings[0]]);
  if ID_List.Count > 1 then
   for i := 1 to ID_List.Count - 1 do
    s := s + Format('OR (ID=%s) ', [ID_List.Strings[i]]);
  ADOQuery1.Close;
  ADOQuery1.SQL.Text = Trim(s);
  ADOQuery1.Open;
end;
5. Все, осталось на основании этого набора данных сформировать отчет
1
2 / 1 / 1
Регистрация: 18.07.2018
Сообщений: 43
23.05.2019, 13:28  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Вложение 1041255
Что-то не открывается вложение
0
Модератор
 Аватар для D1973
9959 / 6495 / 2461
Регистрация: 21.01.2014
Сообщений: 27,505
Записей в блоге: 3
23.05.2019, 15:30
Цитата Сообщение от qyret Посмотреть сообщение
Что-то не открывается вложение
Да и черт с ним... Просто пропишите в секции private класса формы строчку
Delphi
1
ID_List: TStringList;
И да, забыл сказать:
1. После выполнения запроса надо наш список очистить командой
Delphi
1
ID_List.Clear;
2. Раз Вы создали экземпляр класса TStringList в событии создания формы - при уничтожении формы его желательно тоже явно уничтожить:
Delphi
1
2
3
4
procedure TForm1.FormDestroy(Sender: TObject);
begin
  ID_List.Free;
end;
1
2 / 1 / 1
Регистрация: 18.07.2018
Сообщений: 43
23.05.2019, 19:33  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
При клике на DBGrid
Почему-то возникает ошибка. Если при открытии курсор выбора стоит на самой верхней записи и пытаться её выбрать для формирования отчёта, то вот такая ошибка
Миниатюры
Создание отчётов из выбираемых данных  
0
2 / 1 / 1
Регистрация: 18.07.2018
Сообщений: 43
23.05.2019, 19:37  [ТС]
Ну и выбор записи происходит единичный (только оду запись выводит), которая была выбрана в последней
0
Модератор
 Аватар для D1973
9959 / 6495 / 2461
Регистрация: 21.01.2014
Сообщений: 27,505
Записей в блоге: 3
23.05.2019, 20:11
qyret, знаете, у меня никакой ошибки не возникает... А то, что Вы делаете - я не вижу, кода-то Вы не предоставили...
0
2 / 1 / 1
Регистрация: 18.07.2018
Сообщений: 43
23.05.2019, 20:51  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
ошибки не возникает
А всё, исправил, мешал предыдущий код от моих ранних "поделок и экспериментов".

Теперь мне так передавать по одной записи на создание отчёта? Или я что-то не совсем понял как компоновать по несколько записей за раз?
Миниатюры
Создание отчётов из выбираемых данных  
0
2 / 1 / 1
Регистрация: 18.07.2018
Сообщений: 43
23.05.2019, 20:53  [ТС]
Код приведу, для ясности дела (вдруг накосячил, но ошибок не выходит никаких сейчас)

Очистку пока что не приделывал, потом её добавлю

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TBuildingReports.DBGrid1CellClick(Column: TColumn);
var s: String;
begin
ID_List := TStringList.Create;
s := fdm.ADOQuery1.FieldByName('Код').AsString;
if ID_List.IndexOf(s) = -1 then ID_List.Add(s);
end;
 
procedure TBuildingReports.Button7Click(Sender: TObject);
var s: String;
    i: integer;
begin
  s := Format('SELECT * FROM LichData WHERE (Код=%s) ', [ID_List.Strings[0]]);
  if ID_List.Count > 1 then
   for i := 1 to ID_List.Count - 1 do
    s := s + Format('OR (Код=%s) ', [ID_List.Strings[i]]);
  fdm.ADOQuery1.Close;
  fdm.ADOQuery1.SQL.Text:= Trim(s);
  fdm.ADOQuery1.Open;
end;
0
Модератор
 Аватар для D1973
9959 / 6495 / 2461
Регистрация: 21.01.2014
Сообщений: 27,505
Записей в блоге: 3
24.05.2019, 06:02
Лучший ответ Сообщение было отмечено qyret как решение

Решение

Цитата Сообщение от qyret Посмотреть сообщение
Теперь мне так передавать по одной записи на создание отчёта?
Я наверное невнятно пишу? Щелкать надо по тем строкам в таблице, которые хотите добавить в отчет: надо вам отобрать 3 человека из 10 - щелкните по этим строкам, а потом отчет формируйте... Не знаю, как еще объяснить - вот смотрите пример для демонстрации моей идеи и разбирайтесь сами... Мемо в примере - только для демонстрации того, как при клике на разных строках формируется список ID. В качестве редактора отчетов использовал QuickReport, другого, кроме Rave, у меня нет, а с ним возиться не охота.
Миниатюры
Создание отчётов из выбираемых данных  
Вложения
Тип файла: rar Создание отчётов из выбираемых данных.rar (13.9 Кб, 12 просмотров)
1
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
24.05.2019, 13:20
удалено
0
2 / 1 / 1
Регистрация: 18.07.2018
Сообщений: 43
24.05.2019, 13:38  [ТС]
Цитата Сообщение от mac1eod Посмотреть сообщение
удалено
Это к чему?
0
2 / 1 / 1
Регистрация: 18.07.2018
Сообщений: 43
27.05.2019, 21:15  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
QuickReport
При использовании QuickReport почему-то у меня возникло залипание при выборе строки (fastreport, что-то я не осилил). Наименование везде сейчас берёт "Магнит", а улица там и т.д. данные правильно выбирает, как идёт по строке, не могу понять, что не так
Миниатюры
Создание отчётов из выбираемых данных  
0
2 / 1 / 1
Регистрация: 18.07.2018
Сообщений: 43
07.06.2019, 00:54  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Мемо в примере - только для демонстрации того, как при клике на разных строках формируется список ID
Можете проверить проект, на наличие ошибки? Выбирает только одну запись в отчёт, а не все выделенные, как в Вашей программе. Название формы - BuildingReports
Вложения
Тип файла: rar Прога.rar (644.3 Кб, 13 просмотров)
0
Модератор
 Аватар для D1973
9959 / 6495 / 2461
Регистрация: 21.01.2014
Сообщений: 27,505
Записей в блоге: 3
08.06.2019, 12:03
Лучший ответ Сообщение было отмечено qyret как решение

Решение

Отчет к набору данных не привязан.
Вложения
Тип файла: rar Diamond2.2.rar (321.2 Кб, 10 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.06.2019, 12:03

Создание объектов баз данных (форм, отчетов)
http://abc.vvsu.ru/Books/baz_dan/page0003.asp

Создание отчетов ReportView без базы источника данных
Обыскал все форумы и MSDN... Вопрос простой - в программе данные хранятся в наборах данных типа DataSet. Как они туда попадают -...

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

Создание запросов и отчетов для базы данных на тему "Кадастрово - геодезическое предприятие"
создание отчетов в налоговую, акт выполненных работ, счёт фактура, стоимость услуг, ну и еще какие- нибудь по

Создание БД учет заявок на доступ к информационным ресурсам: создание отчетов
Доброго времени суток. Это всего вторая моя попытка что-то наваять в MS Access, сильно не пинайте. Задача: сделать БД по учету...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru