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

Подключение базы Access к SQL Server

29.07.2016, 12:31. Показов 16326. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет...
Искал в интернете, и не смог найти как правильно подключить Access к SQL Server...
Много примеров как подключится к самому файлу Access...
Мне нужно получить данные с SQL Server в базу Access по средствам VBA

Можете показать как это сделать или направить где это можно почитать?

Заранее благодарю!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2016, 12:31
Ответы с готовыми решениями:

Перенос базы Access в SQL Server
начало здесь https://www.cyberforum.ru/ms-access/thread87179-page2.html Сергей1980, ты как я...

Перенос базы из Access в Microsoft SQL Server 2005
Помогите перенести бд из ацесс а в SQL Server гуглил устанавливал проги для переноса выдавало...

Посоветуйте! Создание Базы Access - SQL-server - ERP- "Компас"
Доброго времени суток, дорогие Форумчане! Нуждаюсь в Вашей помощи и советах! Ранее я имела...

Подключение к SQL Server из VBA
Продолжаю эксперименты с SQL Server Для подключения к присоединённым таблицам используется файл...

13
39 / 39 / 11
Регистрация: 24.07.2016
Сообщений: 87
29.07.2016, 20:00 2
У меня получалось так (ADO):
Visual Basic
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
35
36
37
38
39
40
41
42
Private Sub TableConnect()
Dim sTableNameLocal As String
Dim sTableNameSRS As String
Dim sServerName As String
Dim sDBName As String
Dim userName As String
Dim userPW As String
Dim x As Long
 
'Задаём параметры подключения
'es - 25.12.2012
'--------------------------------------------------------------------
On Error GoTo TableConnect_Err
    sServerName = "192.168.0.1\SQLExpress"      ' IP и Имя сервера
'Или:
'   sServerName = "192.168.0.1\MSSQLSERVER"     ' IP и Имя сервера
    sDBName = "DB_Name"                         ' Имя базы данных
    
    userName = "DBUserName"                     ' Имя пользователя
    userPW = "12345678"                         ' Пароль
        
    sTableNameLocal = "Loc_TableName"           ' Локальное имя Таблицы  в тек БД
    sTableNameSRS = "Srs_TableName"             ' Имя Таблицы на Сервере (Исходное)
        
        
'Подключаем таблицу:
    x = esLinkTableADOX(sTableNameLocal, sTableNameSRS, sServerName, sDBName, userName, userPW)
    'тест
    If x > 0 Then MsgBox "Таблица: " & sTableNameSRS & " не подключена !!!!", vbCritical, "Ошибка подключения"
 
'Обновляем список таблиц
    CurrentDb.TableDefs.Refresh
    DoEvents
 
TableConnect_Bye:
    Exit Sub
 
TableConnect_Err:
    MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in procedure TableConnect", vbCritical, "Error!"
    Resume TableConnect_Bye
End Sub
Функция подключения:

Visual Basic
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Public Function esLinkTableADOX(sLocalTName As String, stRemTName As String, sServName As String, _
        sDbName As String, Optional sUserName As String, Optional sPassWord As String) As Long
 
'es 30.06.2011
'Подключение к таблице SQL Server с автоматическим созданием DSN (ADOX)
'При удачном подключениии возвращает = 0 (ноль), при неудачном = КОД ОШИБКИ (номер)
'-------------------------------------------------------------------------
'Требования:
'   Сссылка в References на "Microsoft ADO Ext. x.x for DDL and Security" (v 2.8 = работало)
'-------------------------------------------------------------------------
'Аргументы:
'   sLocalTName = Локальное Имя Таблицы
'   stRemTName  = Имя таблицы на сервере
'   sServName   = Имя сервера MS SQL
'   sDbName     = Имя базы данных SQL Server
'   sUserName   = Имя пользователя (Опционально)
'   sPassWord   = Пароль пользователя (Опционально)
'-------------------------------------------------------------------------
Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table
Dim strConnect As String
    
'Формируем строку подключения
    If Len(sUserName) = 0 Then
        ' Если sUserName не указано, использовать доверенную проверку подлинности.
        strConnect = "ODBC;DRIVER=SQL Server;SERVER=" & sServName & ";DATABASE=" & sDbName & ";Trusted_Connection=Yes"
    Else
        '!!! ПРЕДУПРЕЖДЕНИЕ: Вместе с информацией о связанной таблице сохраняется имя пользователя и его пароль.
        strConnect = "ODBC;DRIVER=SQL Server;SERVER=" & sServName & ";DATABASE=" & sDbName & ";UID=" & sUserName & ";PWD=" & sPassWord
    End If
    
'Открываем каталог текущей базы
    Set cat.ActiveConnection = CurrentProject.Connection
    
'Если таблица с таким названием уже существует - Удаляем
    For Each tbl In cat.Tables
        If tbl.Name = sLocalTName Then cat.Tables.Delete tbl.Name
    Next
 
'Для наглядности
'    Debug.Print "Без таблицы " & sLocalTName & " - таблиц в базе = " & cat.Tables.Count
    
'Установка параметров таблицы
    With tbl
        .Name = sLocalTName
        Set .ParentCatalog = cat
        .Properties("Jet OLEDB:Link Provider String") = strConnect
        .Properties("Jet OLEDB:Remote Table Name") = stRemTName
        .Properties("Jet OLEDB:Create Link") = True
    End With
    
'Создаём новый обьект
    cat.Tables.Append tbl
 
'Обновляем список таблиц
    cat.Tables.Refresh
    DoEvents
 
'Для наглядности
'    Debug.Print "После создания таблицы " & sLocalTName & " - таблиц в базе = " & cat.Tables.Count
 
esLinkTableADOXBye:
    Set cat = Nothing
    Set tbl = Nothing
    Exit Function
 
esLinkTableADOXErr:
    esLinkTableADOX = Err.Number
    Debug.Print "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
            "in Function: esLinkTableADOX"
    Resume esLinkTableADOXBye
End Function
Achtung!!!
Требуется ссылка на библиотеку: Microsoft ADO Ext. x.x for DDL and Security

... а по DAO - пока не доводилось писать.
0
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203
29.07.2016, 21:25  [ТС] 3
Santares,
Я и хотел по DAO подключатся...

Я правильно понимаю? Здесь можно и IP использовать или вместо IP Имя базы?
Visual Basic
1
2
3
4
  sServerName = "192.168.0.1\SQLExpress"      ' IP и Имя сервера
'Или:
'   sServerName = "192.168.0.1\MSSQLSERVER"     ' IP и Имя сервера
    sDBName = "DB_Name"                         ' Имя базы данных
Добавлено через 8 минут
Santares,
Вы мне очень хороший вариант дали в теме Обновление данных с другой таблицы по условию Access
И вот как раз данные он должен брать с Сервера...SQL Server....Я создал связь через ODBC все работает...но дома я только экспериментирую...так где будет использоваться сама база, нужно выгружать данные именно средствами VBA...
1
39 / 39 / 11
Регистрация: 24.07.2016
Сообщений: 87
29.07.2016, 21:36 4
IP использовалось вместо имени сервера, тут локальный (192.168.0.1) только для примера.
Имя базы тут так: sDBName = "Имя Базы" ...
Google выдаёт много по "access vba connect to sql server dao"
Нашлось например: https://www.youtube.com/watch?v=soSKpnM4wcg
Успехов!
1
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203
29.07.2016, 21:57  [ТС] 5
Я понял...спасибо большое!
0
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203
31.07.2016, 23:16  [ТС] 6
Вот код как подключится! Причем два
Visual Basic
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
Public Sub ADOTest()
   Dim ADOConn As New ADODB.Connection
   Dim ADORec As New ADODB.Recordset
   
'   On Error Resume Next
   ADOConn.ConnectionString = "Driver={SQL Server};Server=ServerName;Database=master;Uid=Log;Pwd=pass;"
   ADOConn.Open
   
   Do While ADOConn.State <> 1
       DoEvents
       If ADOConn.State = 0 Then Exit Sub
   Loop
  
  Set ADORec.ActiveConnection = ADOConn
  ADORec.LockType = adLockOptimistic
  ADORec.Source = "SELECT * FROM Table_Name"
  ADORec.Open
  
  If Not ADORec.EOF Then ADORec.MoveFirst
  Do Until ADORec.EOF
       Debug.Print ADORec("BAR_CODE")
       ADORec.MoveNext
  Loop
  ADORec.Close
End Sub
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub runQuery()
   Dim db As DAO.Database
   Dim rs As DAO.Recordset
   Dim conn As String
   
   conn = "Driver={SQL Server Native Client 11.0};Server=ServerName;Database=master;Uid=Log;Pwd=pass;"
   
   Set db = OpenDatabase("", False, False, conn)
   Set rs = db.OpenRecordset("Table_Name", dbOpenDynaset, dbSeeChanges)
   
   If Not rs.EOF Then rs.MoveFirst
   Do Until rs.EOF
     Debug.Print rs!BAR_CODE
     
     rs.MoveNext
   Loop
   
End Sub
0
39 / 39 / 11
Регистрация: 24.07.2016
Сообщений: 87
31.07.2016, 23:25 7
Извиняйте, но хочу подтверждения.
по DAO - проверяли?
У меня нет щас MS SQL SERVER под рукой - код точно работает?
1
Эксперт MS Access
7398 / 4535 / 295
Регистрация: 12.08.2011
Сообщений: 14,030
02.08.2016, 03:01 8
Цитата Сообщение от nikolaynn1984 Посмотреть сообщение
Искал в интернете, и не смог найти как правильно подключить Access к SQL Server...
С помощью ODBC
0
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
02.08.2016, 04:37 9
Цитата Сообщение от nikolaynn1984 Посмотреть сообщение
Искал в интернете, и не смог найти как правильно подключить Access к SQL Server...
нашел целых 3 способа подключиться
1. Через код
2. через постоянный link таблиц
3. через постоянный link запросов

может еще чего есть (там говорят через agp вроде - не знаю)
0
Эксперт MS Access
7398 / 4535 / 295
Регистрация: 12.08.2011
Сообщений: 14,030
02.08.2016, 15:41 10
AGP уже не производят давно, PCI-Express в моде
0
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203
04.08.2016, 13:02  [ТС] 11
Подключиться у меня получилось...


Можно просто загрузить таблицу в форму с сервера при помощи ниже указанного кода...Все работает
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub fillSubForm()
 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 Таблица.CODE, Таблица.Articl, Таблица.CAPTION, Таблица.FACING, Таблица.PRICE, Таблица.STATUS " _
       & "FROM Таблица;"
       
 Set rs = db.OpenRecordset(SQL, dbOpenDynaset, dbReadOnly)
 Set Me.Form.Recordset = rs
 Me.Form.Recordset.Requery
End Sub
Добавлено через 1 минуту
Сейчас другая проблема...
У меня есть таблицы в Access...и есть таблица на SQL Server

как из их связать при помощи VBA?

Добавлено через 12 минут
Santares, Код работает точно!!!
0
Эксперт MS Access
7398 / 4535 / 295
Регистрация: 12.08.2011
Сообщений: 14,030
05.08.2016, 02:10 12
Цитата Сообщение от nikolaynn1984 Посмотреть сообщение
как из их связать при помощи VBA?
Цитата Сообщение от alvk Посмотреть сообщение
С помощью ODBC
.......
0
279 / 10 / 0
Регистрация: 27.04.2016
Сообщений: 203
05.08.2016, 09:48  [ТС] 13
alvk, ODBC Я так понимаю это связывать через Внешние данные!?
Такой способ в моем случае не подходит...
По этому и замарачиваюсь с VB...
Если не правильно понял...то подскажи как именно..
0
Эксперт MS Access
7398 / 4535 / 295
Регистрация: 12.08.2011
Сообщений: 14,030
08.08.2016, 02:40 14
Цитата Сообщение от nikolaynn1984 Посмотреть сообщение
Такой способ в моем случае не подходит..
чё это?

А что такое "внешние данные"?
0
08.08.2016, 02:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2016, 02:40
Помогаю со студенческими работами здесь

2-е одинаковые базы в SQL Server и Oracle
Здравствуйте. Кто знает, помогите, пожалуйста. У меня на работе есть 2-е программы (Для удобства...

Ms Access + MS SQL Server
Кто работал в такой связке, подскажите пожалуйста. Если я в Access делаю связные таблицы к SQL...

ACCESS <-> MS SQL Server
Помогите, как засадить данные в ComboBox на форме в ACCESS из таблицы в MS SQL Server 2000 ? Связь...

Access & SQL Server
Ni razu ne delal, wot teper' prihoditsja... Nushno podkljuchit', k Access, bazu dannih...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru