实例
在本系列文章的上篇刊文中,我们介绍了RDO的发展、优势、对象模块、趋势,以及通过RDO与SQL Server的连接和断开等内容,本期将通过实例来介绍RDO的应用。
OpenConnection方法的调用方式如下:
[调用方式:OpenConnection(dsName, Prompt, ReadOnly, Connect)]
其中参数说明如下:
dsName,指定登录在系统中的DSN条目。当用Connect参数指定DSN值时,dsName必须为“”(长度为0的文字列)。
Prompt,当设置为rdDriverPrompt常数时,可以在不能与SQL Server连接的情况下,激活ODBC设置对话框来设定DSN。只是最好不要让一般用户随意更改这个设定。通常情况下,正确的处理方法是设定为rdDriverNoPrompt,利用Error处理程序编程进行处理。
ReadOnly,若需要通过连接对数据进行更新时设定为False。若没有数据更新的必要则设为True,这时因为ODBC驱动没有对数据更新进行管理的需要,可以提高程序效率。
Connect,向ODBC驱动管理器传递所有的ODBC连接参数。可以省略dsName,只通过Co nnect参数进行包括用户名、口令、缺省数据库、DSN(此时dsName参数的值无效)等全部参数值的传递。
下面是OpenConnection方法的一个实例。
设定的DSN为MyDSN:
Dim Cn As rdoConnection Dim En As rdoEnvironment Dim Conn As String Conn = “DSN = MyDSN; UID = Jacob;” & “PWD = 123456; DATABASE = MyDb;” Set Cn = En.OpenConnection(“”, rdDriverPrompt, False, Conn) |
在这个例子中,dsName是空 “”(长度为0的文字列)。DSN情报从Conn参数中所含的DSN = MyDSN取得。
OpenConnection方法中也可以通过变量来进行参数传递:
[变量名:=值] Set Cn = En.OpenConnection(Prompt := rdDriverPrompt, ReadOnly := False, Conn ect := Cnn) |
虽然这多少有一些多余的代码,但毫无疑问会使程序维护工作容易得多。
EstablishConnection方法
EstablishConnection方法的调用方式如下:
调用方式:EstablishConnection(Prompt, ReadOnly, Connect)
本文前面对独立(stand alone)的连接对象(rdoConnection)作了说明,EstablishCon nection方法可以用于这种情况。EstablishConnection方法同OpenConnection方法很相似,被用于停止状态或独立的rdoConnection对象。
这里以独立的rdoConnection对象为例说明与SQL Server的连接。
Public WithEvents Eng As rdoEngine Public WithEvents Cn As rdoConnection Private Sub Form_Load() Set Eng = New rdoEngine Set Cn = New rdoConnection With Cn .Connect = “UID = ; PWD = ;” & “DATABASE = pubs; DSN = biblio” .LoginTimeout = 5 .EstablishConnection rdoDriverNoPromt, True, rdAsyncEnable End With End Sub |
在这个例子中,Form_Load函数对rdoEngine和rdoConnection对象进行初始化。这里有一点需要注意,rdoConnection对象是处于独立的状态之下,即使是处于未连接状态也可以设置属性的值。
接下来是rdoConnect对象的事件处理程序。从RDO 2.0起可以实现异步方式(rdAsyncEn able),EstablishConnection就设定为该值。在异步状态下,不必等待与数据库的连接,程序可以迅速从Form_Load函数中退出。
然后是BeforeConnect事件,该处理在与数据库的连接开始以前被激发,此时不能进行有关终止连接的操作:
Private Sub Cn_BeforeConnect(ConnetString As String, Prompt As Variant) MsgBox “正在连接” & ConnectString, vbOKOnly, “连接前” End Sub |
连接完成之后的事件处理:
Private Sub Cn_Connect(ByVal ErrorOccurred As Boolean) Dim M As String If ErrorOccurred Then For Each er In rdoErrors M = M & er & vbCrLf & M Next MsgBox “连接失败” & vbCrLf & M Else MsgBox “连接成功” '这是确认连接状态的测试代码 Cn.Excute “use pubs” End Sub |
RDO连接处理结束后,在该事件中确认连接成功与否。连接成功的情况下ErrorOccurred 返回False,失败时为True,由此可以对rdoErrors集合进行检测:
Private Sub Eng_InfoMessage() For Each er In rdoErrors Debug.Print er Next RdoErrors.Clear End Sub |
不能与SQL Server连接的原因多种多样,有可能是由于对数据库的访问权限、网络连接问题、数据库表的信息错误、SQL Server同时连接的许可数、资源不足等等,具体情况需要与网络管理员商量。
断开连接的操作非常简单,但又很重要,因为RDO不提供自动断开的功能。
Cn.Close Set Cn = Nothing '释放对象所占的内存资源 En.Close Set En = Nothing '释放对象所占的内存资源 |