加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VBA之treeview&listview动态连接SQL

(2010-01-29 00:32:03)
标签:

it

分类: VB、VBA

VBA之treeview&listview动态连接SQL

  ----------------------------以下为模块代码------------------------------------------------
  Option Explicit
  
  Public Cnn As ADODB.Connection
  Public ServerName As String
  '服务器名
  Public DBname As String
  '数据库名
  Public UserName As String
  '用户名
  Public PassWord As String
  '密码
  Public rsTree As ADODB.Recordset
  Public rsList As ADODB.Recordset
  
  
  Public Function IniDB() As Boolean
   '初始化连接函数
   On Error GoTo MyErr
   IniDB = False
   Set Cnn = New ADODB.Connection
   With Cnn
   .ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=" & UserName & ";PWD=" & PassWord & ";Initial Catalog=" & DBname & ";Data Source=" & ServerName
   '连接字符串
   .CommandTimeout = 10
   '连接等待时间
   .CursorLocation = adUseClient
   '游标类型
   .Open
   End With
   IniDB = True
   Exit Function
  MyErr:
   MyErr
  End Function
  
  
  Public Sub MyErr()
   MsgBox "错误号:" & Err.Number & vbCrLf & "错误源:" & Err.Source & vbCrLf & "错误描述:" & Err.Description, vbCritical, "对不起,出现错误!"
   Err.Clear
  End Sub
  =================================以下为窗体代码==========================================
  'treeview控件名为tvwtree,listview控件名为lvwtree
  Private Sub Form_Load()
   ServerName = "."
   DBname = "northwind"
   UserName = "sa"
   If IniDB() = False Then
   MsgBox "数据连接失败,请启动SQL SERVER服务"
   Exit Sub
   End If
   Dim NodeX As Node
   Set rsTree = New ADODB.Recordset
   rsTree.Open "select * from dept order by dlevel,did", Cnn, adOpenStatic, adLockOptimistic
   Do Until rsTree.EOF
   If rsTree.Fields("dlevel") = 0 Then
   TvwTree.Nodes.Add , , "k" & rsTree.Fields("did").Value, rsTree.Fields("dname").Value
   Else
   TvwTree.Nodes.Add "k" & rsTree.Fields("dtid").Value, tvwChild, "k" & rsTree.Fields("did").Value, rsTree.Fields("dname").Value
   End If
   rsTree.MoveNext
   Loop
  End Sub
  
  
  
  
  
  
  
  Private Sub TvwTree_NodeClick(ByVal Node As MSComctlLib.Node)
   LvwTree.ListItems.Clear
   Set rsList = New ADODB.Recordset
   rsList.Open "select * from dept where dname='" & TvwTree.SelectedItem & "'", Cnn, adOpenStatic, adLockOptimistic
   If rsList.Fields("dend") = 0 Then
   rsList.Close
   rsList.Open "select * from dept where dtid=(select did from dept where dname='" & TvwTree.SelectedItem & "')", Cnn, adOpenStatic, adLockOptimistic
   Do Until rsList.EOF
   LvwTree.View = lvwList
   LvwTree.ListItems.Add , , rsList.Fields("dname")
   rsList.MoveNext
   Loop
   Else
   Dim Temp As Integer
   Temp = rsList.Fields("did").Value
   rsList.Close
   rsList.Open "select * from emp where edid=" & Temp, Cnn, adOpenStatic, adLockOptimistic
   Do Until rsList.EOF
   LvwTree.View = lvwList
   LvwTree.ListItems.Add , , rsList.Fields("ename")
   rsList.MoveNext
   Loop
   End If
  End Sub

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有