' ExecuteSQL这个函数简单的说,就是一个判断执行SQL语句的一个函数,
' 首先判断SQL这个变量,用SPLIT分割成数组形式给了数组变量sTokens ,
' 然后检测是否包含"INSERT,DELETE,UPDATE,EXECUTE",这几个命令,
' 如果包含就表示不是查询,就直接执行SQL语句,如果不包含,
' 那么基本上只会有“SELECT”,这表示查询命令,就显示符合查询条件的数量
Public Function executeSql(ByVal SQL As String, Msgstring As String) As ADODB.Recordset
'传递参数SQL传递查询语句,Msgstring 传递查询信息。自身以一个数据集对象的形式返回
Dim cnn As ADODB.Connection '定义连接
Dim rst As ADODB.Recordset
Dim sTokens() As String '定义字符串
On Error GoTo executesql_error '错误处理
sTokens = Split(SQL) '用Split函数产生一个包含各个子串的数组
Set cnn = New ADODB.Connection '创建连接
cnn.Open connectstring
If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then 'UCase$ 将其中包含转化为大写字符串 InStr 指定一字符串在另一字符串中最先出现的位置
' 判断字符串中是否含有指定内容
cnn.Execute SQL '执行查询语句
Msgstring = sTokens(0) & "query successful"
Else
Set rst = New ADODB.Recordset '创建数据集对象
rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic 'Trim$ 将字符串中的空格去掉
'返回查询结果
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
对于红色部分 rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic涉及到Recordset 对象方法,下面做相因的介绍:
Recordset对象方法
Open方法
recordset.OpenSource,ActiveConnection,CursorType,LockType,Options
Source
Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored
ActiveConnection
Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。
CursorType
Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
--------------------------------------------------------------
常数常数值说明
--------------------------------------------------------------
adOpenForwardOnly 0缺省值,启动一个只能向前移动的游标(Forward Only)。
adOpenKeyset 1启动一个Keyset类型的游标。
bbs.bitsCN.com
adOpenDynamic 2启动一个Dynamic类型的游标。
adOpenStatic 3启动一个Static类型的游标。
--------------------------------------------------------------
LockType
Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:
-------------------------------------------------------------
常数常数值说明
--------------------------------------------------------------
adLockReadOnly 1缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法
adLockPrssimistic 2当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。
adLockOptimistic 3当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。
adLockBatchOptimistic 4当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、删、改的操作。
前一阵子敲完了学生信息管理系统,自己尝试着给工程添加了“查询班级信息”,然后自己仿照着源代码写了写,结果。。运行总是失败。后来师傅开会我又重提了这个问题,师傅让新建一个工程,新建一个表,创建一个查询老师信息的工程。这样下来才又重新敲了模块的代码。发现自己其实模块的代码百分之五六十都不懂,于是明白自己为何原来敲不对了,代码根本没懂怎么敲的好? 接下来就是各种百度,msdn,各种资料各种查。至此才对模块代码有个较为深入的了解。
这次博客,希望可以跟各位同仁多多交流,同时也提醒自己,学习要踏实,一步一个脚印的往下走才走的长远。