WinCC笔记:01.TreeView控件 —— (2)连接数据库创建节点

目录

一、最终效果图

二、数据库一览

三、代码

四、代码分析


一、最终效果图

二、数据库一览

这里使用的是SQL Server Tools 18,可以链接到WinCC自动生成的数据库。首先使用WinCC的vbs脚本,写了一段程序,在数据库中建了一个表格,如下所示。这里用GCS_GCS的TagLog表格。

三、代码

Sub OnOpen()                                                                                                                      
Dim TV,NodeIndex1,NodeIndex2,NodeIndex3,Category,GroupName
Set TV=ScreenItems("TV")
TV.Nodes.Clear '先清空
TV.Style=6 '6.直线、+/-和文本;
TV.LineStyle =1

Dim conn1,oCom1,oRs1,oCom2,oRs2,oCom3,oRs3
Set conn1 = CreateObject("ADODB.Connection")
conn1.connectionstring = "Driver={SQL Server};Server=WINCC\WINCC;database=GCS_WINCC;UID=;PWD=;" '注意服务器名称和数据库名称
conn1.CursorLocation = 3
conn1.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom1 = CreateObject("ADODB.Command")
oCom1.CommandType = 1
Set oCom1.ActiveConnection = conn1
oCom1.CommandText = "Select DISTINCT Category FROM Taglog"
Set oRs1 = oCom1.Execute
Set oRs2=CreateObject("ADODB.Recordset")
Set oCom2=CreateObject("ADODB.Command")
Set oCom2.ActiveConnection = conn1
Set oRs3=CreateObject("ADODB.Recordset")
Set oCom3=CreateObject("ADODB.Command")
Set oCom3.ActiveConnection = conn1

If Not oRs1.EOF Then
	oRs1.MoveFirst
End If
Do While Not oRs1.EOF
	Category=oRs1("Category")
	If Len(Category)=0 Then
		Category=" "
	End If
	Set NodeIndex1 = TV.Nodes.Add(,,"C" & Category,Category)
	NodeIndex1.Expanded = True
	oCom2.CommandText = "SELECT DISTINCT GroupName FROM Taglog where Category = '" & Trim(oRs1("Category")) & "'"
	Set oRs2 = oCom2.Execute
	If Not oRs2.EOF Then
		oRs2.MoveFirst
	End If
	
	Do While Not oRs2.EOF
	    GroupName=oRs2("GroupName")
	    If Len(GroupName)=0 Then
		    GroupName=" "
	    End If
		Set NodeIndex2 = TV.Nodes.Add("C" & Category,4,"C" & GroupName,GroupName)
	    NodeIndex2.Expanded = True
	    
	    oCom3.CommandText = "SELECT TagName FROM Taglog where GroupName = '" & Trim(oRs2("GroupName")) & "'"
	    Set oRs3 = oCom3.Execute
	    If Not oRs3.EOF Then
		    oRs3.MoveFirst
	    End If
	    Do While Not oRs3.EOF
		    Set NodeIndex3 = TV.Nodes.Add("C" & GroupName,4,"C" & Trim(oRs3("TagName")),oRs3("TagName"))
	        NodeIndex3.Expanded = True
		    oRs3.MoveNext
	    Loop
	    oRs3.Close
		oRs2.MoveNext
	Loop
	oRs2.Close
	oRs1.MoveNext	
Loop
Set oRs3=Nothing
Set oCom3=Nothing
Set oRs2=Nothing
Set oCom2=Nothing
oRs1.Close
Set oRs1=Nothing
Set oCom1=Nothing
conn1.Close
Set conn1=Nothing
Set TV = Nothing
Set NodeIndex1 = Nothing
Set NodeIndex2 = Nothing
Set NodeIndex3 = Nothing

End Sub

四、代码分析

(1)Set conn1=CreateObject("ADODB.Connection")

     用于与ODBC数据库建立连接,所有对数据库的操作均通过该连接进行。

       1. conn1.CursorLocation = 3

      CursorLocation 属性:设置或返回游标服务的位置

adUseNone没有使用游标服务。(该常量已过时并且只为了向后兼容才出现)
adUseClient使用由本地游标库提供的客户端游标。本地游标服务通常允许使用的许多功能可能是驱动程序提供的游标无法使用的,因此使用该设置对于那些将要启用的功能是有好处的。AdUseClient 具有向后兼容性,也支持同义的 adUseClientBatch。
adUseServer(缺省值)使用数据提供者的或驱动程序提供的游标。这些游标有时非常灵活,对于其他用户对数据源所作的更改具有额外的敏感性。但是,Microsoft Client Cursor Provider(如已断开关联的记录集)的某些功能无法由服务器端游标模拟,通过该设置将无法使用这些功能。

      ① 该属性允许在可用于提供者的各种游标库中进行选择。通常,可以选择使用客户端游标库或位于服务器上的某个游标库。
      ② 该属性设置仅对属性已经设置后才建立的连接有影响。更改 CursorLocation 属性不会影响现有的连接。
      ③ 对于 Connection 或关闭的 Recordset 该属性为读/写,对打开的 Recordset 该属性为只读。
      ④ 由 Execute 方法返回的游标继承该设置。Recordset 将自动从与之关联的连接中继承该设置。
      ⑤ 远程数据服务用法 当用于客户端 (ADOR) Recordset 或 Connection 对象时,只能将 CursorLocation 属性设置为 adUseClient。

       2. conn1.connectionstring = "Provider=ProviderName; DSN=DSNName; DRIVER=driver; SERVER=server; DATABASE=database; UID=user; PWD=password"

      ① Provider:数据提供者,默认状态下为MSDASQL,为微软OLEDB,通常省略;
      ② DSN:要打开的数据库对应的OBDC系统数据源(DSN),是可选参数;
      ③ DRIVER:要打开的数据库所用的驱动程序名称,是可选参数;
      ④ SERVER:要打开的数据库所在的服务器名称,本机可用(local),是可选参数;
      ⑤ DATABASE:要打开的数据库名称,是可选参数;
      ⑥ UID:用户名称,用来访问数据库,是可选参数;
      ⑦ PWD:用户密码,用来访问数据库,是可选参数。

       3. conn1.open (用于建立连接的方法为Open)

       4. conn1.close (关闭数据库连接的方法为Close)

(3)Set oRs1=CreateObject("ADODB.Recordset")

    如果要执行查询操作并返回查询结果,或者要更方便地操作数据表,那就需要用到数据集对象。是查询后返回的记录集。

(4)Set oCom1=CreateObject("ADODB.Command")

   对象定义了将对数据源执行的命令,可以用于查询数据库表并返回一个记录集,也可以用于对数     据库表进行添加、更改和删除操作。用于执行一条SQL语句。

(5)Set oCom1.ActiveConnection = conn1

    指示指定的Command、Recordset对象当前属于哪个Connection对象。

(6)oCom1.CommandType = 1

常量描述
adCmdUnspecified-1不指定指令类型自变量
adCmdText1指示提供者应该将Source作为命令的文本定义来计算
adCmdTable2指示ADO生成SQL查询以便从在Source中命名的表中返回所有行
adCmdStoredProc4将CommandText作为一个已存的程序名称
adCmdUnknown8默认值。指定未知的CommandText属性命令
adCmdFile256指示应从在Source中命名的文件中恢复保留(保存的)Recordset。它仅能与Recordset.Open 或 Requery 指令一起使用
adCmdTableDirect512指示提供者更改从在 Source 中命名的表中返回所有行 /
将CommandText作为一个表的名称(该表的列全部是通过内部的SQL查询语句返回的)。它仅适用Recordset.Open 或 Requery 指令;如果需要使用查找方式,那么Recordset必须以adCmdTableDirect打开。这个值不能与ExecuteOptionEnum值 adAsyncExecute一起使用

(8)oCom1.CommandText = "Select DISTINCT Category FROM Taglog"

     distinct:仅仅列出不同的值

(9)Set oRs1 = oCom1.Execute

    connection对象的execute方法基本就是后面跟SQL语句,直接获取你想要的结果。
    command对象可以用来执行存储过程,可以设置参数并获取返回值。

    Execute方法可执行 Command 对象的 CommandText 属性中指定的查询、SQL 语句或存储过程。

    如果 CommandText 属性指定以行返回的查询,执行产生的任何结果都将存储在新的 Recordset 对象中。如果此命令不是以行返回的查询,提供者将返回关闭的 Recordset 对象。

    语法:对于以行返回的 Command:

set rs=objcommand.Execute(ra,parameters,options)


    语法:对于不是以行返回的 Command:

objcmmand.Execute  ra,parameters,options

(10)oRs1.EOF

    EOF 指示当前记录位置位于 Recordset 对象的最后一个记录之后。返回的值为布尔量。

    BOF 指示当前记录位置位于 Recordset 对象的第一个记录之前。返回的值为布尔量。

(11)oRs1.MoveFirst  &  oRs1.MoveNext

    可以在记录集内移动指针,以便操作不同的数据记录

movelast将指针移到最后一条记录
movefirst指针移到首记录使用
previous移动到上一条记录使用
movenext移动到下一条记录

(12)oRs1("Category")

(13)oRs1.Close

     关闭后用set oRs1=Nothing来释放记录集的资源。

     如果不设置为Nothing会占用电脑的内存。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinCC是西门子公司的一款用于监制系统的软件平台。要连接数据库,可以使用WinCC提供的数据库接口功能。 以下是连接数据库的一般步骤: 1. 在WinCC创建一个新的数据源。打开WinCC项目,选择"项目"菜单,然后选择"配置数据源"选项。在弹出的对话框中,点击"添加"按钮,然后选择适合你的数据库类型,例如SQL Server、MySQL等。 2. 配置数据库连接参数。在数据源对话框中,填写数据库服务器的名称或IP地址、端口号以及数据库的名称等信息。根据你使用的数据库类型,还需要提供相应的用户名和密码等认证信息。 3. 测试数据库连接。点击"测试连接"按钮,WinCC会尝试连接数据库,并显示连接结果。如果连接成功,可以继续进行下一步操作。如果连接失败,检查数据库服务器和认证信息是否正确,并确保网络连接正常。 4. 在WinCC中配置数据点。选择要与数据库关联的变量或标签,右键点击并选择"属性"选项。在属性对话框中,选择"链接"选项卡,在"数据源"下拉菜单中选择刚刚创建的数据源。 5. 编写SQL查询语句。通过SQL语句查询数据库中的数据,并将结果与WinCC中的变量或标签关联起来。可以在属性对话框的"链接"选项卡中的"SQL语句"字段中编写SQL查询语句。 6. 运行和测试。保存配置并运行WinCC项目,观察WinCC界面上的变量或标签是否能正确地显示数据库中的数据。 请注意,具体的步骤和操作可能因不同的WinCC版本和数据库类型而有所不同。建议参考WinCC的官方文档或使用手册,以获得更详细和准确的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值