VB访问SQL - Server数据库技术全揭密 - 下载本文

③rdoConnection对象

rdoConnection对象用于同SQL Server的连接管理。 下面是与SQL Server连接的例子。 用OpenConnection方法的一个实例。 设定的DSN为MyDSN: Dim Cn As rdoConnection Dim En As rdoEnvironment Dim Conn As String

Conn = \ Set Cn= En.OpenConnection(\

Set Cn= En.OpenConnection(Prompt:= rdDriverPrompt, Rea dOnly:= False,Connect:= Cnn)

用EstablishConnection方法的一个实例。

这里以独立的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 = \ .LoginTimeout = 5

.EstablishConnection rdoDriverNoPromt, True, rdAsyncEna ble End With End Sub

在这个例子中,Form_Load函数对rdoEngine和rdoConnection对象进行初始化。这里有一点需要注意,rdoConnection对象是处于独立的状态之下,即使是处于未连接状态也可以设置属性的值。接下来是rdoConnect对象的事件处理程序。从RDO 2.0起可以实现异步方式(rdAsyn cEnable),EstablishConnection就设定为该值。在异步状态下,不必等待与数据库的连接,程序可以迅速从Form_Load 函数中退出。 然后是BeforeConnect事件,该处理在与数据库的连接开始以前被激发,此时不能进行有关终止连接的操作: Private Sub Cn_BeforeConnect(ConnetString As String, Pro mpt As Variant) MsgBox \正在连接\连接前\ 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 \连接失败\ Else

MsgBox \连接成功\

注释:这是确认连接状态的测试代码 Cn.Excute \ 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 注释:释放对象所占的内存资源

VB是对象语言,Form、ActiveX控件也都是对象。使用对象后必须养成将对象设为Nothing把它从内存中释放的编程习惯。这样可以预防很多不可预测错误,往往程序中发生原因不明的错误时,其原因就在于此。 5、ADO 数据对象(Active Data Objects)

ADO是基于全新的OLE DB技术,OLE DB可对电子邮件、文本文件、复合文件、数据表等各种各样的数据通过统一的接口进行存取。随着ActiveX控件的升级(Windows 98的ActiveX 5.0),RDO将被以ActiveX技术为基础的ADO接口所替代。下面将介绍基于ActiveX技术的ADO访问SQL Server 6.5数据库的技术和方法。基于浏览器的ADO接口常用函数如下:

(1)取当前的工作数据库

由于管理任务一般都必须在Master库中完成,因此在执行管理任务之前,最好保存当前工作库,以便完成任务之后再切换回原来的任务。

Public Function SQLGetCurrentDatabaseName(Cn As ADODB.Connection) As String

Dim sSQL As String

Dim RS As New ADODB.Recordset

On Error GoTo errSQLGetCurrentDatabaseName sSQL=\ RS.Open sSQL, Cn

SQLGetCurrentDatabaseName=Trim $ (RS! CurrentDB) RS.Close Exit Function

errSQLGetCurrentDatabaseName: SQLGetCurrentDatabaseName=\ End Function

(2)取SQL Server安装目录下的DATA子目录路径

取SQL Server的设备文件缺省目录,返回如D:MSSQL DATA。 Public Function SQLGetDataPath(Cn As ADODB.Connection) As String Dim sSQL As String

Dim RS As New ADODB.Recordset Dim sFullPath As String On Error GoTo errSQLGetDataPath

sSQL=\注释:master注释: \

RS.Open sSQL, Cn sFullPath = RS! phyname RS.Close

SQLGetDataPath=Left $ (sFullPath, Len(sFullPath) -10) 注释:MASTER.DAT的大小

Exit Function errSQLGetDataPath: SQLGetDataPath=\ End Function (3)创建一个新数据库

Public Function SQLCreateDatabase65 (Cn As ADODB.Connection,sDBName As String, sDataDeviceName As String, nDataSize As Integer, Optional sLogDeviceName, Optional nLogSize) As Boolean Dim sSQL As String

On Error GoTo errSQLCreateDatabase65 Dim sDB As String

sDB =SQLGetCurrentDatabaseName(Cn) sSQL = \ Cn.Execute sSQL

sSQL =\

sSQL = sSQL &\

If Not IsMissing(sLogDeviceName) And Not IsMissing(nLogSize) Then sSQL = sSQL & \ End If

Cn.Execute sSQL sSQL = \ Cn.Execute sSQL

SQLCreateDatabase65 = True Exit Function

errSQLCreateDatabase65: