最近两天开始为机房收费系统编写代码了,在机房收费系统中,最核心的代码就是执行SQL语句,返回一个Recordset对象的过程,有这样功能的代码我们以前在学生信息管理系统中接触过:
Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset '本函数的功能是执行SQL语句,并返回结果集(传递参数SQL传递查询语句,MsgString传递查询信息。自身以一个数据集对象的形式返回 Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Dim sTokens() As String ' 定义一个字符串数组,来保存分隔后的字符 On Error GoTo ExecuteSQL_Error '错误处理 sTokens = Split(SQL) '将SQL按空格分成字符串数组,保存在sToken()字符数组中 '创建连接 Set cnn = New ADODB.Connection cnn.Open ConnectString If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then '如果stoken(0)中的第一个字符是以上四个单词之一,则向下进行(此处加上了SELECT一词,因为在登录时,有选择这一项) '执行查询语句 cnn.Execute SQL '利用ADODB.Connection对象的Execute方法执行sql语句的查询 '返回查询信息 MsgString = sTokens(0) & "query successful" '虽然MsgString不是返回值,但传递方式是ByRef,实参地址和这个地址相同 Else '创建数据集对象 Set rst = New ADODB.Recordset '返回查询结果 rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic '返回记录集对象 Set ExecuteSQL = rst MsgString = "查询到" & rst.RecordCount & _ "条记录" End If ExecuteSQL_Exit: Set rst = Nothing '清空记录集对象 Set cnn = Nothing '断开连接 Exit Function ExecuteSQL_Error: MsgString = "查询错误" & _ Err.Description Resume ExecuteSQL_Exit '遇到错误后退出 End Function
在学生信息管理系统中,来执行insert,delete.update语句的是利用的Connection对象的Execute方法,而执行select语句的时候,用的是Recordset方法的Open方法,但是,实际我们在后来的调用中,用到的只是Recordset对象来执行Select语句,也就是只是用到上面代码的Else下面的部分,而那些删除,插入,更新,都用的是Recordset.Update一句搞定,根本没有自己写过这些语句。
前一阵子开会,听了师父的要求,于是,放弃了复制粘贴原来的模块,而是自己写了一个核心模块。
Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset Dim cnn As ADODB.Connection '定义ADO的连接对象 Dim rst As ADODB.Recordset '定义ADO 的记录集对象 Dim cmd As ADODB.Command '定义ADO的command对象,用此对象来执行SQL语句 On Error GoTo ExecuteSQL_Error '错误处理,出现错误后,跳转到错误处理过程 '用Connection对象连接数据库 Set cnn = New ADODB.Connection '实例化Connection对象 cnn.ConnectionString = ConnectionString '将连接子符串赋给连接对象 cnn.Open '打开连接对象 '用command对象执行对数据库的操作 Set cmd = New ADODB.Command '实例化command对象 Set cmd.ActiveConnection = cnn '指定cmd对象当前所属的connection对象 cmd.CommandText = Trim(SQL) '设置SQL语句 'cmd.CommandType = adCmdText ’设置或返回一个 Command 对象的类型 '将查询的结果保存在recordset对象中 Set rst = New ADODB.Recordset rst.CursorType = adOpenKeyset '设置游标类型 rst.LockType = adLockOptimistic '设置锁定类型 Set rst = cmd.Execute() '执行查询,并将查询的结果保存在recordset对象中 Set ExecuteSQL = rst '返回函数的结果 ExecuteSQL_Error: MsgString = Err.Description '经错误信息报存在msgstring字符串中 'If Testtxt(MsgString) = True Then '如果产生错误信息,直接退出 'If (MsgBox(MsgString, vbOKOnly, "提示")) = vbOKOnly Then '显示错误提示 'GoTo ExecuteSQL_Exit '遇到错误后退出 ' End If 'End If ExecuteSQL_Exit: '退出执行SQL语句,释放清空对象 Set rst = Nothing '清空记录集对象 Set cmd = Nothing '释放command对象 Set cnn = Nothing '断开连接 'cnn.Close 'rst.Close Exit Function End Function
这个函数主要是利用Connection对象连接数据库,然后利用Command对象来执行SQL语句,并将查询的结果保存在Recordset对象中。这个函数有两个参数,一个是SQL字符串,用来传递给Command对象执行对数据库的操作,另一个字符串表示用来显示程序运行的错误,调试时使用的。
模块刚刚做好,只刚在登录窗口中使用过了,但是不知道是不是可以应用于所有的SQL操作,目前还在试验中。
请多多指教。