Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203

Создание запроса Access VBA

04.08.2016, 23:56. Показов 3617. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет...
Имеются две таблицы
Локальная и вторая на сервере SQL Server...

пробовал их объединить..но к что то не так...я в программировании новичок..
Сам код подключения нашел в интернете...подключение работает...проверял

Пробовал такой код...но получается что локальную таблицу он так ищет на сервере...
Как сделать что он мне показывал данные как с локальной так и с сервера?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Form_Load()
 Dim sql As String
 Dim db As DAO.Database
 Dim rs As DAO.Recordset
 
 Set db = OpenDatabase("", False, False, "Driver={SQL Server};Server=Имя Сервера;Database=master;Uid=Логин;Pwd=Пароль;")
 
 sql = "SELECT Товар.Код, Товар.Количество, Товар.Адрес, Товар.[Штрих-код], Товар.Дата, Товар.ЛМ, Товар.Описание, dbo_Price.new_price, dbo_Price.gamma" _
       & "FROM Товар INNER JOIN dbo_Price ON Товар.ЛМ = dbo_Price.product_code;"
 
       
 Set rs = db.OpenRecordset(sql, dbOpenDynaset, dbReadOnly)
 Set Me.Form.Recordset = rs
 
 Me.Form.Requery
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.08.2016, 23:56
Ответы с готовыми решениями:

Создание запроса в access vba
приветствую, У меня есть в форме есть список,который ссылается на запрос, и я хочу при помощи полей со списком фильтровать его, т.е. в...

Создание запроса VBA
Как сформировать запрос с параметрами из VBA, что бы он в таком виде был.

Ошибка при выполнении запроса в коде на VBA Access
Здравствуйте. Делаю в БД на аксесс форму для вывода данных. На форме есть комбобокс, где выбирается значение для условия отбора в запросе....

15
 Аватар для VinniPuh
9131 / 6136 / 593
Регистрация: 27.03.2013
Сообщений: 19,988
05.08.2016, 07:54
Я бы попробовал - False написать три раза, чтобы уж точные сработало.
0
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203
05.08.2016, 09:29  [ТС]
PuhKMV, Где написать False три раза?
Здесь?
Visual Basic
1
Set db = OpenDatabase("", False, False, "Driver={SQL Server};Server=Имя Сервера;Database=master;Uid=Логин;Pwd=Пароль;")
И что он даст?
0
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203
05.08.2016, 09:50  [ТС]
PuhKMV, Поставил третий False...ругается..
И выделяет именно
Visual Basic
1
Set rs = db.OpenRecordset(sql, dbOpenDynaset, dbReadOnly)
Миниатюры
Создание запроса Access VBA  
0
 Аватар для VinniPuh
9131 / 6136 / 593
Регистрация: 27.03.2013
Сообщений: 19,988
05.08.2016, 11:24
nikolaynn1984, это шутка была, попробуйте 1 раз, зачем 2 раза, что то не пойму?
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,936
Записей в блоге: 4
05.08.2016, 12:56
ошибка при формировании строки запроса
перед словом FROM нет пробела
0
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203
06.08.2016, 01:06  [ТС]
PuhKMV, shanemac51,
Нашли с кем шутить))))
Я то поверил...
И пробел есть после FROM
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
06.08.2016, 08:37
nikolaynn1984, для выборки из серверной таблицы надо или слинковать ее или создать сохраненный запрос к серверу. И уже с линкованной таблицей (или запросом к серверу) делать запросы связывающие серверные данные с локальными.
0
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203
06.08.2016, 09:43  [ТС]
mobile, Да, так можно...этот вариант я знаю...
Но к сожалению он мне не подходит...мне нужно сделать это только средствами VBA...

Добавлено через 1 минуту
что нужно прописать в коде чтоб он брал данные из локальной таблицы, и подставлял данные в эту таблицу из таблицы с сервера?

Добавлено через 1 минуту
Могу написать запрос в VBA на выборку данных из локальной таблицы, так же могу написать на выборку и сервера...
Но как объединить эти таблицы?
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,936
Записей в блоге: 4
06.08.2016, 10:06
Цитата Сообщение от nikolaynn1984 Посмотреть сообщение
PuhKMV, shanemac51,
Нашли с кем шутить))))
Я то поверил...
И пробел есть после FROM
после есть, а перед --не вижу
по крайней мере на картинке

да и в коде нет --подстроки сливаются

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Form_Load()
 Dim SQL AS String
 Dim db AS DAO.Database
 Dim rs AS DAO.Recordset
 
 SET db = OpenDatabase("", FALSE, FALSE, "Driver={SQL Server};Server=Имя Сервера;Database=master;Uid=Логин;Pwd=Пароль;")
 
 SQL = "SELECT Товар.Код, Товар.Количество, Товар.Адрес, Товар.[Штрих-код], Товар.Дата, Товар.ЛМ, Товар.Описание, dbo_Price.new_price, dbo_Price.gamma" _
       & "FROM Товар INNER JOIN dbo_Price ON Товар.ЛМ = dbo_Price.product_code;"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
'''''''''если вставитете контрольную распечатку --сами увидите
debug.print sql
  ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''     
 Set rs = db.OpenRecordset(sql, dbOpenDynaset, dbReadOnly)
 Set Me.Form.Recordset = rs
 
 Me.Form.Requery
End Sub
надо

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Form_Load()
 Dim sql As String
 Dim db As DAO.Database
 Dim rs As DAO.Recordset
 
 Set db = OpenDatabase("", False, False, "Driver={SQL Server};Server=Имя Сервера;Database=master;Uid=Логин;Pwd=Пароль;")
 
 sql = "SELECT Товар.Код, Товар.Количество, Товар.Адрес, Товар.[Штрих-код], Товар.Дата, Товар.ЛМ, Товар.Описание, dbo_Price.new_price, dbo_Price.gamma" _
       & "   FROM Товар INNER JOIN dbo_Price ON Товар.ЛМ = dbo_Price.product_code;"
 debug.print sql
       
 Set rs = db.OpenRecordset(sql, dbOpenDynaset, dbReadOnly)
 Set Me.Form.Recordset = rs
 
 Me.Form.Requery
End Sub
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
06.08.2016, 12:08
Цитата Сообщение от nikolaynn1984 Посмотреть сообщение
так же могу написать на выборку и сервера...
Отлично. Сделайте эту выборку в переменную типа рекордсет, а потом из переменной вставьте в локальную таблицу. Допустим, qq это ваш рекордсет, который вы получили с сервера.

Visual Basic
1
2
3
4
5
6
7
8
    Set tt = CurrentDb.OpenRecordset("Имя локальной таблицы")
    While Not qq.EOF
        tt.AddNew
        tt.Fields(0) = qq.Fields(0)
        tt.Update
        qq.MoveNext
    Wend
    tt.close
2
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203
07.08.2016, 01:53  [ТС]
texnik-san, Буду пробовать...это похоже на то что нужно)))
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.08.2016, 08:26
Да, в строчке tt.Fields(0) = qq.Fields(0) на самом деле к полям лучше обращаться по именам, а не номерам, чтобы код не перестал работать, если в таблице или запросе кто-то поменяет поля местами:

Visual Basic
1
tt.Fields("ИмяПоляВЛокальнойТаблице") = qq.Fields("ИмяПоляВТаблицеНаСервере")
или еще проще

Visual Basic
1
tt!ИмяПоляВЛокальнойТаблице = qq!ИмяПоляВТаблицеНаСервере
И так по строчке на каждое поле.
1
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203
07.08.2016, 13:37  [ТС]
texnik-san,
Теперь единственный вопрос!!!
Как это все совместить)))
Я пока начинающий...
Можете помочь?
Не могу понять последовательность...это добавлять функцию?
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.08.2016, 17:05
Эм... Не поняла ваш вопрос. Что совместить с чем?

Если обращение к полям по имени с тем кодом, который я выкладывала изначально, то так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
    Set tt = CurrentDb.OpenRecordset("Имя локальной таблицы")
    While Not qq.EOF
        tt.AddNew
        tt!ИмяПоля1ВЛокальнойТаблице = qq!ИмяПоля1ВТаблицеНаСервере
        tt!ИмяПоля2ВЛокальнойТаблице = qq!ИмяПоля2ВТаблицеНаСервере
        ' .. и так далее, пока не присвоим значение последнеу полю ..
        tt!ИмяПоляNВЛокальнойТаблице = qq!ИмяПоляNВТаблицеНаСервере
        tt.Update
        qq.MoveNext
    Wend
    tt.close
А как совмещать с вашей базой - я не знаю, я ни вашу базу в глаза не видела, ни вашу задумку пока не осознала. Я пока ваш отказ присоединять серверную таблицу, но при этом желание объединять данные с сервера с лоальными представила так: вы в локальной базе делаете таблицу, по структуре идентичную серверной, читаете данные с сервера в рекрдсет, из рекордсета заполняете локальную, дальше работаете с локальной копией серверных даных. Не факт, что я правильно вас поняла.

И в любом случае я очень согласна с предыдущими ораторами: я не вижу повода заниматься таким усложнение себе жизни. Присоедините вашу серверную таблицу к базе и работайте как с родной, будет и эффективнее, и проще.

Или создайте запрос к серверу и сохраните как объект базы данных, а дальше уже с ним работайте как с локальной таблицей.
0
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203
07.08.2016, 22:11  [ТС]
texnik-san, shanemac51,
во вложении пример...
Есть таблица товары (Локальная)
Так же есть таблица Price (На сервере)
К сожалению я не могу сделать связь с ODBC... это на работе, и там все сложно с этим...можно было бы сделал...это то не трудно...по этому и замарачиваюсь с VBA
В таблице Price есть колонки Артикул, гамма, цена...
Артикул так же имеется в таблице Товары...
Мне нужно чтоб он в форме просто вставлял Цену и Гамму с таблице на Сервере равную Артикулу в таблице Товары
Миниатюры
Создание запроса Access VBA  
Вложения
Тип файла: zip Тест.zip (2.38 Мб, 7 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.08.2016, 22:11
Помогаю со студенческими работами здесь

Проверка SQL-запроса в VBA и отчет из Access в Excel
Здравствуйте! Учусь писать SQL-запросы и VBA, нужна помощь с проверкой на ошибки. Схема данных Имеется форма договоры, с...

Запуск запроса к таблице на SQL server через VBA access 2007
Здравствуйте! дано: база данных аксес 2007, к ней прилинкованы две таблицы с sql server...

Создание запроса в Access
Здравствуйте, дорогие посетители форума. Помогите пожалуйста разобраться с построением запроса в СУБД Access. Есть таблица (Спортсмен) в...

Создание запроса в MS Access
Помогите составить запрос: "Определите из какого из представленных городов учится наибольшее число студентов и выведите информацию о...

Создание запроса в Access
Добрый день! Требуется создать базу данных по иерархической файловой системе: создать 2 таблицы - Папки(Уникальный идентификатор...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru