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
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
前一篇:2010年01月28日