Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для nattive
5 / 3 / 2
Регистрация: 21.03.2013
Сообщений: 113
MS Access

Запрос SQL к нескольким БД с подзапросами

15.12.2014, 22:08. Показов 1109. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Нужна помощь в написании запроса к БД, состоящей из нескольких таблиц:
Таб1 - регистр операций
Таб2 - справочник номенклатуры
Таб3 - регистр документов

В Таб3 содержится список документов, имеющих уникальные номера. В Таб1 содержатся записи в виде: номер документа, количество, сумма, код операции (уникальные значения).

Не могу вывести в табличную часть формы данные одного из номеров документа, при этом чтобы вместо кода номенклатуры было имя номенклатуры из справочника номенклатуры. Пробовал запрос в запросе, но данные DBGrid вносятся только одной строкой, а должно быть столько строк, сколько записей в Таб1, удовлетворяющих условию равенству документа из Таб2.


Код запроса:

Добавлено через 44 секунды
Code
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
29
30
31
32
begin
Form2.ADOConnection1.Connected:=TRUE;
TRY
ADOQuery3.SQL.Clear;
    ADOQuery3.SQL.Add('Select Cod_List from LIST2015 Where Cod_Doc_List=:a');
    AdoQuery3.Parameters.ParamByName('a').Value:=Label9.Caption;
    ADOQuery3.Active:=true;
    ADOQuery3.First;
            while not ADOQuery3.Eof do
              begin
              ShowMessage('Первый найден');
              Label11.Caption:=AdoQuery3.Fields.Fields[0].value;
                    begin
                          TRY
                              ADOQuery2.SQL.Clear;
                              ADOQuery2.SQL.Add('Select NAME_NOMENKL from NOMENKLATURA Where COD_NOMENKL=(Select Cod_Nomenkl_List from LIST2015 WHERE Cod_List=:b)');
                              AdoQuery2.Parameters.ParamByName('b').Value:=Label11.Caption;
                              ADOQuery2.Active:=true;
                              ADOQuery2.First;
                          while not ADOQuery2.Eof do
                              ADOQuery2.Next;
                          except on e:exception do
                              Showmessage(e.ClassName + ':' + e.Message);
                          end;
                        end;
              ADOQuery3.Next;
              end;
      except on e:exception do
        Showmessage(e.ClassName + ':' + e.Message);
        end;
 
end;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.12.2014, 22:08
Ответы с готовыми решениями:

SQL Запрос в Delphi по нескольким параметрам
Добрый день коллеги. Нужна помощь в написании SQL запроса. Есть Таблица в базе данных на SQL сервере. На форме имеется три...

Запрос по нескольким полям
Не получается сделать запрос. Если ADOQuery1.SQL.Add('SELECT*FROM БД where 1=1 '); if edit1.text<>'' ADOQuery1.SQL.Add(' and LIKE ...

SQL, присвоить значение нескольким записям
А как с помощью SQL-запроса в Delphi присвоить одно значение сразу нескольким записям (строкам)? К примеру нужно так: select * from...

10
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
15.12.2014, 23:13
А какой тип базы?
0
 Аватар для nattive
5 / 3 / 2
Регистрация: 21.03.2013
Сообщений: 113
15.12.2014, 23:17  [ТС]
Access
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
15.12.2014, 23:29
В среде Аксесса есть Конструктор запросов.
С его помощью можно смастерить запрос, объединяющий данные из разных таблиц.
Там же протестировать этот запрос, а его текст, затем, перенести в Дельфи.
0
 Аватар для nattive
5 / 3 / 2
Регистрация: 21.03.2013
Сообщений: 113
17.12.2014, 22:25  [ТС]
Построил запрос в ACCESS - все работает на отлично. но пришлось настроить связи между таблицами.
В режиме SQL посмотрел код, он немного отличается от кода Делфи.
например аргумент: INNER JOIN.
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
17.12.2014, 22:46
> но пришлось настроить связи между таблицами
Это где же? И почему так уныло?

Чем же отличается INNER JOIN в построителе запросов Аксесса и кода в Дельфи?
0
 Аватар для nattive
5 / 3 / 2
Регистрация: 21.03.2013
Сообщений: 113
18.12.2014, 00:55  [ТС]
связь настраивал в Access чтоб запрос сработал.

с INNER JOIN разобрался (раньше не знал о такой полезной штуке), но теперь задача вторая объединить данные из двух таблиц... выходит ошибка синтаксиса.
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
18.12.2014, 01:07
связь настраивал в Access чтоб запрос сработал.
Если в схеме данных, то напрасно, т.к. запросы в Аксессе, использующие объединение данных из разных таблиц (с применением слова JOIN) не нуждаются в этих связях.
К тому же, они будут мешать работать с базой из Дельфи.

но теперь задача вторая объединить данные из двух таблиц.
Хм. Но JOIN и предназначен для выборки данных из разных (двух и более) таблиц. И больше ни для чего.
Тогда спрашивается: что же это был за запрос, который построен в Аксессе и который отлично работает.
0
 Аватар для nattive
5 / 3 / 2
Регистрация: 21.03.2013
Сообщений: 113
18.12.2014, 01:13  [ТС]
Ехоу... допетрил...

Если производится объединение более чем две таблицы, то есть некоторая особенность - необходимо правильно поставить скобки в тексте запроса.
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
18.12.2014, 01:19
необходимо правильно поставить скобки в тексте запроса
Да, ладно. Это происки аксессовского конструктора запросов.
Для эксперимента (в режиме "SQL") можно убрать все скобки и, если запрос сформирован правильно, то будет работать и без этих скобок. С данными трех, и четырех, и т.д. таблиц.
На самом деле, объединение данных одной таблицы с другой осуществляется по идентификаторам, а не благодаря скобкам.
Скобки, бывают и нужны, но для отделения одного условия объединения от других и то при необходимости этого отделения.
Но такое бывает чрезвычайно редко.
0
18.12.2014, 02:02

Не по теме:

Цитата Сообщение от nattive Посмотреть сообщение
с INNER JOIN разобрался
Блажен кто верует :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.12.2014, 02:02
Помогаю со студенческими работами здесь

Запрос на выборку данных по нескольким полям
Доброе утро! Помогите сделать выборку по нескольким полям из БД, например вводим фамилию(или часть фамилии) и через пробел описание, на...

SQL-запрос (поиск по нескольким параметрам)
У меня вопрос. Есть форма ввода параметров поиска. В нем есть поле Modell. Как должна выглядеть функция Private Sub Find_Click() Dim...

Запрос к БД с подзапросами
добррый день. Не могу составить запрос к БД. Есть таблица comments с комментариями, и в ней записаны как родительские так и дочерние...

Запрос с подзапросами
Здравствуйте, имеются две таблицы: рецензии и оценки к ним. Оценки могут иметь значение только 1 и 0 (условные "Да" и...

Запрос с подзапросами
Добрый день! Как реализовать такое?UPDATE SET = (SELECT FROM WHERE = 310330 AND = 2011 AND = 41) - (SELECT FROM ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru