现在想用WinCC和Oracle数据库连接通信。连接已经没有问题,简单的读写也没有问题。
我得代码如下:
strConnectionString = "DRIVER={Oracle ODBC Driver};UID=Sys;PWD=Sys;DBQ=Sys;"
strSQL = "select name from stu where ID = 1;"
Set objConnection = CreateObject("ADODB.Connection")
objConnection.connectionString = strConnectionString
objConnection.Open
Set objRecordset = CreateObject("ADODB.Recordset")
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = strSQL
Set objRecordset = objCommand.Execute
lngCount = objRecordset.Fields.Count
If (lngCount>0) Then
objRecordset.movefirst
lngValue = objRecordset.Fields(0).Value
HMIRuntime.Tags("dbValue").Write lngValue
...
(dbValue为我自己定义的接受数值的内部变量)
以上代码经测试没有问题,现在还有些功能不知道怎么实现:
1,当我想在STU表中选择ID = 1时候的两列:Name和Address(都存在)的时候,如何操作,上述过程只选择了Name,如果写入"Select name,address from stu where id = 1;"的时候,objRecordset.Fields(0).Value按我得理解应该有两个列的数值,这时候想给我的变量赋值要怎么做呢?(以dbValue1,dbValue2为例)
2,我如何在我得SQL语句中加入变量,比如,当我要执行插入语句"insert into stu(id,name) values(3,'RRR')"直接excute就可以了,但是,如果我得'RRR'是一个变量(str变量)来的值,那要怎么写呢?我尝试了"insert into stu(id,name) values(3,'"+str+"')"不行。不知道怎么做了。
3,当我想对Recordset取得的结果进行有无判断的时候,按照我得理解,我是检查lngCount是否等于0,但实际上既是搜索结果为空的时候,lngCount依然为1(为多个的时候也是1),所以if无论如何都会被执行(else总部执行),不知道错到什么地方了,要实现这种功能我应该怎么办呢?
-----------
另外上次提问关于Wincc中方法的应用问题的时候,分给错了。。。应该给 dcount107的,由于匆忙没有仔细看, 分数给错了,dcount107得答案非常简明到位,希望 dcount107能看到,多谢了。
问题补充:
第二个问题已经解决了,用那种方式是可以的,刚才可能代码写错了。请大家集中在第一个和第三个问题上吧。谢谢。
最佳答案
咦,我看到了,呵呵。问题解决就行,不必介怀。
说实在话,你的问题已经远远超出了WinCC的范围,建议你多找一些数据库方面的资料看看。
1、"Select name,address from stu where id = 1;"
objRecordset.Fields(0).Value 就是name字段的值
objRecordset.Fields(1).Value 就是address字段的值
为了使程序更加明了,建议使用objRecordset.Fields("name").Value和objRecordset.Fields("address").Value的方法;
3、objRecordset.Fields.Count这里取到的是字段的数量,而不是记录的数量,要用objRecordset.RecordCount;
提问者对于答案的评价:
非常感谢!!!我还有个问题,已经没有分数了,用MJconfig这个id发了问题了,50分,希望你也能帮我回答啊!!太感谢了!!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc273014.html