Использование Microsoft OLE Provider for SQL Server для доступа к данным на SQL Server
В главе «Введение в технологию ADO» рассматривается также использование Microsoft OLE Provider for SQL Server для доступа к данным на SQL Server. Чтобы соединиться с SQL Server посредством этого провайдера, необходимо аргументу Provider свойства ConnectionString объекта ADODB.Connection присвоить значение: SQLOLEDB Строка подключения для этого провайдера обычно имеет следующий вид: “Provider=SQLOLEDB; Data Source= ServerName; Initial Catalog= DatabaseName; User ID= UserName; PWD= UserPassword ” В листинге 22.3 представлен код для подключения к SQL Server. Строка подключения присваивается свойству ConnectionString объектной переменной cn в строках кода 12–13. Листинг 22.3 Открытие ADO-соединения с использованием Microsoft OLE Provider for SQL Server 1: Dim cn As ADODB.Connection 2: Dim rs As ADODB.Recordset 3: 4: Function ADODB_ConnectedSQL() As Boolean 5: ' устанавливает соединение для SQL Server 6: 7: 8: On Error GoTo err_not_connection 9: 10: Set cn = New ADODB.Connection 11: cn.Provider = "SQLOLEDB" 12: cn.ConnectionString = _ 13: "DATABASE=Фирма;SERVER=NATALI;UID=Dmitry;PWD=Dmitry" 14: cn.Open 15: 16: ADODB_ConnectedSQL = True 17: Exit Function 18: 19: err_not_connection: 20: ADODB_ConnectedSQL = False 21: 22: End Function 23: 24: Sub Test_ADODB_Connected() 25: ' тестирует ADODB_Connected: устанавливает соединение и 26: ' использует данные из представления Запасы_VIEW 27: 28: Dim i As Integer, j As Integer 29: 30: 31: If ADODB_ConnectedSQL() Then 32: MsgBox "Похоже, соединение установлено..." 33: ' код, использующий установленное соединение: 34: 35: Set rs = New ADODB.Recordset 36: rs.CursorType = adOpenDynamic 37: rs.Source = "Запасы_VIEW" ‘запрос с использованием представления 38: Set rs.ActiveConnection = cn 39: rs.Open 40: 41: 'установить начальную строку таблицы: 42: j = 1 43: 44: 'записать заголовки полей в Excel-лист: 45: For i = 0 To rs.Fields.Count - 1 46: ActiveWorkbook.Sheets(1).Cells(j, i + 1).Value = _ 47: rs.Fields(i).Name 48: Next 49: 50: 'записать содержимое полей в Excel-лист: 51: rs.MoveFirst 52: Do While Not rs.EOF 53: j = j + 1 54: For i = 0 To rs.Fields.Count - 1 55: ActiveWorkbook.Sheets(1).Cells(j, i + 1).Value = _ 56: rs.Fields(i) 57: Next 58: rs.MoveNext 59: Loop 60: 61: 62: cn.Close ' закрыть соединение 63: Else 64: MsgBox " Что-то не получается с подключением! " 65: End If 66: 67: End Sub В листинге 22.3 снова немного изменена процедура Test_ADODB_Connected: теперь для доступа к данным SQL Server используется представление Запасы_VIEW (см. главу 7). Результат выполнения этого кода представлен на рис. 22.10. Рис. 22.10 Результат выполнения кода листинга 22.3 В листинге 22.4 в процедуре Test_ADODB_Connected для доступа к данным SQL Server используется хранимая процедура ИнвВедомость (см. главу 7) с параметром ‘1506’. Результат выполнения этого кода представлен на рис. 22.11. Листинг 22.4 Открытие ADO-соединения с использованием Microsoft OLE Provider for SQL Server 1: Dim cn As ADODB.Connection 2: Dim rs As ADODB.Recordset 3: 4: Function ADODB_ConnectedSQL() As Boolean 5: ' устанавливает соединение для SQL Server 6: 7: 8: On Error GoTo err_not_connection 9: 10: Set cn = New ADODB.Connection 11: cn.Provider = "SQLOLEDB" 12: cn.ConnectionString = _ 13: "DATABASE=Фирма;SERVER=NATALI;UID=Dmitry;PWD=Dmitry" 14: cn.Open 15: 16: ADODB_ConnectedSQL = True 17: Exit Function 18: 19: err_not_connection: 20: ADODB_ConnectedSQL = False 21: 22: End Function 23: 24: Sub Test_ADODB_Connected() 25: ' тестирует ADODB_Connected: устанавливает соединение и 26: ' использует хранимую процедуру ИнвВедомость 27: 28: Dim i As Integer, j As Integer 29: 30: 31: If ADODB_ConnectedSQL() Then 32: MsgBox "Похоже, соединение установлено..." 33: ' код, использующий установленное соединение: 34: 35: Set rs = New ADODB.Recordset 36: rs.CursorType = adOpenDynamic 37: rs.Source = "EXEC ИнвВедомость @Kod='1506'" 38: Set rs.ActiveConnection = cn 39: rs.Open 40: 41: 'установить начальную строку таблицы: 42: j = 1 43: 44: 'записать заголовки полей в Excel-лист: 45: For i = 0 To rs.Fields.Count - 1 46: ActiveWorkbook.Sheets(1).Cells(j, i + 1).Value = _ 47: rs.Fields(i).Name 48: Next 49: 50: 'записать содержимое полей в Excel-лист: 51: rs.MoveFirst 52: Do While Not rs.EOF 53: j = j + 1 54: For i = 0 To rs.Fields.Count - 1 55: ActiveWorkbook.Sheets(1).Cells(j, i + 1).Value = _ 56: rs.Fields(i) 57: Next 58: rs.MoveNext 59: Loop 60: 61: 62: cn.Close ' закрыть соединение 63: Else 64: MsgBox "Что-то не получается подключиться к базе данных!" 65: End If 66: 67: End Sub Рис. 22.11 Результат выполнения кода листинга 22.4 Следует отметить, что, как обычно, формировать строку подключения можно с использованием данных в диалоговых окнах. Функцию ADODB_ConnectedSQL можно использовать и для подключения к SQL Server из Access. В главе «Введение в технологию ADO» приведен пример подключения из Access к внешнему mdb-файлу. Если в качестве функции подключения к базе данных использовать функцию ADODB_ConnectedSQL, то в диалоговой форме, показанной на рис. 7.10, можно было бы отобразить информацию, хранимую на SQL Server.
|