Visual Studio 2017中使用ADO访问数据库的实例 下载本文

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