powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / SQL запрос в VBA на выборку данных из нескольких таблиц mdb
15 сообщений из 15, страница 1 из 1
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921540
Deys85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Есть база mdb с несколькими таблицами:

Регистр - общая таблица с хранением операций деятельности предприятия. Поля (Дата, НомерОперации(уникальный), КодТипаОперации, КодКА и т.д.)

СправочникКА - таблица хранящая информацию по контрагентам.Имеет поля (КодКА(уникальный), НаименованиеКА и т.д.)

ТипыОпераций - таблица перечислений типов операции:Возврат, Продажа, Произведено и т.д. Имеет поля (КодТипаОперации(уникальный), РасшифровкаТипа)

В качестве модуля управления использую Excel c VBA и кучей форм связанных.

Загружаю данные, выгружаю с помощью библиотеки DAO.

Вопрос: Возможно ли написать запрос который бы выгружал Регистр, но на место полей КодТипаОперации, КодКА подставлял наименование из таблиц СправочникКА и ТипыОпераций, используя один запрос?

Сейчас делаю так:
set rs = dbs.OpenRecordset ("Select * FROM Регистр")
set rsKA = dbs.OpenRecordset ("Select * From СправочникКА where КодКА = '" & rs.fields("КодКА") & "'")
...

на выходе сливаю в таблицу Лист1
cells(1,1) = rs.fields("Дата")
...
cells(1,4) = rsKA.fields("НаименованиеКА")
...

т.е. в базе:
12.03.05 | SL0002 | 12 | 0009

при выгрузке получаю
12.03.05 | SL0002 | продажа | ООО "Рога и Хвост"

В реале таблица с кодами намного больше.
Возможно ли как-то выборку и подстановку делать более короче ?

Спасибо.
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921542
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deys85,

Код: sql
1.
2.
3.
4.
select Регистр.*, СправочникКА.НаименованиеКА , ТипыОпераций.РасшифровкаТипа 
from Регистр 
inner join СправочникКА on Регистр.КодКА=СправочникКА.КодКА 
inner join ТипыОпераций on Регистр.КодТипаОперации=ТипыОпераций.КодТипаОперации
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921567
Deys85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,

огромное спасибо :)
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921585
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deys85, если нет необходимости динамически генерировать строку SQL, то для возврата данных можно воспользоваться инструментом MSQuery - по сравнению с конструктором запросов акцесса возм-ти урезанные, но так же иннер джойны можно делать, плюс передавать параметры из ячеек экселя в запрос для выборки по условию (диапазон дат, к примеру или КодКА).
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921592
Deys85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,

ничего не пойму. Пишет следующее:"error 3075 Ошибка синтаксиса (пропущен оператор) в выражении запроса" полный тект во вложении

сама функция построения запроса:

Public Function LoadOperationSQL(DateStart, DateEnd As String) As String
LoadOperationSQL = "SELECT Регистр.*, СправочникКА.НаименованиеКА, ТипОперации.НазваниеОперации, СправочникВидВС.НаимВС " _
& "FROM Регистр inner join СправочникКА on Регистр.КодРЦ=СправочникКА.КодКА " _
& "inner join СправочникВидВС on Регистр.КодВС=СправочникВидВС.КодВС " _
& "inner join СправочникКА on Регистр.КодКА=СправочникКА.КодКА " _
& "inner join ТипОперации on Регистр.КодОперации=ТипОперации.КодОперации " _
& "WHERE Дата between #" & DateStart _
& "# AND #" & DateEnd & "#"

End Function

переменные DateStart и DateEnd для указания диапазона выборки по дате.
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921599
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для Access еще важно правильно расставить круглые скобки в джойнах
что-то типа

Код: sql
1.
2.
3.
4.
select Регистр.*, СправочникКА.НаименованиеКА , ТипыОпераций.РасшифровкаТипа 
from (Регистр 
inner join СправочникКА on Регистр.КодКА=СправочникКА.КодКА) 
inner join ТипыОпераций on Регистр.КодТипаОперации=ТипыОпераций.КодТипаОперации
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921603
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
аа, с этим, вот - http://www.sql.ru/faq/faq_topic.aspx?fid=213 Q26
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
LoadOperationSQL = "SELECT Регистр.*, СправочникКА.НаименованиеКА, ТипОперации.НазваниеОперации, СправочникВидВС.НаимВС " _
                   & "FROM ((Регистр inner join СправочникКА on Регистр.КодРЦ=СправочникКА.КодКА " _
                   & "inner join СправочникВидВС on Регистр.КодВС=СправочникВидВС.КодВС) " _
                   & "inner join СправочникКА on Регистр.КодКА=СправочникКА.КодКА) " _
                   & "inner join ТипОперации on Регистр.КодОперации=ТипОперации.КодОперации " _
                   & "WHERE Дата between #" & DateStart _
                   & "# AND #" & DateEnd & "#"



и "пашти гарантед", - это следующее - http://www.sql.ru/faq/faq_topic.aspx?fid=157 (про даты)
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921616
Deys85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,

Блин, новая теперь ошибка см. вложение

Функция:

Public Function LoadOperationSQL(DateStart, DateEnd As String) As String
LoadOperationSQL = "SELECT Регистр.*, СправочникКА.НаименованиеКА, ТипОперации.НазваниеОперации, СправочникВидВС.НаимВС " _
& "FROM ((((Регистр inner join СправочникКА on Регистр.КодРЦ=СправочникКА.КодКА) " _
& "inner join СправочникВидВС on Регистр.КодВС=СправочникВидВС.КодВС) " _
& "inner join СправочникКА on Регистр.КодКА=СправочникКА.КодКА) " _
& "inner join ТипОперации on Регистр.КодОперации=ТипОперации.КодОперации) " _
& "WHERE Дата between #" & DateStart _
& "# AND #" & DateEnd & "#"

End Function

Оговорюсь, модуль пишу на Excel 2003 к базе обращаюсь через DAO.

По дате, все работает без подстановки.
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921620
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deys85qwerty112,

Блин, новая теперь ошибка см. вложение

Функция:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function LoadOperationSQL(DateStart, DateEnd As String) As String
LoadOperationSQL = "SELECT Регистр.*, СправочникКА.НаименованиеКА, ТипОперации.НазваниеОперации, СправочникВидВС.НаимВС " _
                   & "FROM ((((Регистр inner join СправочникКА on Регистр.КодРЦ=СправочникКА.КодКА) " _
                   & "inner join СправочникВидВС on Регистр.КодВС=СправочникВидВС.КодВС) " _
                   & "inner join СправочникКА on Регистр.КодКА=СправочникКА.КодКА) " _
                   & "inner join ТипОперации on Регистр.КодОперации=ТипОперации.КодОперации) " _
                   & "WHERE Дата between #" & DateStart _
                   & "# AND #" & DateEnd & "#"
                   
End Function



Оговорюсь, модуль пишу на Excel 2003 к базе обращаюсь через DAO.

По дате, все работает без подстановки.
выделенное - лишнее

КОД ТЕГАМИ ОФОРМЛЯЙ !!
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921622
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если не поможет, - смотри типы полей по которым делается связь в join-ах,
может не совпадают
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921634
Deys85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,

типы полей совпадают:
КодКА - текстовый 4 байта
КодТипаОперации - текст 2 байта
КодВида - 2 байта
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921644
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deys85qwerty112,

типы полей совпадают:
КодКА - текстовый 4 байта
КодТипаОперации - текст 2 байта
КодВида - 2 байта
и что ? "не работает" ?

тогда с типами - "не верю" (с),
выкладуй бд или показуй принскрины таб.в конструкторе
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921692
Deys85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,

Скрины во вложении.

Вызов запроса делаю следующим образом:

Код: vbnet
1.
2.
3.
4.
5.
Set dbs = DAO.OpenDataBase(PathBase, False, False, ";pwd=" + pasBase)
  
    Set rs = dbs.OpenRecordset(LoadOperationSQL(NewDataStart, NewDataEnd))
    
    If rs.RecordCount > 0 Then ....
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37921706
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deys85,

1
без условия WHERE - работает ?
2
строку запроса возвращ.функцией покачи (БЕЗ переменных, ту строку по которой будет открыватся рекордсет)
2
в Акцессе создай запрос с этим скл - будет работать ?
3
ключ в таблицу Регистр сделай
4
поле КодРЦ - ты зачем показывал в Регистр ?
...
Рейтинг: 0 / 0
SQL запрос в VBA на выборку данных из нескольких таблиц mdb
    #37922257
Еще раз предлагаю исп-ть МС Квери без всякого излишества типа ДАО. Параметры DateStart и тп в секцию Вера передаются на раз из ячеек с листа книги Экселя. Сегодня по-быстрому к своей акцессной базе прототип клиента слепил с несколькими внешними запросами без всяких заморочек с ДАО/АДО.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / SQL запрос в VBA на выборку данных из нескольких таблиц mdb
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]