65.9K
CodeProject 正在变化。 阅读更多。
Home

使用TreeView、ListView和ADO显示数据库文件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (7投票s)

2009年10月18日

CPOL

1分钟阅读

viewsIcon

67488

downloadIcon

3211

如何使用ADO在TreeView和ListView中显示表、字段和记录

引言

我收到一封邮件提问:“如何使用ADO填充TreeView和ListView,数据来自*.mdb文件?”
我尝试在以下内容中给出答案,希望我能成功。
本文档将展示如何

  • 连接数据库
  • 用表名和字段名填充TreeView
  • 用所选表的记录填充ListView

背景

演示项目包含一个窗体。我向窗体(frmDataView)添加了以下控件:

  • 两个Label(lblDatabase)用于显示文件名,以及(lblTableName)用于显示表名
  • 两个Button,一个(cmdLoadData)用于连接数据库文件,另一个(cmdClose)用于结束显示
  • ImageList(ImageList1)用于加载一些图标
  • TreeView(tvData)和ListView(lvData)。

使用代码 

' Here is the code to get Tables name from the database file:
Dim cn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim MyDataFile As String
Dim strCon As String
Dim tabName As String
Dim dbNode As Node
Dim tabNode As Node

   ' Don't use: On Error goto label, but use following:
   On Error Resume Next
   ' set root node of TreeView.
   Set dbNode = tvData.Nodes.Add(, , "RootDB", "Database", "DatabaseClose")
   dbNode.Tag = "RootDB"
   MyDataFile = App.Path & "\DataFile\" & "test.mdb"
   strCon = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & MyDataFile & ";"
   Set cn = New ADODB.Connection
   cn.CursorLocation = adUseClient
   cn.Open strCon
   Set rst = cn.OpenSchema(adSchemaTables)
   rst.MoveFirst
   Do Until rst.EOF
      If rst("TABLE_TYPE").Value = "VIEW" Or rst("TABLE_TYPE").Value = "TABLE" Then
         tabName = rst("TABLE_NAME").Value
         Set tabNode = tvData.Nodes.Add("RootDB", tvwChild, "X" & tabName, _
		tabName, "TableClose")
         tabNode.Tag = "Tables"
      End If
      rst.MoveNext
   Loop
   rst.Close

' Here is the code to get Fields name from all Tables:
Dim rs As ADODB.Recordset
Dim fldName As String
Dim n As Integer
Dim c As Integer
Dim i As Integer
Dim j As Integer
   Set rs = New ADODB.Recordset
   c = tvData.Nodes("RootDB").Children
   ' first table
   n = tvData.Nodes("RootDB").Child.FirstSibling.Index
   For i = n To c + n
      tabName = tvData.Nodes(i).Text
      ' get field name
      Set rs = cn.Execute("SELECT * FROM [" & tabName & "]", 1, 1)
      For j = 0 To rs.Fields.Count - 1
         fldName = rs.Fields(j).Name
         Set fldNameNode = tvData.Nodes.Add("X" & tabName, tvwChild, _
		"X" & fldName, fldName, "imgField")
         fldNameNode.Tag = "Fields"
      Next j
      rs.Close
   Next i  

您可以在窗体(frmDataView)中阅读完整的代码

  • InitListView Sub:用于初始化ListView
  • LoadListView Sub:用于用数据填充ListView
  • cmdLoadData_Click Sub:用于连接数据库文件
  • tvData_Collapse Sub:用于更改图标
  • tvData_Expand Sub:用于更改图标
  • tvData_NodeClick Sub:要查看如何填充ListView,当在TreeView中单击表名时显示记录,您还可以看到我们在TreeView中单击字段名时如何更改ListView的ColumnHeader中的图标

备注

当您创建一个新项目时,必须从组件对话框中将ListView、TreeView和ImageList控件添加到工具箱。
Microsoft Windows Common Controls 6.0
您必须添加引用:“Microsoft ActiveX Data Objects 2.x”。

最后的话

我希望这篇文章对您有所帮助,并能帮助您将表、字段和记录从数据库文件显示到TreeView和ListView。如果您有任何想法或发现任何问题,请告诉我。感谢CodeProject,感谢大家。

Mostafa Kaisoun
M_Kaisoun@hotmail.com

历史

  • 2009年10月18日:初始发布
© . All rights reserved.