powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Прилинковать таблицу с сервера SQL макросом
25 сообщений из 26, страница 1 из 2
Прилинковать таблицу с сервера SQL макросом
    #39569254
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как это сделать макросом? Руками знаю как, а вот макросом что то незнай как.
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39569285
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для тех кто хочет помочь, но не понял что написано:
Как вот эту статью https://support.office.com/ru-ru/article/Импорт-данных-из-базы-данных-SQL-Server-или-связывание-с-ними-a5a3b4eb-57b9-45a0-b732-77bc6089b84e#ID0EABAAA=2010 сделать макромом на vba?
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39569298
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так макросом или на VBA?
Научись уже однозначно формулировать, не в детском саду...
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39569360
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,ну как бы макросы пишутся на vba...
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39569368
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngel , на VBA пишут модули. А макросы - это макросы, для них даже вкладка одноимённая существует. Это не Эксель, где какой-то идиот модули решил называть макросами по причине отсутствия последних.
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39569370
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, гм.. не знал, что именно все так плохо. Тогда модуль на vba.
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39569371
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант 1 (простой): через DoCmd.TransferDatabase с TransferType:=acLink.
Вариант 2 (посложнее): через DAO.database.CreateTableDef с присвоением соотв. .Connect и .SourceTableName.
Вариант 3: аналогично варианту 2, но через ADOX.
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39569380
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, первый вариант рассмотрим?
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39569384
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да пжалста... сделай требуемое сперва именно макросом - там для каждого поля можно справку вызвать да почитать. А потом перенесёшь всё это в чистый VBA.
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39570598
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Линковать не стал, просто супер данные с серваке, как написано тут http://www.vb-helper.com/howto_ado_import_sql_server.html
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39573013
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelЛинковать не стал, просто супер данные с серваке, как написано тут http://www.vb-helper.com/howto_ado_import_sql_server.html

Вы зря отказались от дальнейших попыток линка, по первому варианту Акины.
Потому что есть возможность линка таблиц/вьюшек, не привязываясь к конкретному экземпляру ODBC драйвера на стороне компьютера, где запускается ваш аксесс.
И во вторых потеряли возможность использовать в качестве формы ввода логина и пароля родной интерфейс коннектора, который сразу без костылей на стороне клиента (то бишь аксесса) использует права и доступ, написанный на стороне SQL server.
вот пример:
Код: vbnet
1.
2.
DoCmd.TransferDatabase acLink, "ODBC", "ODBC;DRIVER={SQL server};" _
& " SERVER=XX.XX.XXX.XXX; User=XXXX;Password=XXXX;DATABASE=XX_XXXX", acTable, "как_называется_таблица_на_сервере", "как_она_будет_называться_у_меня"



После выполнения линка таблицы с сервера привычно отображаются слева в трее как линкованные. Есть маленькая хитрость, если не указывать логин и пароль, то вас во время выполнения данной команды вас попросят ввести логин и пароль, вы его введите, но потом не сохраняйте , когда линковка закончиться.
Таблица разово прилинкуется, а потом, во время каждого открытия аксесса будет выскакивать это самое родное окно коннектора с просьбой ввести логин и пароль. Причем, независимо от того сколько вы залинковали таблиц, оно вводится один раз при загрузке аксесса и действует на время всей сессии в аксессе, на все таблицы, с правами и доступом соответственно, которые вы ввели при входе. (то есть если несколько юзеров, у которых права прописаны на стороне SQL server. будут вбивать их при входе, права на доступ к таблицам /вьюшкам при открытии базы в аксессе будут соответственно разные.)

Вторым нюансом является то, что такой способ ( конкретно в коде выше ) линкует таблицы без привязки к именованному экземпляру DSN, и база может запускаться и подключаться к серверу с любого компьютера , на котором есть аксесс , хоть от бабушки в Сызрани, хоть из фавел Колумбии.

Третьим нюансом является то, что в данном случае линковки вы не используете постоянные запросы к серверу в ADO , как вы прорекламировали по ссылке. После линковки объектов уже не надо ничего писать и поддержаивать лишнего. Функции поддержки соединения на себя берет встроенный ODBC driver. И вы на время работы в базе пользуетесь всем тем же классическим интерфейсом аксесса в полной мере возможностей.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Прилинковать таблицу с сервера SQL макросом
    #39877657
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Прошло много времени, а проблема так и осталась - так никто не сказал как на vba прилинковать таблицу.

Используя ADO вне Access, например из Excel, или Word.
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877664
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов,
Вы правы, что не стал делать линковку(связывание) таблицы. Тогда надо было на скорую руку. Теперь это стало тормозом. В Access сделав руками связанную таблицу, работа ускорилась в разы. Теперь надо это делать из VB6 или VBA, однако, вне Access.
Не знаю куда податься, поэтому пока пишу тут.
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877670
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelAkina,

Прошло много времени, а проблема так и осталась - так никто не сказал как на vba прилинковать таблицу.

Используя ADO вне Access, например из Excel, или Word.сказали тут - 21032511 п.3

Пример отсюда - http://hiprog.com/index.php?option=com_content&task=view&id=251661555&Itemid=35
Код: vbnet
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.
Public Sub ADOXCreateLinkTable(strFileName As String, _
                                strTblName As String, _
                                Optional strLinkTblName As String = "")
'создание связанной таблицы MS ACCESS
'strFileName - путь к БД ACCESS, в которой находится таблица
'strTblName - имя таблицы в исходной БД
'strLinkTblName - имя, под которым будет создана связанная таблица
'если strLinkTblName опущено, то создается таблица с именем strFileName
Dim adoxCat As ADOX.Catalog
Dim adoxTbl As New ADOX.Table
Dim strType As String
Set adoxCat = New ADOX.Catalog
'получаем ссылку на текущую БД
adoxCat.ActiveConnection = CurrentProject.Connection ' Тут нужен будет коннекшион к целевой БД Акса
If strLinkTblName = "" Then strLinkTblName = strTblName
With adoxTbl
    .ParentCatalog = adoxCat
    .Name = strLinkTblName 'имя создаваемой таблицы
    'путь к файлу
    .Properties("Jet OLEDB:Link Datasource").Value = strFileName ' Вместо этого, ODBC-коннекшион стринг к СКЛ серверу 
    'имя таблицы в исходном файле
    .Properties("Jet OLEDB:Remote Table Name").Value = strTblName
    .Properties("Jet OLEDB:Create Link").Value = True
End With
adoxCat.Tables.Append adoxTbl 'добавляем таблицу в БД
Set adoxCat = Nothing
Set adoxTbl = Nothing

End Sub
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877686
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос в тему: есть старая клиент-серверная ADP-шка, которую в связи с миграцией на офис 2013 приходится переделывать в accdb+связи с таблицами SQLсервера.
В adp-шке порядка 100 таблиц, а специфика работы приложения такова, что пользователи весь год сидят, а в последний месяц перед сдачей годового отчёта их порядка 200шт ломятся толпой в приложение, и начинают чтото править.
т.е. 100x200 = 20000 коннекций к серверу возникает в пиковые дни.

Как можно минимизировать пиковую нагрузку от присоединённых таблиц?
Просто переделанное приложение проживёт ещё год максимум, и дальше на другую платформу все переедут. Т.е. кардинально переписывать смысла не имеет. Есть какоето менее трудозатратное решение?
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877702
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,
На строке
Код: vbnet
1.
.ParentCatalog = adoxCat


91 ошибка:
Object variable or With block variable not set
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877713
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelcourt,
На строке
Код: vbnet
1.
.ParentCatalog = adoxCat



91 ошибка:
Object variable or With block variable not setты эту переменную так объявил, как в примере ?
Код: vbnet
1.
Dim adoxTbl As New ADOX.Table
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877716
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,
Пардон, ошибка в другом месте:
Код: sql
1.
.Properties("Jet OLEDB:Link Datasource").Value = "[ODBC;Driver=SQL Server;Server=server;APP=Microsoft Office;UID=UserName;PWD=абырвалг; DataBase=base_Name].[dbo].[tablename]"


Ошибка: не удаётся найти файл D:\Мои документы\[ODBC;Driver=SQL Server;Server=server;APP=Microsoft Office;UID=UserName;PWD=абырвалг; DataBase=base_Name].[dbo].[tablename]"
Что он забыл там?
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877722
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
courtBlackeAngelcourt,
На строке
Код: vbnet
1.
.ParentCatalog = adoxCat



91 ошибка:
Object variable or With block variable not setты эту переменную так объявил, как в примере ?
Код: vbnet
1.
Dim adoxTbl As New ADOX.Table


Да, всё верно, new пропустил.
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877729
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,
Всё у меня выглядит вот так
Код: vbnet
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.
Public Sub ADOXCreateLinkTable(strFileName As String, _
                                strTblName As String, _
                                Optional strLinkTblName As String = "")
'создание связанной таблицы MS ACCESS
'strFileName - путь к БД ACCESS, в которой находится таблица
'strTblName - имя таблицы в исходной БД
'strLinkTblName - имя, под которым будет создана связанная таблица
'если strLinkTblName опущено, то создается таблица с именем strFileName
Dim adoxCat As ADOX.Catalog
Dim adoxTbl As New ADOX.Table
Dim strType As String
Set adoxCat = New ADOX.Catalog
'получаем ссылку на текущую БД
adoxCat.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Sourse='D:\Desktop\base_test.mdb"
If strLinkTblName = "" Then strLinkTblName = strTblName
With adoxTbl
    .ParentCatalog = adoxCat
    .Name = "155555"'имя создаваемой таблицы
    .Properties("Jet OLEDB:Link Datasource").Value = "[ODBC;Driver=SQL Server;Server=server;APP=Microsoft Office;UID=UserName;PWD=абырвалг; DataBase=base_Name].[dbo].[tablename]"
    .Properties("Jet OLEDB:Remote Table Name").Value = "155555"
    .Properties("Jet OLEDB:Create Link").Value = True
End With
adoxCat.Tables.Append adoxTbl 'добавляем таблицу в БД
Set adoxCat = Nothing
Set adoxTbl = Nothing

End Sub
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877731
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelcourt,
Пардон, ошибка в другом месте:
Код: sql
1.
.Properties("Jet OLEDB:Link Datasource").Value = "[ODBC;Driver=SQL Server;Server=server;APP=Microsoft Office;UID=UserName;PWD=абырвалг; DataBase=base_Name].[dbo].[tablename]"



Ошибка: не удаётся найти файл D:\Мои документы\[ODBC;Driver=SQL Server;Server=server;APP=Microsoft Office;UID=UserName;PWD=абырвалг; DataBase=base_Name].[dbo].[tablename]"
Что он забыл там?
так, имхо
Код: vbnet
1.
.Properties("Jet OLEDB:Link Datasource").Value = "ODBC;Driver=SQL Server;Server=server;APP=Microsoft Office;UID=UserName;PWD=абырвалг; DataBase=base_Name"
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877733
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
courtBlackeAngelcourt,
Пардон, ошибка в другом месте:
Код: sql
1.
.Properties("Jet OLEDB:Link Datasource").Value = "[ODBC;Driver=SQL Server;Server=server;APP=Microsoft Office;UID=UserName;PWD=абырвалг; DataBase=base_Name].[dbo].[tablename]"



Ошибка: не удаётся найти файл D:\Мои документы\[ODBC;Driver=SQL Server;Server=server;APP=Microsoft Office;UID=UserName;PWD=абырвалг; DataBase=base_Name].[dbo].[tablename]"
Что он забыл там?
так, имхо
Код: vbnet
1.
.Properties("Jet OLEDB:Link Datasource").Value = "ODBC;Driver=SQL Server;Server=server;APP=Microsoft Office;UID=UserName;PWD=абырвалг; DataBase=base_Name"


По-прежнему та же ошибка. Почему он вначале добавляет мои документы?
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877738
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelcourtпропущено...

так, имхо
Код: vbnet
1.
.Properties("Jet OLEDB:Link Datasource").Value = "ODBC;Driver=SQL Server;Server=server;APP=Microsoft Office;UID=UserName;PWD=абырвалг; DataBase=base_Name"



По-прежнему та же ошибка. Почему он вначале добавляет мои документы?

измени имя свойства с "Jet OLEDB:Link Datasource" на "Jet OLEDB:Link Provider String"
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877740
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
courtBlackeAngelпропущено...

По-прежнему та же ошибка. Почему он вначале добавляет мои документы?

измени имя свойства с "Jet OLEDB:Link Datasource" на "Jet OLEDB:Link Provider String"да, правильно, не та "пропертя" была

навсякий:
https://www.tek-tips.com/viewthread.cfm?qid=1081913
Код: vbnet
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.
33.
34.
Public Function SQLServerLinkedTable()
Dim oCat As ADOX.Catalog
Dim oTable As ADOX.Table
Dim sConnString As String

' Set SQL Server connection string used in linked table.
sConnString = "ODBC;" & _
               "Driver={SQL Server};" & _
               "Server={bigtuna};" & _
               "Database=pubs;" & _
               "Uid=sa;" & _
               "Pwd=;"

' Create and open an ADOX connection to Access database
Set oCat = New ADOX.Catalog
oCat.ActiveConnection = CurrentProject.Connection

' Create a new Table object
Set oTable = New ADOX.Table

With oTable
    .Name = "authors"
    Set .ParentCatalog = oCat
    .Properties("Jet OLEDB:Create Link") = True
    .Properties("Jet OLEDB:Remote Table Name") = "authors"
    .Properties("Jet OLEDB:Link Provider String") = sConnString
End With

' Add Table object to database
oCat.Tables.Append oTable
oCat.Tables.Refresh
Set oCat = Nothing

End Function
...
Рейтинг: 0 / 0
Прилинковать таблицу с сервера SQL макросом
    #39877743
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
courtcourtпропущено...


измени имя свойства с "Jet OLEDB:Link Datasource" на "Jet OLEDB:Link Provider String"да, правильно, не та "пропертя" была

навсякий:
https://www.tek-tips.com/viewthread.cfm?qid=1081913
Код: vbnet
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.
33.
34.
Public Function SQLServerLinkedTable()
Dim oCat As ADOX.Catalog
Dim oTable As ADOX.Table
Dim sConnString As String

' Set SQL Server connection string used in linked table.
sConnString = "ODBC;" & _
               "Driver={SQL Server};" & _
               "Server={bigtuna};" & _
               "Database=pubs;" & _
               "Uid=sa;" & _
               "Pwd=;"

' Create and open an ADOX connection to Access database
Set oCat = New ADOX.Catalog
oCat.ActiveConnection = CurrentProject.Connection

' Create a new Table object
Set oTable = New ADOX.Table

With oTable
    .Name = "authors"
    Set .ParentCatalog = oCat
    .Properties("Jet OLEDB:Create Link") = True
    .Properties("Jet OLEDB:Remote Table Name") = "authors"
    .Properties("Jet OLEDB:Link Provider String") = sConnString
End With

' Add Table object to database
oCat.Tables.Append oTable
oCat.Tables.Refresh
Set oCat = Nothing

End Function


Завелось. Ура, спасибо.
Теперь последний штрих - как сделать что б прилинкованная таблица не запрашивала пароль? То есть сделать с сохранением юзера и пароля.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Прилинковать таблицу с сервера SQL макросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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