mysql 视图树查询_TreeView (树视图)遍历数据库的方法

多数从事数据库编程人员都经历过,对新接触的数据库技术无论是低版本Foxbase、Access97-2000还是支持网络环境高版本的Sql Server2000和 Oracel等系统,都经过一个循循渐进、吃苦耐劳学习过程,达到知识技术从量变到质变的过程,才能把数据库编程水平提高一步。

本文介绍TreeView(树视图) 遍历SQL Server2000数据库的方法及实现过程,在这个过程中利用TreeView(树视图)控件的设置、定义、赋值将数据库的表名显示在TreeView(树视图)中,详见-[图1];同时提供数据库编程朋友们有一个对数据库加深理解、加深认识、大胆实践、举一反三的过程,具体分四个部分进行介绍:

一、数据库字典信息;二、在VB6.0中实现TreeView(树视图)遍历数据库的方法;

三、用ListView控件显示表记录的技巧;四、小结;

内容如下:

77a7aad46f52326ff621d41e257073e6.png

[图1]

一、数据库字典信息

动态的数据库系统内部,均有负责监控各个表、过程存储的【创建-删除】及表中字段【编辑-增、删、改】变化信息的文件,笔者称为:数据库字典。细心的朋友会注意到:在Sql Server2000数据库下,凡打开一个数据库,就会发现一个名称:sysobjects的系统文件,它在我们创建一个表或删除一个表操作变化过程中,它会认真记录下,[包括文件分类:系统和用户]相关信息,其中以下两个字段对我们本文内容的介绍是个关键;字段名为:①.Name[定义:sysname,128-宽度,[属性]:不允许空] ②.Xtype[定义: Char,2-宽度,[属性]:不允许空]。请见-[图 2]下面是在SQLServe2000 查询窗口上,调用这个sysobjects文件显示的图例。

7a419a6c93ec4ec4811437a6ef508f9b.png

二、在VB6.0中实现TreeView(树视图)遍历数据库的方法

由于我们使用的Sql Server2000的数据库系统,主要是对‘表’ (二维表[列,行])进行操作;笔者采用的方法是用VB6.0通过ADO方式与SERVER2000数据库进行连接,打开[数据库字典sysobjects],取出Name字段的内容,同时,将内容装入树视图TreeView控件中,显示在窗体的左侧。具体步骤:

1>.窗体组成和布局

*.主要组成:

①.TreeView控件,名称:TreeView1;    ②.ListView控件,名称:LV1

③CommandButton控件,名称:Command2; ④.ImageLIst控件, 名称:ImageList1

⑤.TextBox 控件,名称:Text1;        ⑥.TextBox控件,名称:Text2

*.布局:

如图1所示,处于左、右两面的TreeView控件和ListView控件是分别存放数据库全部表名;数据库表的全部记录;窗体底部的两个文本框分别是显示数据库表的个数和打开表后记录的总数;命令按钮是执行TreeView(树视图)遍历数据库的按钮;ImageList控件是装入表名前的图片控件。

2>.数据库的连接

请看下列代码:

Private Sub Form_Load() '在窗体入口

If Not SqlOpenADOConnection(m_Cnn) Then Exit Sub

'用一条条件语句与Server2000数据库连接

SQL End Sub

*.bas ’在模块中响应窗体过程调用代码;

Option Explicit         '一些 ADO 常数定义:

Public Const adOpenStatic = 3

Public Const adOpenKeyset = 1

Public Const adLockOptimistic = 3

Public Const adLockBatchOptimistic = 4

Public Function SqlOpenADOConnection(pCnn As Object) As Boolean

On Error GoTo ErrorHandler

Set pCnn = CreateObject("ADODB.Connection") '对数据库连接方式

pCnn.Open"Provider=sqloledb;DataSource=NEDTWO-56958BFB;UserID=sa;pwd=;Initial Catalog=NorthWind"

SqlOpenADOConnection = True

Exit Function

……              '略

End Function

3>.变量定义和树视图TreeView控件的初始

请看下列代码:

*>.窗体的变量定义:

Dim Ssql1 As String

Dim nodx As Node

Dim SQl, Str1 As String '定义字符串

Dim K, P, Q As Integer '定义字符的长度

Dim No_01 As Integer

Private m_Cnn As Object ' ADODB连接

*>.初始TreeView控件

Private Sub Form_Load()

TreeView1.LineStyle = tvwTreeLines          '在兄弟节点和父节点之间显示线

TreeView1.ImageList = ImageList1           '链接图像列

TreeView1.Style = tvwTreelinesPlusMinusPictureText

End Sub

4>.树视图TreeView遍历数据库的方法

命令按钮代码(以下的代码完成了图1左面树视图TreeView遍历数据库效果):

Private Sub Command2_Click()

Dim Rs_Table As New ADODB.Recordset

Dim i As Integer

Text1.Text = ""

TreeView1.Sorted = True

Set nodx = TreeView1.Nodes.Add(, , "数据库信息", "数据库信息", 1)

nodx.Text = "数据库信息"

nodx.Tag = "请双击文件夹"

nodx.Image = "close"

Rs_Table.CursorLocation = adUseClient

'取得到所有[用户级]表名

Rs_Table.Open "SELECT name From sysobjects WHERE xtype = 'u'", _

m_Cnn, adOpenDynamic, adLockReadOnly

Rs_Table.MoveFirst

No_01 = 0

Do While Not Rs_Table.EOF

No_01 = No_01 + 1

Str1 = CStr(No_01) + "-" + Rs_Table.Fields("name")

Set nodx = TreeView1.Nodes.Add(1, tvwChild, Str1 & " id", Str1, 1)

Text1.Text = CStr(No_01)

Rs_Table.MoveNext

Loop

Rs_Table.Close

For i = 1 To TreeView1.Nodes.Count

TreeView1.Nodes(i).Expanded = True '展开所有节点

Next i

Set Rs_Table = Nothing

End Sub

三、用ListView显示表记录的技巧

这里为了让数据库编程朋友们加深对SQLServer2000的理解与认识,在下面给出执行[用鼠标单击‘表名’],屏幕的右方ListView将显示表全部记录;在此调用的过程中,笔者将描述:【表的字段类型;字段宽度;字段实际宽度的格式,在代码(2).中间标有Debug.Print的两行列出】此段代码对研究数据库结构技术的朋友们有实用价值。请看下列代码:

(1). [用鼠标单击‘表名’]后的代码

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)

Dim RS As New ADODB.Recordset    '定义数据集

Dim K, W, i As Integer

Ssql1 = ""

Ssql1 = Node.Text

K = Len(Ssql1)

W = 1

For W = 1 To K

If Mid(Ssql1, W, 1) = "-" Then

Ssql1 = Mid(Ssql1, W + 1, K - W)

Exit For

End If

Next W

'本循环为了剔除在TreeView中数据库表的编号及'-',适应表名调用。

If Ssql1 = "数据库信息" Then

'TreeView收起所有节点[单击--收起|双击--展开]

For i = 1 To TreeView1.Nodes.Count

TreeView1.Nodes(i).Expanded = False

Next i

Exit Sub

End If

Q = 0

If Len(Ssql1) > 0 Then

RS.Open Ssql1, m_Cnn

If RS.Fields.Count > 0 Then

listrec RS, LV1

RS.Close

End If

End If

Set RS = Nothing

End Sub

(2)。右方ListVie w将显示表全部记录的代码

Sub listrec(ByRef RS As Recordset, ByRef LV1 As ListView)

'将选中的记录集(含字段名)显示在ListView中

Dim head As ColumnHeader

Dim Item As ListItem

Dim i As Integer

K = 0                             '初始化listview的某些属性

LV1.View = lvwReport

LV1.GridLines = True

LV1.LabelEdit = lvwManual

LV1.ListItems.Clear

LV1.ColumnHeaders.Clear

For i = 0 To RS.Fields.Count - 1 '处理ListView的表头-字段名

Set head = LV1.ColumnHeaders.Add

head.Text = RS.Fields(i).Name

Debug.Print CStr(i), head.Text, "A=", FieldType(RS.Fields(i).Type)

Debug.Print

CStr(i),"B=",RS.Fields(i).DefinedSize,"C-", RS.Fields(i).ActualSize

Next

While Not RS.EOF                   '装入该表的所有记录

Set Item = LV1.ListItems.Add

Item.Text = "" & RS.Fields(0).Value

For i = 1 To RS.Fields.Count - 1

Item.SubItems(i) = "" & RS.Fields(i).Value

Next

K = K + 1

RS.MoveNext

Wend

Text2.Text = ""

Text2.Text = CStr(K)

End Sub

四、小结

---- 1.从以上对TreeView(树视图)遍历数据库方法的介绍,仅起一个抛砖引玉作用,希望编程爱好者、朋友们多提宝贵意见,借【软件报】的技术平台多交流经验、互帮互学、共同提高。

---- 2.特别值得一提的是,文中提到的与数据库连接方式,采用了在应用软件的窗体装入时,以一个带参数的函数调用来实现的。我也是近期才开始这样连接数据库。觉得既方便又简练;摆脱了过去进入系统就打开数据库,退出时关闭数据库的方式,缺乏条理性,浪费语句不少,请大家多提宝贵意见。

----3.文中代码部分有Debug.print ……, FieldType(RS.Fields(i).Type)语句是一个过程调用,它的作用是将字段的类型代号转换为类型字符。(如:代号=3;INT)方便阅读。此段过程代码可在网上查询或与笔者联系提供。

---- 4.文中没有对TreeViee(树视图)和ListView的使用做过多的介绍;我想,编程的朋友,只要用实例串几次,来个举一反三、就会完全掌握。此处不做过多赘述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(1.3)HarmonyOS鸿蒙启动程序运行流程

程序启动运行流程: ①解析config.json文件 ②初始化 ③获取入口Ability的全类名(config.json里的module里的mainAbility) ④找到Ability并运行 ⑤运行Ability中的子界面 ⑥加载xml文件,展示内容(xml在resources里面&am…

arraylist内存溢出_ArrayList使用内存映射文件

arraylist内存溢出介绍 内存中的计算由于负担得起的硬件而开始兴起,大多数数据保留在RAM中以满足延迟和吞吐量的目标,但是将数据保留在RAM中会增加垃圾收集器的开销,尤其是在您不预先分配内存的情况下。 因此,有效地我们需要一种无…

【vtkWidgetRepresentation】第十八期 vtkHoverWidget

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享vtkHoverWidget,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. vtkHoverWidget vtkHoverWidget用于在呈现窗口中…

Java面向对象(2)--类的成员属性

基本格式:修饰符 数据类型 属性名 初始化值 ; 说明1: 修饰符 ①常用的权限修饰符:private、缺省、protected、public ②其他修饰符:static、final 说明2:数据类型 任何基本数据类型和任何引用数据类型。 说明3:属性…

mysql8.0设置用户权限_mysql8.0建立用户授予权限报错解决方法

我遇到错误一:Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘IDENTIFIED BY ‘11111” at line 1;我遇到的错误二:Error C…

使用Spring Session和JDBC DataStore进行会话管理

在Web应用程序中,用户会话管理对于管理用户状态至关重要。 在本文中,我们将学习在集群环境中管理用户会话所遵循的方法,以及如何使用Spring Session以更加简单和可扩展的方式实现它。 通常在生产环境中,我们将有多个服务器节点&a…

Java面向对象(3)--类的成员方法

基本格式: 修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, …){方法体程序代码;return 返回值; }修饰符:public,缺省,private, protected等 返回值类型: ①没有返回值&#xff1a…

java 线程安全的单例_线程安全的单例模式的几种实现

单例模式是常见的设计模式之一:目的是节省内存,限制了实例的个数;有利于java GC回收机制。单例模式的三个好处:1.控制资源的使用,通过线程同步来控制资源的并发访问2.控制实例的产生个数,来达到节约资源的目…

Java面向对象(3.1)--方法的重载,可变个数的形参,值传递机制,递归

重载 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数 类型不同即可。 与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类 型或者多个参数时参数类型顺序)。调用时,根据方…

python统计图像直方图_计算机视觉7-像素点直方图统计、掩膜图像

1.灰度图的直方图(1)调用库import cv2import matplotlib.pyplot as pltimport numpy as np #创建掩膜时需要(2)绘图-方法1imgcv2.imread(F:cat.jpg,0)plt.hist(img.ravel(),256,[0,256])plt.show()plt.hist是一个画直方图的命令;img.ravel()可以将图片转化成一维数组…

计算机二级web题目(8.1)--综合选择题2

前些天发现了一个巨牛的人工智能学习电子书,通俗易懂,风趣幽默,无广告,忍不住分享一下给大家。(点击跳转人工智能学习资料) 1、一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再…

java支持的数据类型有哪些_Java支持的数据类型有哪些?什么时候自动装拆箱?...

java中的8种基本数据类型:boolean byte char short int float double long自动拆装箱的问题引入:由于在一开始学习java的时候,”万物皆对象“这种面向对象的看问题方式,时刻围绕在脑海中。因为静态的变量和基本数据类型不属于对象…

Java面向对象(4)--封装和隐藏

Java中通过将数据声明为私有的(private),再提供公共的(public)方法:获取getXxx()和设置setXxx()实现对该属性的操作,以实现下述目的: ①隐藏一个类中不需要对外提供的实现细节。 ②使用者只能通过事先定制好的方法来访…

跑来跑去:假人与AWS Lambda的第一次接触

一切始于埃及人在一个木框上滑动几块大理石以简单的算术使其大脑放松。 或许是希腊人发明了Antikythera机制来追踪行星的运动至每千年2度的精度 。 无论哪种方式,计算都已经走了很长一段路:查尔斯巴贝奇的分析引擎 ,艾伦图灵的Enigma-breaker…

(2.1)HarmonyOS鸿蒙Ability创建,XML和Java页面布局UI

鸿蒙UI中,提供了两种编写布局的方式: ①在XML中声明UI布局 ②在Ability代码中直接通过Java创建布局 这两种方式创建出的布局没有本质差别,但是XML方式较为方便简单。 在XML文件中布局 与HTMLCSS的前端布局类似,通过使用不同类型的…

cstring越界_CString和char*的转换

方法1、const char*转换CString str;const char *p(const char*)str;const char *表示你对字符串只读,所以这时候可以直接获取。方法2、使用强制类型转换如需要对字符串写权限,则:CString str;char *p (char *)(const char *)str;方法3、使用…

使用Azure Blob存储托管Maven工件

如果您使用Microsoft Azure并且将Java用于项目,则Azure Blob存储是托管团队工件的理想场所。 它很容易设置,而且很便宜。 如果您对它们的功能不特别感兴趣,那么它比设置现有存储库选项(jfrog,nexus,archiv…

(2.2)HarmonyOS鸿蒙页面跳转

本文页面跳转基于《Ability创建子页面布局》所存在的两个页面MainAbility和SecondAbility。 在MainAbilitySlice中进行代码编写 package com.example.myapplication.slice;import com.example.myapplication.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import o…

java 将换行代替_Java批量将文件中的段落替换成空格,根据指定分隔符换行(SQL示例)...

我的需求是SQL文件中有成千的类似数据,我要将它们进行转换格式,如下图第一步:将字符段楼替换,使用word排版把数据拷贝到word中,使用特殊字符替换点击全部替换,替换之后如下图,这时候它是一串很长…

wicket_Wicket模型的干净方法

wicketApache Wicket Web框架的核心概念之一是模型和IModel作为其编程接口。 Wicket组件严重依赖模型,这使它们成为体系结构的重要组成部分。 Apache Wicket是一个有状态框架,将页面及其组件存储到通常位于HTTP会话中的页面存储中。 组件根据模型的内容创…