Доступ к данным из кода
Как вы уже знаете (из главы 7), при использовании Microsoft OLE DB Provider for ODBC с источником ODBC можно соединяться посредством предопределенного источника данных (DSN или FileDSN) или без него. Для этого необходимо использовать следующий синтаксис строки подключения: СИНТАКСИС синтаксис с DSN (или FileDSN): “[Provider=MSDASQL;] {DSN= Name | FileDSN= FileName }; [DATABASE= DatabaseName;] UID= UserName; PWD= UserPassword ” синтаксис без DSN: “[Provider=MSDASQL;] DRIVER= DriverName; SERVER= ServerName DATABASE= DatabaseName; UID= UserName; PWD= UserPassword ” Функция ADODB_ConnectedODBC листинга 22.1 предназначена для выполнения только одной задачи — подключение к ODBC-источнику. В отличие от кода листинга 7.1 здесь к строке подключения добавлены логическое имя и пароль пользователя, поскольку SQL Server более «строг» к пользователям, чем, например, Access. Листинг 22.1 Открытие ADO-соединения с использованием Microsoft OLE DB Provider for ODBC (c DSN) 1: Dim cn As ADODB.Connection 2: Dim rs As ADODB.Recordset 3: 4: Function ADODB_ConnectedODBC() As Boolean 5: ' устанавливает соединение для ODBC 6: 7: 8: On Error GoTo err_not_connection 9: 10: Set cn = New ADODB.Connection 11: cn.Provider = "MSDASQL" 12: cn.ConnectionString = "DSN=Test_SQL_Server;UID=Dmitry;PWD=Dmitry" 13: cn.Open 14: 15: ADODB_ConnectedODBC = True 16: Exit Function 17: 18: err_not_connection: 19: MsgBox Err.Description 20: ADODB_ConnectedODBC = False 21: 22: End Function 23: 24: Sub Test_ADODB_Connected() 25: ' тестирует ADODB_Connected: устанавливает соединение и 26: ' использует данные из таблицы Товары 27: 28: If ADODB_ConnectedSQL() Then 29: MsgBox "Похоже, соединение установлено..." 30: ' код, использующий установленное соединение: 31: 32: Set rs = New ADODB.Recordset 33: rs.CursorType = adOpenDynamic 34: rs.Source = "SELECT * FROM Товары" 35: Set rs.ActiveConnection = cn 36: rs.Open 37: 38: MsgBox rs.Fields(1) & " " & _ 39: rs.Fields(1).Name & " " & rs.Fields(1).Type 40: 41: cn.Close ' закрыть соединение 42: Else 43: MsgBox " Что-то не сложилось! " 44: End If 45: 46: End Sub Синтаксис строки подключения без DSN позволяет посредством этого драйвера подключиться к базе данных, находящейся, например, на SQL Server (параметр DRIVER для этого — “ SQL Server”). Код листинга 22.2 является примером использования провайдера ODBC без применения DSN. Здесь вся информация об источнике данных находится в строке подключения. Листинг 22.2 Открытие ADO-соединения с использованием Microsoft OLE DB Provider for ODBC (без DSN) 1: Dim cn As ADODB.Connection 2: Dim rs As ADODB.Recordset 3: 4: Function ADODB_ConnectedODBC2() As Boolean 5: ' устанавливает соединение для ODBC c базой данных на SQL Server 6: 7: 8: On Error GoTo err_not_connection 9: 10: Set cn = New ADODB.Connection 11: cn.Provider = "MSDASQL" 12: cn.ConnectionString = _ 13: "DRIVER=SQL Server;SERVER=NATALI;DATABASE=Фирма;" & _ 14: "UID=Dmitry;PWD=Dmitry" 15: cn.Open 16: 17: ADODB_ConnectedODBC2 = True 18: Exit Function 19: 20: err_not_connection: 21: ADODB_ConnectedODBC2 = False 22: 23: End Function 24: 25: Sub Test_ADODB_Connected() 26: ' тестирует ADODB_Connected: устанавливает соединение и 27: ' использует данные из таблицы Товары 28: 29: Dim i As Integer, j As Integer 30: 31: 32: If ADODB_ConnectedODBC2() Then 33: MsgBox "Похоже, соединение установлено..." 34: ' код, использующий установленное соединение: 35: 36: Set rs = New ADODB.Recordset 37: rs.CursorType = adOpenDynamic 38: rs.Source = "SELECT * FROM Товары" 39: Set rs.ActiveConnection = cn 40: rs.Open 41: 42: 'установить начальную строку таблицы: 43: j = 1 44: 45: 'записать заголовки полей в Excel-лист: 46: For i = 0 To rs.Fields.Count - 1 47: ActiveWorkbook.Sheets(1).Cells(j, i + 1).Value = _ 48: rs.Fields(i).Name 49: Next 50: 51: 'записать содержимое полей в Excel-лист: 52: rs.MoveFirst 53: Do While Not rs.EOF 54: j = j + 1 55: For i = 0 To rs.Fields.Count - 1 56: ActiveWorkbook.Sheets(1).Cells(j, i + 1).Value = _ 57: rs.Fields(i) 58: Next 59: rs.MoveNext 60: Loop 61: 62: 63: cn.Close ' закрыть соединение 64: Else 65: MsgBox " Что-то не сложилось! " 66: End If 67: 68: End Sub Если код листинга 22.1 может быть выполнен и из Visual Basic, и из любого VBA-приложения, то код листинга 22.2 предназначен для работы в Excel, поскольку в нем без указания приложения используются объекты Excel: здесь немного изменена процедура Test_ADODB_Connected, которая после выполнения соединения с источником данных и созданием набора передает набор в рабочий лист. Сначала (строки 46–49) в лист передаются заголовки полей, а затем (строки 53–60) — содержимое полей набора. Результат выполнения кода листинга 22.2 может быть очень похожим на представленный на рис. 22.9. Рис. 22.9 Результат выполнения кода листинга 22.2
|