OptionExplicit
Functionaction
DimCnn
DimRST
DimstrCnn
DimM101
DimIS_LACK
strCnn="DSN=myoracle;UID=platform;PWD=123456;DBQ=172.16.1.27:1521/MIDDB"
SetCnn=CreateObject("ADODB.Connection")
cnn.ConnectionString=strCnn
Cnn.Open
SetRst=CreateObject("ADODB.Recordset")
Rst.open"SELECTCUT_FLUID_TYPE,IS_LACKFROMLIQUID_SHORTwhereIS_LACK=1ANDFLAG=1",Cnn,2,2
HMIRuntime.Tags("CUT_FLUID_TYPE").WriteRst("CUT_FLUID_TYPE")
HMIRuntime.Tags("IS_LACK").WriteRst("IS_LACK")
Rst.close
SetRst=Nothing
cnn.close
Setcnn=Nothing
SetIS_LACK=HMIRuntime.Tags("IS_LACK")
SetM101=HMIRuntime.Tags("M101"
M101.Read
IS_LACK.Read
M101.Value=IS_LACK.Value
M101.Write
EndFunction
这段代码把数据从数据库中读出来并写到PLC中已经没问题,现在我的问题是数据表中的FLAG这个值当我这行读完后我要把这个值改为2,修改数据表值的代码为UPDATELIQUID_SHORTSetFLAG=2这里有2个问题要问1:这句代码我要加在上面代码的哪个位置,我加在CNN2,2后面编译直接报错。2:我要改的FLAG只改我刚刚读的那一行即可,应该改为UPDATELIQUID_SHORTSetFLAG=2where行=刚才那行这个要怎么写
问题补充:
加到Rst.close前面会报错,
另外有IDID为字符串格式,我在脚本内建内部变量DIMaaa让这个aaa等于刚才我读的那一行怎么写,还有我要更新数据是直接加条件UPDATELIQUID_SHORTSetFLAG=2whereSN=aaa这样写执行不下去
图片说明:
最佳答案
和我用的这个方法不一样啊
1、应该加到Rst.close前面,写完PLC了在进行更新
2、表格里面有没有ID一列,用来标识每一行的唯一的标识符,如有的话,就加上whereID=刚才读的那行的ID
补充:
我用过的操作数据库方式和你不同
给你几个文档参考一下:
wincc数据开放性
htTPs://support.industry.siemens.com/cs/cn/zh/view/78682604
在WinCC中如何使用VBS读取报警记录数据到EXCEL
https://support.industry.siemens.com/cs/cn/zh/view/77938393
在WinCC中如何使用VBS读取变量归档数据到EXCEL
https://support.industry.siemens.com/cs/cn/zh/view/77940055
通过VBS脚本在ListView控件中显示WinCC的变量记录
https://support.industry.siemens.com/cs/cn/zh/view/74932765
WinCC、Excel、VBA、脚本、连通性软件包
https://support.industry.siemens.com/cs/cn/zh/view/71676391
WinCC数据报表实现方法介绍
https://support.industry.siemens.com/cs/cn/zh/view/78668993
还有不明白的,可以在论坛发帖子
再补充,我以为你会用,看起来不是很会,在后面加入应该这样加啊
Rst.open"UPDATELIQUID_SHORTSetFLAG=2",Cnn,2,2
这个sql语句不一定对哈,直接复制您的,自己测试
提问者对于答案的评价:
非常感谢,我后来也是不停的先关闭表再打开表这样操作,写变量为"&V1&"要加双引号和&