我们继续扩充访问表的功能。有时要打开多个表,读写其中的数据,我们可以通过建立查询视图实现,其它类似上面的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组件。方法是在.net编辑环境下选择生成菜单中按生成就生成了DLL文件。然后,你可以直接调用该组件了。