С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
-18 / 1 / 0
Регистрация: 20.09.2013
Сообщений: 15

Разобраться с sql запросом в vba и правильным подключением базы access - word

21.11.2014, 12:34. Показов 1512. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Хочу замутить кнопку в форме базы по нажатию которой будет открываться шаблон word и заполняться указанными позициями из базы.
Что сделано:
-Записал макрос подключения к базе в word. Получилась следующая конструкция:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
    ActiveDocument.MailMerge.OpenDataSource Name:= _
        "R:\10. 01234567890 0123456789012 0123456789 012345678901\01. 0123456789 0123456789012\02. 01234 01234567890 012345678\СКЛАД\Склад.accdb" _
        , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=R:\10. 01234567890 0123456789012 0123456789 012345678901\01. 0123456789 0123456789012\02. 01234 01234567890 012345678\СКЛАД\Склад.accdb;Mode=Read;Extended Properties="""";Jet OLEDB:System database=" _
        , SQLStatement:="SELECT * FROM `Оборудование`", SQLStatement1:="", _
        SubType:=wdMergeSubTypeAccess

-Т.к. в базе используются связанные таблицы стандартный запрос выводит индексы а не связанные с ними данные. В access сделал нужный запрос и открыл его в режиме кода sql:
Кликните здесь для просмотра всего текста
SQL
1
2
3
SELECT Оборудование.галка, Офис.Офис, Тип.Тип, Марка.Марка, Модель.Модель, Оборудование.[Инвентарник АХО], Оборудование.Инвентарник, Оборудование.Расположение
FROM Тип RIGHT JOIN (Офис RIGHT JOIN (Модель RIGHT JOIN (Марка RIGHT JOIN Оборудование ON Марка.Код = Оборудование.Марка) ON Модель.Код = Оборудование.Модель) ON Офис.Код = Оборудование.Офис) ON Тип.Код = Оборудование.Тип
WHERE (((Оборудование.галка)=TRUE));

-Редактирую запрос в vba на основе кода запроса в access и получаю следующую конструкцию:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
        ActiveDocument.MailMerge.OpenDataSource Name:= _
        "R:\10. 01234567890 0123456789012 0123456789 012345678901\01. 0123456789 0123456789012\02. 01234 01234567890 012345678\СКЛАД\Склад.accdb" _
        , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=R:\10. 01234567890 0123456789012 0123456789 012345678901\01. 0123456789 0123456789012\02. 01234 01234567890 012345678\СКЛАД\Склад.accdb;Mode=Read;Extended Properties="""";Jet OLEDB:System database=" _
        , SQLStatement:="SELECT Оборудование.галка, Офис.Офис, Тип.Тип, Марка.Марка, Модель.Модель, Оборудование.[Инвентарник АХО], Оборудование.Инвентарник, Оборудование.Расположение FROM Тип RIGHT JOIN (Офис RIGHT JOIN (Модель RIGHT JOIN (Марка RIGHT JOIN Оборудование ON Марка.", _
        SQLStatement1:="Код = Оборудование.Марка) ON Модель.Код = Оборудование.Модель) ON Офис.Код = Оборудование.Офис) ON Тип.Код = Оборудование.Тип, WHERE (((Оборудование.галка)=True))", _
        SubType:=wdMergeSubTypeAccess

После чего при выполнении кода word не подключается к базе, так как обрезает путь и меняет расширение искомой базы до такого вида:
R:\10. 01234567890 0123456789012 0123456789 012345678901\01. 0123456789 0123456789012\02. 01234 01234567890 012345678\СКЛАД.mdb т.е. \Склад.accdb заменяется на .mdb
Файл находится на файловом сервере, изменить длину пути не представляется возможным. Заменил названия папок соответствующим количеством цифр. Длина пути осталась прежняя.

Первый вопрос:
Как правильно подключиться к базе с новым запросом?
Второй вопрос:
Возможно ли заставить считать корневым каталогом папку СКЛАД чтобы получилось что-то вида *\СКЛАД\Склад.accdb и избежать возможных проблем с переименовыванием основного пути к базе "R:\10. 01234567890 0123456789012 0123456789 012345678901\01. 0123456789 0123456789012\02. 01234 01234567890 012345678"?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.11.2014, 12:34
Ответы с готовыми решениями:

Использование функции DatePart Access + VBA под SQL -запросом
Помогите разобраться с ходом мысли решения проблемы.. ну и направьте, пожалуйста на путь истинный! Столкнулся с проблемами использования...

Блокировка базы SQL запросом (Дравер базы данных не может заблокировать таблицу ХХХХХ)
Подскажите, пожалуйста возможные решения: Есть базы в *.DBF файлах, создан System DSN (Драйвер Microsoft DBase Driver (*.dbf)), работает...

Проблема с подключением базы Access
Sdelal programmu i u menya tam est podkluzhenie k base .mdb zheres ODBC (s pomoszhyu ADO ). Delayu setup fail,dobovlayu vse nuzhnie...

4
1266 / 448 / 129
Регистрация: 21.03.2013
Сообщений: 1,210
21.11.2014, 13:21
Цитата Сообщение от DRAK0N Посмотреть сообщение
Хочу замутить кнопку в форме базы по нажатию которой будет открываться шаблон word и заполняться указанными позициями из базы
а почему не пойти другим путем- из аксесс открыть шаблон ворда и вставить необходимые данные (по закладкам например) и сохранить файл в нужном уже месте...
потому что, если вы пишете макрос в ворде то и нужно обращаться к спецам по ворду
0
-18 / 1 / 0
Регистрация: 20.09.2013
Сообщений: 15
21.11.2014, 14:08  [ТС]
хм...а в чем разница между открытием шаблона аксесом и открытием того же шаблона с кодом подключения к базе.
ведь по идее и там и там будет одинаковый код?
можно поподробнее?
да и вопрос по сути не в worde а в подключении к базе.
Плюс ко всему в аксесе нет функции записи макроса чтобы было проще разобраться, по крайней мере в 2010 я данного функционала не нашел
0
1266 / 448 / 129
Регистрация: 21.03.2013
Сообщений: 1,210
21.11.2014, 14:24
на кнопке вешаем процедуру
SQL
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
Dim strPathWord AS String '  путь к новому файлу  
Dim strPathDot As String  ' шаблон файла полный путь
Dim app AS Word.Application
Dim DlgUser AS INTEGER
…………
 
    IF Dir(strPathWord) <> "" THEN
        DlgUser = MsgBox("Документ с таким именем ранее уже был создан. Заменить его?", vbYesNo, "admin")
        IF DlgUser = vbNo THEN
            SET app = CreateObject("Word.Application")
            WITH app
                .Visible = TRUE
                .Documents.Open strPathWord   '  открываем имеющийся файл если он существует и не хотим его перезаписывать
            End With
            Set app = Nothing
        Else
            GoTo nn  '  переход к метке где формируем новый документ
        END IF
    ELSE
nn:
        SET app = NEW Word.Application
        app.Visible = TRUE
        app.Documents.Add strPathDot  ' шаблон файла  открыт       
 With app.ActiveDocument  ' вставляем нужные данные
            .Bookmarks.Item("Закладка1").Range.Text = Нужныеданные1  ' закладки предварительно вставляются в ворд       
            .Bookmarks.Item("Закладка2").Range.Text = Нужныеданные2
И т.д.
End with
естественно доработаную под свои нужды
0
-18 / 1 / 0
Регистрация: 20.09.2013
Сообщений: 15
21.11.2014, 16:29  [ТС]
Спасибо буду разбираться.
Не совсем понял где взять и как в таком случае происходит заполнение .Bookmarks.Item
При присоединении базы к ворду как-то попроще там есть поля слияния MailMerge которые сразу закрепляются за нужной ячейкой данных.
Все же предпочтительнее было бы услышать решение по проблеме подключения к базе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2014, 16:29
Помогаю со студенческими работами здесь

Знаки подстановки разные в SQL Access и SQL VBA Access
Приветствую, уважаемые форумчане. Просмотрел множество сообщений о VBA и SQL, но вот так, как у меня вопрос нигде не стоял. Делаю...

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

Проблема с подключением базы данных созданной в Access к форме
Добрый день, помогите с проблемой. Имеется форма, на ней есть ListBox, хотелось бы в него выводить столбец из базы данных. Пытаюсь...

Разница в скорости vba word и vba access
Вопрос: из акса идет выгрузка данных в файл ворд, далее эти данные опять же из акса форматно обрабатываются (данные заранее были тегированы...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru