rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset rec.LockType = ADODB.LockTypeEnum.adLockOptimistic strSql = \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 = \
rec.Open(strSql, mCnnDB) ''打开记录集 If Not rec.EOF Then rec.MoveLast() rec.MoveFirst() End If Return rec End Function
继续扩充访问表的功能。有时要打开多个表,读写其中的数据,我们可以通过建立查询视图实现,其它类似上面的OpenTable,完整的代码如下:
''作用:连接多表 ''参数:strSQL ''返回:记录集
Public Function ExecuteSQL(ByVal strSql As String) As ADODB.Recordset
Dim rec As New ADODB.Recordset()
rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset rec.LockType = ADODB.LockTypeEnum.adLockOptimistic rec.Open(strSql, mCnnDB) ''打开记录集
ExecuteSQL = rec End Function
下面编写了一个用记录集填充AxMSFlexGrid网格的过程。其中函数RecordCount是我自己编写的求记录集中记录的函数。这里不能直接用ADO的RecordCount求得。如果记录集是空,则退出过程。否则求出记录集的记录数和字段来确定AxMSFlexGrid网格的行列数据,然后读出记录集的数据直接填充到AxMSFlexGrid网格。要说明的是读出记录集的数据时要先判断是否为空值,由函数IsDBNull实现(函数IsDBNull来源于System.DBNull).最后记录集应该返回到记录首位,否则影响了原有的记录集,完整的代码如下:
''作用:用记录集的数据填充网格
''参数:MSGrid 网格对象,rec 记录集对象 Public
Sub
FillMsGrid(ByVal
MSGrid
As
AxMSFlexGridLib.AxMSFlexGrid, ByVal rec As ADODB.Recordset) Dim i, j, RecordNum As Integer If rec.EOF Then Exit Sub RecordNum = RecordCount(rec) MSGrid.Rows = RecordNum + 1
MSGrid.Cols = rec.Fields.Count + 1 For i = 0 To RecordNum - 1 For j = 0 To rec.Fields.Count - 1 If IsDBNull(rec(j).Value) Then
MSGrid.set_TextMatrix(i + 1, j + 1, \Else
MSGrid.set_TextMatrix(i + 1, j + 1, rec(j).Value) End If Next
MSGrid.set_TextMatrix(i + 1, 0, i) rec.MoveNext() Next
rec.MoveFrist() End Sub
''作用:取记录集的记录数 ''参数:rec 记录集对象 ''返回:记录集的记录数
Public Function RecordCount(ByVal rec As ADODB.Recordset) As Integer
Dim i As Integer If rec.EOF Then
RecordCount = 0 Exit Function End If With rec .MoveFirst() Do While Not .EOF i += 1 .MoveNext() Loop .MoveFirst() End With RecordCount = i End Function
以上代码编好后放在所定义的类中.下面的省略号代表上面的函数和过程。可直接生成为DLL组件。方法是在2017编辑环境下选择生成菜单中按生成就生成了DLL文件。然后,你可以直接调用该组件了。
Imports ADODB.Connection Imports ADODB.Recordset