故事作者:zhangli0

最近创作

看看TA的故事

wincc中关于先赋值后使用的错误例子

已锁定

zhangli0

西门子1847工业学习平台

  • 帖子

    17141
  • 精华

    63
  • 被关注

    890

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

wincc中关于先赋值后使用的错误例子

196

7

2024-01-09 09:00:15

Sub OnClick(ByVal Item)                                                

Dim conn,oCom,rst1,sel1,mysql1

'On Error Resume Next

Dim group1

Dim m,i,j,k,columcount,addheader

m=0

'---------------------数据库建立连接 ADODB---------------------'

Set conn=CreateObject("ADODB.Connection")

Set rst1=CreateObject("ADODB.Recordset")

'---------------------连接数据库,输入账号及密码---------------------'

conn.Open "DSN=refire_mzDB;uid=sa;pwd=refire_mz;"

'---------------------查询数据库---------------------'

sel1= "SELECT * FROM [dbo].[Table1]"'读取字段SN 赋予Sell

Set rst1=conn.Execute(sel1)

rst1.movefirst

columcount=rst1.fields.count

Do While Not rst1.EOF 

m=m+1

rst1.movenext

Loop

Msgbox m

Dim mysreadsheet,myworksheet

rst1.movefirst

Dim mycolumns 

i=2

Set mysreadsheet=ScreenItems("控件1")

For addheader=1 To columcount

mysreadsheet.rows(1).Cells(addheader)=CStr(rst1.fields(addheader-1).name)

Next    

Do While Not rst1.EOF 

mysreadsheet.rows(i).Cells(1)=CStr(rst1.fields(0).value)

For addheader=2 To columcount

    mysreadsheet.rows(i).Cells(addheader)=CStr(rst1.fields(addheader-1).value)

    Next

i=i+1

rst1.movenext

Loop

' 关闭记录集

rst1.Close ' 释放指针

' 关闭数据库连接

conn.Close ' 释放连接

Set rst1 = Nothing ' 断开句柄

Set conn = Nothing ' 断开连接

MsgBox("查询结束")

End Sub

这是我写的一个简单的例子程序,这个是正常可以用的,它的目的就是读取数据库中的数据,然后显示到wincc中的Excel控件中。


这是我实际测试中发现的问题:

1、我想用msgbox显示m的值,m是数据库中的记录条目数,原来是想用recordcount来读取记录数的:m=rst1.recordcount,实际测试中m的返回值一直是-1,百度查询得知-1表示ADO 无法确定记录数,或者如果提供程序或游标类型不支持 RecordCount ,该属性将返回 -1。 读取已关闭的 Recordset 的 RecordCount 属性将导致错误。Recordset 对象的游标类型决定是否能确定记录数。 对于只进游标,RecordCount 属性将返回 -1 ;对于静态游标或键集游标,则返回实际记录数;而对于动态游标,则返回 -1 或实际记录数。目前无法找到这个问题的处理方法,所以曲线救国,用了替代方法:

Do While Not rst1.EOF 

m=m+1

rst1.movenext

Loop

这就是遍历数据库的查询结果,统计数据的条目数。

2、原来方框中的代码是放到1处的,之所以犯这种低级错误,是因为这个代码有部分是从别的项目代码中复制过来的,按照原来的错误逻辑是先使用了

For addheader=1 To columcount

mysreadsheet.rows(1).Cells(addheader)=CStr(rst1.fields(addheader-1).name)

Next    

然后才

Set mysreadsheet=ScreenItems("控件1")

这样就造成了程序错误,无法读取mysreadsheet的参数,造成无法把列标题写到Excel控件中,后面的脚本就执行错误了。移动了代码的位置后,程序正常了。


wincc中关于先赋值后使用的错误例子 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3364条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。