назад | содержание | вперед

Совершенствование созданного компонента

Несмотря на то, что созданный компонент потенциально может осуществлять доступ и управлять отображением любой таблицы из базы данных, он имеет ограничения в применении, поскольку имя обрабатываемой таблицы, имя сервера, имя базы данных, имя пользователя и его пароль зафиксированы внутри его кода. Чтобы снять эти ограничения, добавим нашему компоненту ownNavigator пять свойств: Server, Database, User, Password, Table.

Public Property Let Server(ByVal newServer As String)

mstrServer = newServer

PropertyChanged "Server"

End Property

Public Property Get Server () As String

Server = mstrServer

End Property

Public Property Let Database(ByVal newDatabase As String)

mstrDatabase = newDatabase

PropertyChanged "Database"

End Property

Public Property Get Database () As String

Database = mstrDatabase

End Property

Public Property Let User(ByVal newUser As String)

mstrUser = newUser

PropertyChanged "User"

End Property

Public Property Get User() As String

User = mstrUser

End Property

Public Property Let Password(ByVal newPassword As String)

mstrPassword = newPassword

PropertyChanged "Password"

End Property

Public Property Get Password() As String

Password = mstrPassword

End Property

Public Property Let Table(ByVal newTable As String)

mstrTable = newTable

PropertyChanged "Table"

End Property

Public Property Get Table() As String

Table = mstrTable

End Property

Для хранения значений этих свойств объявим пять строковых переменных.

Dim rostrServer As String

Dim mstrDatabase As String

Dim mstrUser As String

Dim mstrPassword As String

Dim mstrTable As String

Чтобы значения этих свойств можно бьыо настраивать в интегрированной среде разработки Visual Basic, необходимо также описать события Readproperties и Writeproperties. Для первичной инициализации значений этих свойств воспользуемся событием initproperties.

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

Server = PropBag.ReadProperty("Server", "")

Database = PropBag.ReadProperty("Database", "")

User = PropBag.ReadProperty("User", "")

Password = PropBag.ReadProperty("Password", "")

Table = PropBag.ReadProperty("Table", "")

End Sub

Private Sub UserControl Writeproperties(PropBag As PropertyBag)

PropBag.WriteProperty "Server", Server, ""

PropBag.WriteProperty "Database", Database, ""

PropBag.WriteProperty "User", User, ""

PropBag.WriteProperty "Password", Password, ""

PropBag.WriteProperty "Table", Table, ""

End Sub

Private Sub UserControl Initproperties ()

Server = ""

Database = ""

User = ""

Password = ""

Table = ""

End Sub

Теперь надо изменить метод openRecordset следующим образом:

Public Sub OpenRecordset()

On Error.Goto err_occur

If mcnnMain Is Nothing Then

'создаем Connection

Set mcnnMain = New ADODB.Connection

'устанавливаем его параметры

mcnnMain.CursorLocation = adUseClient

mcnnMain.Provider = "SQLOLEDB.1"

mcnnMain.CommandTimeout = 300

'строка для соединения, имя пользователя, пароль

mcnnNain.Open "Data Source= " & Server & "; Initial Catalogs" & Database, User, Password

End If

If mrstMain Is Nothing Then

'создаем Recordset

Set mrstMain = New ADODB.Recordset

'открываем Recordset

mrstMain.Open Table, mcnnMain, adOpenKeyset, adLockOptimistic, adCmdTable

If Not (mrstMain.BOF And mrstMain.EOF) Then mrstMain.MoveFirst

End If

Exit Sub

err_occur:

MsgBox "Ошибка при открытии базы данных."

End Sub

Здесь вместо фиксированных значений параметров открытия используются значения соответствующих свойств. Помимо этого добавлена обработка ошибок, которые могут возникать при открытии с неверными параметрами.

Теперь вы можете использовать компонент ownNavigator для доступа к любым таблицам выбранной вами базы данных.

 

назад | содержание | вперед