Анимация
JavaScript


Главная  Библионтека 

0 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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 [ 100 ] 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

Transfer Содержит информацию для пересылки данных и объектов из БД источника (объект Database) в другую БД, расположенную на внешнем сервере.

Trigger Триггер для указанной таблицы. Позволяет

получить информацию о хранящихся триггерах или создать новый с помощью метода Script. Тип триггера определяется свойством Type.

User Содержит информацию о пользователе БД.

Каждый пользователь ассоциируется с одной регистрацией пользователя для работы с БД.

User-Defined- Определяет пользовательский тип данных. Datatype

View Представление, хранящееся в БД. В свойстве Text

хранится команда SELECT Transact-SQL для выполнения запроса. Данные в представлении не могут редактироваться.

На вершине иерархии объектов DMO находится объект Application, который обеспечивает нас методами и свойствами для управления средой приложения.

Важной особенностью использования объектов SQL-DMO является наличие наряду с самими объектами, их коллекций. За счет этого работа с объектами в Visual Basic существенно упрощается. Коллекция включает группу объектов одного типа. Имя коллекции образуется как множественное число от имени объекта. К коллекции можно обратиться из объекта, являющегося родительским в иерархии. Если объект не имеет коллекции, то используется коллекция Properties, которая имеет по одному объекту Property для каждого свойства. С ее помощью можно легко установить имена и значения всех свойств объекта, не зная их заранее. Например:

For Each oProperty in oSQLServer.Properties

Debug.Print oProperty.Name & " = " oProperty.Value

Next

В Visual FoxPro возможность использования таких языковых конструкций появится только в следующей версии. При использовании версии 3.0 работы немного прибавится. Например, для получения всех имен БД, имеющихся на сервере, в Visual Basic достаточно такого фрагмента кода:

For Each oDatabase in oSQLServer.Databases Debug.Print oDatabase.Name

Next

В Visual FoxPro код будет чуть длиннее: nDBNum = oSQLServer.Databases.Count FOR nItem = 1 TO nDBNum

? oSQLServer.oDatabases(nItem).Name

NEXT

Для добавления нового объекта в коллекцию используется метод Add. Для удаления объекта из коллекции - метод Remove.

По сравнению с другими рассмотренными ранее объектными моделями, модель объектов SQL-DMO имеет особый тип коллекции, - список (list), доступный только для чтения. Возможности получения списков весьма широки и охватывают почти все объекты DMO, но необходимо учитывать, что в списке вы получите данные, фиксирующие текущее состояние системы и никак не изменяющиеся при дальнейших действиях.

Для того чтобы начать работу с SQL сервером посредством DMO, если вы используете Access или Visual Basic, необходимо создать объект SQLServer:

Global MyServer As New SQLOLE.SQLServer

Если вы используете Visual FoxPro, то необходимо воспользоваться функцией CREATEOBJECT():

oMyServer = CREATEOBJECT("SQLOLE.SQLServer")



В данный момент этот объект представляет собой абстрактную ссылку. Для придания ему конкретности необходимо подсоединиться к существующему серверу, естественно, если вам как пользователю даны права или вы знаете пароль администратора.

Вы можете сделать это, использовав метод Connect объекта SQLServer, например, следующим образом:

oMyServer.Connect(Servername:="Autoserver", Login="Me",Password="You")

Можно пойти более сложным путем, но при этом вы будете знать причину возникновения возможной ошибки. Используйте следующую или подобную ей функцию:

Function SQLLogin(strServerName As String, strUID As String, strPWD As String) As Boolean

Подключение к указанному SQL серверу, используя

предложенный идентификатор пользователя и пароль.

Устанавливает глобальный объект типа SQLServer

Возвращает истину при удачном завершении,

в противном случае - ложь.

On Error GoTo SQLLoginErr

Const erSQLAlreadyLoggedIn = -2147211004

SQLLogin = True

DoCmd.Hourglass True

mySQLServer.Connect strServerName, strUID, strPWD SQLLoginExit:

DoCmd.Hourglass False

Exit Function

SQLLoginErr:

Select Case Err.Number

Case erSQLAlreadyLoggedIn SQLLogin = True Resume Next

Case Else

MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, "SQLLogin()" End Select SQLLogin = False Resume SQLLoginExit End Function

В простейших случаях можно безболезненно пользоваться первой конструкцией. Необходимо помнить, что после завершения работы программы с использованием SQL-DMO вам обязательно надо отсоединиться от сервера. Для этого используйте метод Disconnect объекта SQLServer:

oMySqlServer. Disconnect

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

Если нужно создать новую базу данных, которая будет располагаться на конкретном устройстве, то можно это сделать примерно так, как это сделано в следующем примере:

Function SQLMakeNewDatabase(strName As String, strDeviceName As String, lngSize As Long) Создаем новую БД на текущем SQL Server On Error GoTo SQLMakeNewDatabaseErr SQLMakeNewDatabase = True Dim objNewDatabase As New SQLOLE. Database If Not gobjSQLServer Is Nothing Then DoCmd.Hourglass True With objNewDatabase .Name = strName End With

БД будет располагаться на устройстве по умолчанию

gobjSQLServer.Databases.Add objNewDatabase



Глава 9

Увеличиваем размер указанного устройства With objNewDatabase

.ExtendOnDevices (strDeviceName & "=" & CStr(lngSize)) .Shrink (lngSize)

End With

Else

SQLMakeNewDatabase = False End If

SQLMakeNewDatabaseExit:

DoCmd.Hourglass False

Exit Function SQLMakeNewDatabaseErr:

MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, "SQLMakeNewDatabase()"

SQLMakeNewDatabase = False

Resume SQLMakeNewDatabaseExit End Function

Следующий фрагмент кода показывает, как можно добавить новую колонку во все существующие таблицы.

Dim oTable As Table

Dim oCol As Column

Set db = ss.Databases("pubs")

For Each oTable In db.Tables

Выполняем для каждой таблицы в коллекции

Set oCol = New Column

oCol.AllowNulls = True

oCol.Datatype = "varchar"

oCol.Length = 30

oCol.Name = "NewCol"

oTable.BeginAlter Начинаем процесс изменения oTable.InsertColumn oCol, "" oTable.DoAlter Завершаем процесс изменения Next oTable

Вероятно, вы заметили, что перед добавлением колонки мы применяем метод BeginAlter, а для выполнения всех изменений необходимо воспользоваться методом DoAlter. При этом на сервере реально будут совершены все действия, записанные после применения метода BeginAlter. Этот процесс напоминает транзакции и должен использоваться при выполнении действий со следующими объектами:

• Alert

• AlertSystem

• Article

• Executive

• Operator

• Publication

• RemoteServer

• SubscriberInfo

• Subscription

• Table

• Task

Это условие вызвано тем, что при выполнении любых действий с перечисленными объектами должны приниматься повышенные меры безопасности, и, в частности, должна быть возможна безболезненная отмена этих действий. Для других объектов изменение значений свойств и выполнение каких-либо методов приводят к непосредственному их обновлению.

В заключение отметим, что одно из наиболее перспективных направлений использования SQL-DMO - проведение процесса перевода настольных приложений в технологию клиент-сервер.



0 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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 [ 100 ] 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146