ADO在访问表时要指明其光标类型和锁类型,且指定不同其权限就不同,权限分为读写二种,这里我们编写的是有读写权限的通用的函数,所以我们指定光标CursorType为adOpenKeyset,锁为开锁adLockOptimistic,.net需指明其来源,这是为什么开始要有 “Imports ADODB.CursorLocationEnum”语句的原因。有了这些,就可通过执行查询语句来打开一个表。打开表后,我们判断表是否为空表,不是则移动记录至尾后再现移至记录头(这是为了可以访问其中每条记录,特别是用RecordCount求记录数时不至有时返回-1的关键),最后返回一个记录集,完整的代码如下:
| '作用:连接表 '参数:TableName表名 '返回:记录集 Public Function OpenTable(ByVal TableName) As ADODB.Recordset Dim strSql As String Dim rec As ADODB.Recordset rec = New ADODB.Recordset() rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset rec.LockType = ADODB.LockTypeEnum.adLockOptimistic strSql = "SELECT * FROM " & TableName rec.Open(strSql, mCnnDB) '打开记录集 If Not rec.EOF Then rec.MoveLast() rec.MoveFirst() End If OpenTable = rec End Function |
下面是扩充上面函数的功能,可以跟据条件访问单个表。
| Public Overloads Function OpenTable(ByVal TableName As String, ByVal strWhere As String) As ADODB.Recordset Dim strSql As String Dim rec As ADODB.Recordset rec = New ADODB.Recordset() rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset rec.LockType = ADODB.LockTypeEnum.adLockOptimistic strSql = "SELECT * FROM " & TableName & " where " & strWhere rec.Open(strSql, mCnnDB) '打开记录集 If Not rec.EOF Then rec.MoveLast() rec.MoveFirst() End If Return rec End Function |