Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 07.04.2012
Сообщений: 72

Запрос данных из 2-х таблиц Access по условию и с параметром

17.07.2014, 08:55. Показов 4216. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно сделать выборку из двух таблиц "Подъезды" и "Квартиры", чтобы выполнялось определенное условие и с параметром.

Выборка данных из первой таблицы
C++
1
2
3
4
5
 QPodezd->Close();
 QPodezd->SQL->Clear();
 QPodezd->SQL->Add("SELECT * FROM Подъезды;");
 QPodezd->ExecSQL();
 QPodezd->Active = true;
Есть вот такое условие: "SELECT * FROM Квартиры WHERE Долг >= " + CurrencyEdit1->Text;

Выборка из второй таблицы связанной с первой по параметру "Код_подъезда"

C++
1
2
3
4
5
QKvartiri->DataSource=DataSource1;
  QKvartiri->SQL->Text="SELECT * FROM Квартиры WHERE Код_подъезда =:Код_подъезда ORDER    BY Квартира;";
  QKvartiri->Prepared=true;
  QKvartiri->Parameters->ParamByName(WideString("Код_подъезда"))->DataType=ftInteger;
  QKvartiri->Open();
Запрос по параметру работает нормально, куда вставить условие, чтобы все работало вместе.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.07.2014, 08:55
Ответы с готовыми решениями:

Реализовать возможность поиска по заданному условию по одной из таблиц БД (есть программа Delphi база данных Access)
привет, всем активным участникам форума. помогите, пожалуйста, дописать программу на Delphi 7 база данных Access. у меня сделана...

Запрос с параметром в Access
Огромная просьба! Не могу написать SQL-запрос: вывести все данные по подотчетному лицу, первые буквы фамилии которого являются параметром...

Запрос с параметром в Access
Здравствуйте, подскажите пожалуйста Есть запрос с параметром для поиска автора книги по фамилии, нужно вводить фамилию, как выдать...

36
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
18.07.2014, 09:41
К списку квартир с задолжниками добавляем данные подъезда
SQL
1
2
3
4
5
6
7
8
SELECT
  d1.*, d2.*
FROM
  Квартиры d1
    LEFT JOIN Подъезды d2 ON d1.Код_подъезда = d2.Код_подъезда
WHERE
  d1.Код_подъезда = :Код_подъезда AND d1.Долг >= :Долг
ORDER BY Квартира
Всё это запихнуть в QKvartiri->SQL->Text. В примере ещё один параметр, так как это было бы логично. Если не хочешь светиться в списке должников, добавь в условие WHERE
SQL
1
...AND d1.Квартира <> Номер_твоей_квартиры
1
1 / 1 / 0
Регистрация: 07.04.2012
Сообщений: 72
20.07.2014, 21:10  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
QPodezd->Close();
 QPodezd->SQL->Clear();
 QPodezd->SQL->Add("SELECT * FROM Подъезды;");
 QPodezd->ExecSQL();
 QPodezd->Active = true;
   
 QKvartiri->DataSource=DataSource1;
 QKvartiri->SQL->Text= "SELECT Квартиры.*, Подъезды.* FROM Квартиры LEFT JOIN Подъезды ON Квартиры.Код_подъезда = Подъезды.Код_подъезда WHERE Квартиры.Код_подъезда = :Код_подъезда AND Квартиры.Долг >= :Долг ORDER BY Val(Квартира);";;
  QKvartiri->Prepared=true;
  QKvartiri->Parameters->ParamByName(WideString("Код_подъезда"))->DataType=ftInteger;
  QKvartiri->Open();
Сумма долга у меня вводится через CurrencyEdit1->Text. Как это значение присвоить - параметру Долг.

Добавлено через 7 часов 3 минуты
Вроде с запросом разобрался, но почему то по Долгу находит только до значения 91. Хотя Долг есть и больше и отрицательный. Не могу понять почему.
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
21.07.2014, 09:48
Чтобы ответить на какие-либо вопросы, связанные с результатом работы кода, надо видеть этот самый код хотя бы...
0
1 / 1 / 0
Регистрация: 07.04.2012
Сообщений: 72
21.07.2014, 13:52  [ТС]
Вот сам код запроса из 2-х таблиц:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 QPodezd->Close();
  QPodezd->SQL->Clear();
  QPodezd->SQL->Text = "SELECT * FROM Подъезды;";
  QPodezd->Open();
   
 QKvartiri->DataSource=DataSource1;
 QKvartiri->SQL->Text= "SELECT Квартиры.*, Подъезды.* FROM Квартиры LEFT JOIN Подъезды ON Квартиры.Код_подъезда = Подъезды.Код_подъезда WHERE Квартиры.Код_подъезда = :Код_подъезда AND Квартиры.Долг >= :Долг ORDER BY Val(Квартира);";
  QKvartiri->Prepared=true;
  QKvartiri->Parameters->ParamByName(WideString("Код_подъезда"))->DataType=ftInteger;
  QKvartiri->Parameters->ParamByName(WideString("Долг"))->DataType=ftInteger;
  QKvartiri->Parameters->ParamByName("Долг")->Value =StrToInt(CurrencyEdit1->Text);
  QKvartiri->Open();
 
  if(QKvartiri->RecordCount != 0)
  {
   frxDBDataset1->DataSet = QPodezd;
   frxDBDataset2->DataSet = QKvartiri;
   frxReport2->DataSets->Add(frxDBDataset2);
   frxReport2->PreviewPages->LoadFromFile("c:\\DolgPodVse.fr3");
   ((TfrxMasterData *) frxReport2->FindObject("MasterData1"))->DataSet = frxReport2->GetDataset("frxDBDataset1");
   ((TfrxMasterData *) frxReport2->FindObject("DetailData1"))->DataSet = frxReport2->GetDataset("frxDBDataset2");
   ((TfrxMemoView *) frxReport2->FindObject("Memo13"))->Text = "[frxDBDataset2.\"Квартира\"]";
   ((TfrxMemoView *) frxReport2->FindObject("Memo2"))->Text = "[frxDBDataset2.\"ФИО\"]";
   ((TfrxMemoView *) frxReport2->FindObject("Memo4"))->Text = "[frxDBDataset2.\"Долг\"]";
   ((TfrxMemoView *) frxReport2->FindObject("Memo17"))->Text = "[Sum(<frxDBDataset2.\"Долг\">, DetailData1)] " + Form1->TSupport->FieldByName("Валюта")->AsString;
   ((TfrxMemoView *) frxReport2->FindObject("Memo18"))->Text = "[Sum(<frxDBDataset2.\"Долг\">, DetailData1)] " + Form1->TSupport->FieldByName("Валюта")->AsString;
   frxReport2->ShowReport(true);
   }
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
21.07.2014, 14:52
Не видно, где вводится параметр Код_подъезда
0
1 / 1 / 0
Регистрация: 07.04.2012
Сообщений: 72
21.07.2014, 18:07  [ТС]
Код_подъезда не вводится, в таблице Подъезды это поле счетчик. Таблица Подъезды по этому полю связано в Access с таблицей Квартиры.
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
22.07.2014, 13:31
Если в запросе прописать не параметр, а фактическое значение долга? Работает?
SQL
1
...AND Квартиры.Долг >= 100 ...
Естественно, при таком сравнении отрицательный долг отсеивается заведомо...
0
1 / 1 / 0
Регистрация: 07.04.2012
Сообщений: 72
22.07.2014, 18:11  [ТС]
По идее должно работать если сам запрос верен. Проверяю через QKvartiri->RecordCount. Задаю принудительно значение 100. QKvartiri->RecordCount = 0. Задаю 90. QKvartiri->RecordCount = 3.
Вложения
Тип файла: rar Doorphone.rar (86.3 Кб, 15 просмотров)
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
23.07.2014, 16:32
Проверил. Задал 90. Выбралось 65. В столбце долг видно, что выбираются не только до 91. Надеюсь, ты сообразил удалить из запроса
SQL
1
...Квартиры.Код_подъезда = :Код_подъезда...
если ты этот параметр не используешь?
Миниатюры
Запрос данных из 2-х таблиц Access по условию и с параметром  
0
1 / 1 / 0
Регистрация: 07.04.2012
Сообщений: 72
23.07.2014, 18:57  [ТС]
Да, если убрать это кусок кода, тогда выборка по долгу идет, но в отчете не происходит формирования квартир по подъездам. У меня в отчете Таблица Подъезды присвоена MasterData? а таблица квартиры DetailData. В результате по каждому адресу подъезда формируются все квартиры (со всех адресов). Если код оставить то все нормально с адресами, но долг почему то не работает нормально.
Миниатюры
Запрос данных из 2-х таблиц Access по условию и с параметром   Запрос данных из 2-х таблиц Access по условию и с параметром  
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
24.07.2014, 10:04
Ну, это ж обычная сортировка результатов. Сейчас всё сортируется только по квартирам, а ты хочешь подъезд-квартира
SQL
1
...ORDER BY Квартиры.Подъезд, Квартиры.Квартира
Но это тоже не совсем правильно. Надо было бы сортировать по адресу-дому-подъезду-квартирам, чтобы не было дважды ул.Суюмбаева д.142, как в примере. Тогда всё будет выглядеть так
SQL
1
...ORDER BY Квартиры.Код_улицы, Квартиры.Дом, Квартиры.Подъезд, Квартиры.Квартира
0
1 / 1 / 0
Регистрация: 07.04.2012
Сообщений: 72
26.07.2014, 06:44  [ТС]
Если убрать этот код
C++
1
Квартиры.Код_подъезда = :Код_подъезда
, чтобы работал правильно долг, то сортировка
C++
1
...ORDER BY Квартиры.Код_улицы, Квартиры.Дом, Квартиры.Подъезд, Квартиры.Квартир
не помогает, все равно высвечивает по каждому адресу подъезда весь список квартир с разных адресов.
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
28.07.2014, 11:52
Неясно, где ты забуксовал. Вот, что выводится у меня. По-моему, чётко видно, что все адреса отсортированы по улицам-домам-подъездам-квартирам, плюс отфильтрованы по долгу 90.
Миниатюры
Запрос данных из 2-х таблиц Access по условию и с параметром  
0
1 / 1 / 0
Регистрация: 07.04.2012
Сообщений: 72
29.07.2014, 08:32  [ТС]
А больше 90 пробовали, работает? У меня в отчете FastReport не правильно отображает данный запрос. В этом проблема.
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
29.07.2014, 09:41
Естественно работает. В примере поставил >=120. Если запрос написан правильно, то он будет работать при любых условиях. Очевидно, что проблема кроется именно с использованием FastReport, а не с запросом.
Миниатюры
Запрос данных из 2-х таблиц Access по условию и с параметром  
0
1 / 1 / 0
Регистрация: 07.04.2012
Сообщений: 72
29.07.2014, 16:29  [ТС]
А как сделать объединение таблиц Подъезды и Квартиры по полю Код_подъезда, чтобы адрес брался из таблицы Подъезды, а соответствующие этому адресу данные из таблицы Квартиры.
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
29.07.2014, 16:31
Цитата Сообщение от Security Посмотреть сообщение
А как сделать объединение таблиц Подъезды и Квартиры по полю Код_подъезда, чтобы адрес брался из таблицы Подъезды, а соответствующие этому адресу данные из таблицы Квартиры
используй INNER JOIN или RIGHT JOIN или LEFT JOIN. Подробнее Тут
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
29.07.2014, 16:52
Security, мы, кажется, опять вернулись к исходному. Я тебе приводил уже пример, где в запросе использовался параметр для кода подъезда, который ты упорно игнорировал...
0
1 / 1 / 0
Регистрация: 07.04.2012
Сообщений: 72
29.07.2014, 17:04  [ТС]
Почему я его использовал, но тогда почему то перестает работать выборка по Долгу. Берет только до 90.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.07.2014, 17:04
Помогаю со студенческими работами здесь

Запрос с параметром access
Здравствуйте, в делфи использовал запрос с параметром для выбора даты ADOQuery1.Close; AdoQuery1.Sql.Text:='SELECT * FROM товар WHERE...

Запрос на определение количества таблиц в БД по условию
Всем привет! Кто поможет! Суть такая Есть 3 таблицы в двух 40 человек а в одной 20. Нужно создать запрос где укажет сколько...

SQL запрос с параметром в Access, используя VBA
Здравствуйте, есть БД в Access. В ней таблица (каталог предложений) и форма (поиск), на которой пользователь должен выбрать параметры SQL...

Запустить готовый запрос в ACCESS из VBA Excel с параметром
Здравствуйте! Есть «внешний» готовый запрос в Access “ZZZ1” с единой строчкой: SELECT * FROM Tabl1 WHERE TTT=Q; Q – внешний...

Требуется запрос. Дополнительные поля, с текстом не из таблиц, но в зависимости от данных таблиц
Суть такая, есть три таблицы (пример) T_Main ID|Name|Pos 1|Вася|21 2|Вася|10 3|Вася|25 4|Вася|16 5|Вася|254 6|Петя|5 ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru