📄 treeview (树视图)遍历数据库的方法_mysky.htm
字号:
})();/*]]>*/</SCRIPT>
<META content="MSHTML 6.00.2900.3354" name=GENERATOR></HEAD>
<BODY onload=formatonlinpic();>
<CENTER>
<SCRIPT type=text/javascript>
/*<![CDATA[*/
if(top.location != self.location){
top.location = self.location;
}
var myref = encodeURI("http://hi.baidu.com/gallonchai/blog/item/e564644e1cd057c8d0c86a24%2Ehtml");
/*]]>*/
</SCRIPT>
<LINK href="TreeView (树视图)遍历数据库的方法_MySky.files/mods.css" type=text/css
rel=stylesheet><LINK
href="TreeView (树视图)遍历数据库的方法_MySky.files/bb792b3e6609c93d70cf6c0a.css"
type=text/css rel=stylesheet><LINK
href="TreeView (树视图)遍历数据库的方法_MySky.files/space.css" type=text/css
rel=stylesheet>
<STYLE type=text/css>#usrbar {
PADDING-RIGHT: 10px; PADDING-LEFT: 0px; FONT-SIZE: 12px; BACKGROUND: #ffffff; FILTER: alpha(opacity=65); PADDING-BOTTOM: 3px; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 19px; PADDING-TOP: 4px; FONT-FAMILY: Arial; LETTER-SPACING: normal; HEIGHT: 19px; TEXT-ALIGN: right; moz-opacity: 0.5
}
#usrbar A {
COLOR: #0000cc; TEXT-DECORATION: underline
}
#usrbar A:link {
COLOR: #0000cc; TEXT-DECORATION: underline
}
#usrbar A:visited {
COLOR: #0000cc; TEXT-DECORATION: underline
}
#ft {
CLEAR: both; FONT-SIZE: 12px; COLOR: #666666; LINE-HEIGHT: 20px; FONT-FAMILY: Arial; HEIGHT: 20px; TEXT-ALIGN: center
}
#ft A {
COLOR: #7777cc; TEXT-DECORATION: underline
}
#ft A:link {
COLOR: #7777cc; TEXT-DECORATION: underline
}
#ft A:visited {
COLOR: #7777cc; TEXT-DECORATION: underline
}
#usrbar {
LETTER-SPACING: normal
}
#usrbar A {
LETTER-SPACING: normal
}
#usrbar A:link {
LETTER-SPACING: normal
}
#usrbar A:visited {
LETTER-SPACING: normal
}
#ft {
LETTER-SPACING: normal
}
#ft A {
LETTER-SPACING: normal
}
#ft A:link {
LETTER-SPACING: normal
}
#ft A:visited {
LETTER-SPACING: normal
}
</STYLE>
<DIV id=usrbar><NOBR><A href="http://www.baidu.com/" target=_blank>百度首页</A> | <A
id=hi_index href="http://hi.baidu.com/" target=_blank>百度空间</A>
<SCRIPT type=text/javascript>
document.write('| <a href="http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u=http://hi.baidu.com' + encodeURI('/gallonchai/blog/item/e564644e1cd057c8d0c86a24%2Ehtml') + '">登录</a>');
</SCRIPT>
</NOBR></DIV>
<DIV id=main align=left><!--[if IE]>
<SCRIPT>
var objmain = document.getElementById("main");
function updatesize(){ var bodyw = window.document.body.offsetWidth; if(bodyw <= 790) objmain.style.width="772px"; else if(bodyw >= 1016) objmain.style.width="996px"; else objmain.style.width="100%"; }
updatesize(); window.onresize = updatesize;
</SCRIPT>
<![endif]-->
<DIV id=header>
<DIV class=lc>
<DIV class=rc></DIV></DIV>
<DIV class=tit><A class=titlink
title="gallonchai的空间 http://hi.baidu.com/gallonchai"
href="http://hi.baidu.com/gallonchai">MySky</A></DIV>
<DIV class=desc>自由空间</DIV>
<DIV id=tabline></DIV>
<DIV id=tab><A href="http://hi.baidu.com/gallonchai">主页</A><A class=on
href="http://hi.baidu.com/gallonchai/blog">博客</A><A
href="http://hi.baidu.com/gallonchai/album">相册</A><SPAN>|</SPAN><A
href="http://hi.baidu.com/gallonchai/profile">个人档案</A> <SPAN>|</SPAN><A
href="http://hi.baidu.com/gallonchai/friend">好友</A> </DIV></DIV>
<DIV class=stage>
<DIV class=stagepad>
<DIV style="WIDTH: 100%">
<TABLE class=modth cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=modtl width=7> </TD>
<TD class=modtc noWrap>
<DIV class=modhead><SPAN class=modtit>查看文章</SPAN></DIV></TD>
<TD class=modtc noWrap align=right></TD>
<TD class=modtr width=7> </TD></TR></TBODY></TABLE>
<DIV class=modbox id=m_blog>
<DIV class=tit>TreeView (树视图)遍历数据库的方法</DIV>
<DIV class=date>2007-08-13 18:17</DIV>
<TABLE style="TABLE-LAYOUT: fixed">
<TBODY>
<TR>
<TD>
<DIV class=cnt id=blog_text>
<P>TreeView (树视图)遍历数据库的方法
<BR><BR>多数从事数据库编程人员都经历过,对新接触的数据库技术无论是低版本Foxbase、Access97-2000还是支持网络环境高版本的Sql
Server2000和
Oracel等系统,都经过一个循循渐进、吃苦耐劳学习过程,达到知识技术从量变到质变的过程,才能把数据库编程水平提高一步。</P>
<P>本文介绍TreeView(树视图) 遍历SQL
Server2000数据库的方法及实现过程,在这个过程中利用TreeView(树视图)控件的设置、定义、赋值将数据库的表名显示在TreeView(树视图)中,详见-[图1];同时提供数据库编程朋友们有一个对数据库加深理解、加深认识、大胆实践、举一反三的过程,<BR>一、数据库字典信息<BR>动态的数据库系统内部,均有负责监控各个表、过程存储的【创建-删除】及表中字段【编辑-增、删、改】变化信息的文件,笔者称为:数据库字典。细心的朋友会注意到:在Sql
Server2000数据库下,凡打开一个数据库,就会发现一个名称:sysobjects的系统文件,它在我们创建一个表或删除一个表操作变化过程中,它会认真记录下,[包括文件分类:系统和用户]相关信息,其中以下两个字段对我们本文内容的介绍是个关键;字段名为:①.Name[定义:sysname,128-宽度,[属性]:不允许空]
②.Xtype[定义: Char,2-宽度,[属性]:不允许空]。请见-[图 2]下面是在SQLServe2000
查询窗口上,调用这个sysobjects文件显示的图例。<BR>二、在VB6.0中实现TreeView(树视图)遍历数据库的方法<BR>由于我们使用的Sql
Server2000的数据库系统,主要是对‘表’
(二维表[列,行])进行操作;笔者采用的方法是用VB6.0通过ADO方式与SERVER2000数据库进行连接,打开[数据库字典sysobjects],取出Name字段的内容,同时,将内容装入树视图TreeView控件中,显示在窗体的左侧。具体步骤:<BR>1>.窗体组成和布局<BR>
*.主要组成:<BR>①. TreeView控件,名称:TreeView1;
②.ListView控件,名称:LV1<BR>③CommandButton控件,名称:Command2; ④.ImageLIst控件,
名称:ImageList1<BR>⑤.TextBox
控件,名称:Text1;
⑥.TextBox控件,名称:Text2<BR> *.布局:<BR>
如图1所示,处于左、右两面的TreeView控件和ListView控件是分别存放数据库全部表名;数据库表的全部记录;窗体底部的两个文本框分别是显示数据库表的个数和打开表后记录的总数;命令按钮是执行TreeView(树视图)遍历数据库的按钮;ImageList控件是装入表名前的图片控件。<BR>2>.数据库的连接<BR>请看下列代码:<BR>
Private Sub Form_Load() '在窗体入口<BR>If Not SqlOpenADOConnection(m_Cnn) Then
Exit Sub <BR>'用一条条件语句与Server2000数据库连接<BR>SQL End Sub<BR>*.bas
’在模块中响应窗体过程调用代码;<BR>Option
Explicit ' 一些 ADO
常数定义:<BR>Public Const adOpenStatic = 3<BR>Public Const adOpenKeyset =
1<BR>Public Const adLockOptimistic = 3<BR>Public Const
adLockBatchOptimistic = 4<BR>Public Function SqlOpenADOConnection(pCnn As
Object) As Boolean<BR> On
Error GoTo ErrorHandler<BR>Set pCnn = CreateObject("ADODB.Connection") '
对数据库连接方式<BR>pCnn.Open"UserID=sa;pwd=;driver={SQLServer};Server=User2;Database=Northwind;dsn="
SqlOpenADOConnection = True<BR> Exit
Function<BR>
……
'略<BR>End
Function<BR><BR>3>.变量定义和树视图TreeView控件的初始<BR>请看下列代码:<BR>*>.窗体的变量定义:<BR>Dim
Ssql1 As String<BR>Dim nodx As Node<BR>Dim SQl, Str1 As String
'定义字符串<BR>Dim K, P, Q As Integer '定义字符的长度<BR>Dim No_01 As
Integer<BR>Private m_Cnn As Object '
ADODB连接<BR>*>.初始TreeView控件<BR>Private Sub
Form_Load()<BR>TreeView1.LineStyle =
tvwTreeLines
'在兄弟节点和父节点之间显示线<BR>TreeView1.ImageList =
ImageList1
'链接图像列<BR>TreeView1.Style = tvwTreelinesPlusMinusPictureText<BR><BR>End
Sub<BR><BR>4>.树视图TreeView遍历数据库的方法<BR>命令按钮代码(以下的代码完成了图1左面树视图TreeView遍历数据库效果):<BR>Private
Sub Command2_Click()<BR>Dim Rs_Table As New ADODB.Recordset<BR>Dim i As
Integer<BR> Text1.Text =
""<BR> TreeView1.Sorted =
True<BR> Set nodx = TreeView1.Nodes.Add(, ,
"数据库信息", "数据库信息", 1)<BR> nodx.Text =
"数据库信息"<BR> nodx.Tag =
"请双击文件夹"<BR> nodx.Image =
"close"<BR> Rs_Table.CursorLocation =
adUseClient<BR>
'取得到所有[用户级]表名<BR> Rs_Table.Open "SELECT name
From sysobjects WHERE xtype = 'u'", _<BR> m_Cnn,
adOpenDynamic, adLockReadOnly<BR>
Rs_Table.MoveFirst<BR> No_01 =
0<BR> Do While Not
Rs_Table.EOF<BR> No_01 =
No_01 + 1<BR> Str1 =
CStr(No_01) + "-" +
Rs_Table.Fields("name")<BR>
Set nodx = TreeView1.Nodes.Add(1, tvwChild, Str1 & " id", Str1,
1)<BR> Text1.Text =
CStr(No_01)<BR>
Rs_Table.MoveNext<BR>
Loop<BR>
Rs_Table.Close<BR> For i = 1 To
TreeView1.Nodes.Count<BR>
TreeView1.Nodes(i).Expanded = True
'展开所有节点<BR> Next
i<BR> Set Rs_Table = Nothing<BR>End
Sub<BR><BR>三、用ListView显示表记录的技巧<BR>这里为了让数据库编程朋友们加深对SQLServer2000的理解与认识,在下面给出执行[用鼠标单击‘表名’],屏幕的右方ListView将显示表全部记录;在此调用的过程中,笔者将描述:【表的字段类型;字段宽度;字段实际宽度的格式,在代码(2).中间标有Debug.Print的两行列出】此段代码对研究数据库结构技术的朋友们有实用价值。请看下列代码:<BR>(1).
[用鼠标单击‘表名’]后的代码<BR>Private Sub TreeView1_NodeClick(ByVal Node As
MSComctlLib.Node)<BR>Dim RS As New ADODB.Recordset
'定义数据集<BR>Dim K, W, i As Integer<BR>Ssql1 = ""<BR>Ssql1 = Node.Text<BR>K =
Len(Ssql1)<BR>W = 1<BR>For W = 1 To K<BR> If
Mid(Ssql1, W, 1) = "-" Then<BR>
Ssql1 = Mid(Ssql1, W + 1, K -
W)<BR> Exit
For<BR> End If<BR>Next
W<BR>'本循环为了剔除在TreeView中数据库表的编号及'-',适应表名调用。<BR>If Ssql1 = "数据库信息"
Then<BR>'TreeView收起所有节点[单击--收起|双击--展开]<BR>For i = 1 To
TreeView1.Nodes.Count<BR>
TreeView1.Nodes(i).Expanded = False<BR>Next i<BR>Exit Sub<BR>End If<BR>Q =
0<BR>If Len(Ssql1) > 0 Then<BR> RS.Open Ssql1,
m_Cnn<BR> If RS.Fields.Count > 0
Then<BR> listrec RS,
LV1<BR> RS.Close<BR>
End If<BR>End If<BR>Set RS = Nothing<BR>End Sub<BR>(2)。右方ListVie
w将显示表全部记录的代码<BR>Sub listrec(ByRef RS As Recordset, ByRef LV1 As
ListView)<BR>'将选中的记录集(含字段名)显示在ListView中<BR>Dim head As ColumnHeader<BR>Dim
Item As ListItem<BR>Dim i As Integer<BR>K =
0
'初始化listview的某些属性<BR>LV1.View = lvwReport<BR>LV1.GridLines =
True<BR>LV1.LabelEdit =
lvwManual<BR>LV1.ListItems.Clear<BR>LV1.ColumnHeaders.Clear<BR>For i = 0
To RS.Fields.Count - 1 '处理ListView的表头-字段名<BR>Set head =
LV1.ColumnHeaders.Add<BR> head.Text =
RS.Fields(i).Name<BR> Debug.Print CStr(i), head.Text,
"A=", FieldType(RS.Fields(i).Type)<BR>
Debug.Print<BR>CStr(i),"B=",RS.Fields(i).DefinedSize,"C-",
RS.Fields(i).ActualSize<BR>Next<BR>While Not
RS.EOF
'装入该表的所有记录<BR> Set Item =
LV1.ListItems.Add<BR>
Item.Text = "" & RS.Fields(0).Value<BR> For i
= 1 To RS.Fields.Count -
1<BR> Item.SubItems(i) =
"" & RS.Fields(i).Value<BR>
Next<BR> K = K + 1<BR>
RS.MoveNext<BR>Wend<BR>Text2.Text = ""<BR>Text2.Text = CStr(K)<BR>End
Sub<BR>四、小结<BR>----
1.从以上对TreeView(树视图)遍历数据库方法的介绍,仅起一个抛砖引玉作用,希望编程爱好者、朋友们多提宝贵意见,借【软件报】的技术平台多交流经验、互帮互学、共同提高。<BR>----
2.特别值得一提的是,文中提到的与数据库连接方式,采用了在应用软件的窗体装入时,以一个带参数的函数调用来实现的。我也是近期才开始这样连接数据库。觉得既方便又简练;摆脱了过去进入系统就打开数据库,退出时关闭数据库的方式,缺乏条理性,浪费语句不少,请大家多提宝贵意见。<BR>----
3.文中代码部分有Debug.print ……,
FieldType(RS.Fields(i).Type)语句是一个过程调用,它的作用是将字段的类型代号转换为类型字符。(如:代号=3;INT)方便阅读。此段过程代码可在网上查询或与笔者联系提供。<BR>----
4.文中没有对TreeViee(树视图)和ListView的使用做过多的介绍;我想,编程的朋友,只要用实例串几次,来个举一反三、就会完全掌握。此处不做过多赘述。</P></DIV></TD></TR></TBODY></TABLE><BR>
<DIV class=opt><A title=查看该分类中所有文章
href="http://hi.baidu.com/gallonchai/blog/category/Vb">类别:Vb</A> | <A
title=将此文章添加到百度搜藏 onclick="return addToFavor();"
href="http://cang.baidu.com/do/add" target=_blank>添加到搜藏</A> | 浏览(<SPAN
id=result></SPAN>) | <A
href="http://hi.baidu.com/gallonchai/blog/item/e564644e1cd057c8d0c86a24.html#send">评论</A> (1)
<SCRIPT language=javascript>/*<![CDATA[*/var pre = [true,'VB ImageList控件应用详解', 'VB ImageList控件应用详解','/gallonchai/blog/item/caf7fd01ecc2ac041c958358.html'];var post = [true,'ADO代码动态读取Access数据库表名及查询名','ADO代码动态读取Access数据库表...', '/gallonchai/blog/item/c46e6ef3eb1f3952342acc6e.html'];if(pre[0] || post[0]){ document.write('<div style="height:5px;line-height:5px;"> </div><div id="in_nav">'); if(pre[0]){ document.write('上一篇:<a href="' + pre[3] + '" title="' + pre[1] + '">' + pre[2] + '</a> '); } if(post[0]){ document.write('下一篇:<a href="' + post[3] + '" title="' + post[1] + '">' + post[2] + '</a>'); } document.write('</div>');}/*]]>*/</SCRIPT>
</DIV>
<DIV class=line></DIV>
<STYLE type=text/css>#in_related_doc A {
TEXT-DECORATION: none
}
</STYLE>
<DIV id=in_related_tmp></DIV>
<SCRIPT language=javascript type=text/javascript>/*<![CDATA[*/function HI_MOD_IN_RELATED_DOC_CALLBACK(arg){ if(arg.length <= 1) return false; var hasMore = arg[0]; var D=function(A,B){A[A.length]=B;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -