Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Прилинковать таблицу с сервера SQL макросом / 25 сообщений из 26, страница 1 из 2
13.12.2017, 20:32
    #39569254
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
Как это сделать макросом? Руками знаю как, а вот макросом что то незнай как.
...
Рейтинг: 0 / 0
13.12.2017, 22:24
    #39569285
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
Для тех кто хочет помочь, но не понял что написано:
Как вот эту статью https://support.office.com/ru-ru/article/Импорт-данных-из-базы-данных-SQL-Server-или-связывание-с-ними-a5a3b4eb-57b9-45a0-b732-77bc6089b84e#ID0EABAAA=2010 сделать макромом на vba?
...
Рейтинг: 0 / 0
13.12.2017, 23:20
    #39569298
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
Так макросом или на VBA?
Научись уже однозначно формулировать, не в детском саду...
...
Рейтинг: 0 / 0
14.12.2017, 07:11
    #39569360
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
Akina,ну как бы макросы пишутся на vba...
...
Рейтинг: 0 / 0
14.12.2017, 07:43
    #39569368
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
BlackeAngel , на VBA пишут модули. А макросы - это макросы, для них даже вкладка одноимённая существует. Это не Эксель, где какой-то идиот модули решил называть макросами по причине отсутствия последних.
...
Рейтинг: 0 / 0
14.12.2017, 07:46
    #39569370
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
Akina, гм.. не знал, что именно все так плохо. Тогда модуль на vba.
...
Рейтинг: 0 / 0
14.12.2017, 07:51
    #39569371
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
Вариант 1 (простой): через DoCmd.TransferDatabase с TransferType:=acLink.
Вариант 2 (посложнее): через DAO.database.CreateTableDef с присвоением соотв. .Connect и .SourceTableName.
Вариант 3: аналогично варианту 2, но через ADOX.
...
Рейтинг: 0 / 0
14.12.2017, 08:20
    #39569380
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
Akina, первый вариант рассмотрим?
...
Рейтинг: 0 / 0
14.12.2017, 08:30
    #39569384
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
Да пжалста... сделай требуемое сперва именно макросом - там для каждого поля можно справку вызвать да почитать. А потом перенесёшь всё это в чистый VBA.
...
Рейтинг: 0 / 0
15.12.2017, 23:04
    #39570598
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
Линковать не стал, просто супер данные с серваке, как написано тут http://www.vb-helper.com/howto_ado_import_sql_server.html
...
Рейтинг: 0 / 0
20.12.2017, 19:25
    #39573013
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
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
Период между сообщениями больше года.
17.10.2019, 13:13
    #39877657
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
Akina,

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

Используя ADO вне Access, например из Excel, или Word.
...
Рейтинг: 0 / 0
17.10.2019, 13:16
    #39877664
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
Сергей Лалов,
Вы правы, что не стал делать линковку(связывание) таблицы. Тогда надо было на скорую руку. Теперь это стало тормозом. В Access сделав руками связанную таблицу, работа ускорилась в разы. Теперь надо это делать из VB6 или VBA, однако, вне Access.
Не знаю куда податься, поэтому пока пишу тут.
...
Рейтинг: 0 / 0
17.10.2019, 13:27
    #39877670
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
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
17.10.2019, 13:53
    #39877686
ldfanate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
вопрос в тему: есть старая клиент-серверная ADP-шка, которую в связи с миграцией на офис 2013 приходится переделывать в accdb+связи с таблицами SQLсервера.
В adp-шке порядка 100 таблиц, а специфика работы приложения такова, что пользователи весь год сидят, а в последний месяц перед сдачей годового отчёта их порядка 200шт ломятся толпой в приложение, и начинают чтото править.
т.е. 100x200 = 20000 коннекций к серверу возникает в пиковые дни.

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


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



91 ошибка:
Object variable or With block variable not setты эту переменную так объявил, как в примере ?
Код: vbnet
1.
Dim adoxTbl As New ADOX.Table
...
Рейтинг: 0 / 0
17.10.2019, 14:22
    #39877716
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
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
17.10.2019, 14:35
    #39877722
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
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
17.10.2019, 14:42
    #39877729
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
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
17.10.2019, 14:43
    #39877731
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
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
17.10.2019, 14:46
    #39877733
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
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
17.10.2019, 14:52
    #39877738
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
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
17.10.2019, 14:55
    #39877740
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
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
17.10.2019, 15:00
    #39877743
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прилинковать таблицу с сервера SQL макросом
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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Прилинковать таблицу с сервера SQL макросом / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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