wincc6.0 vbs 访问数据库

现在要在oracle数据库上读取数据(8i),我用了一个Function返回相应的值,其中strSQL为数据库查询语句,i对应表的列,然后我在一个button中使用这个Function,问题是,如果我要访问的列的类型是varchar2的,那么没问题能正确返回,但是如果是number的,就不能返回,请大家帮忙看看:
 Function如下:
 Function ConnectFunGetValue(strSQL,i)
 Dim objConnection
 Dim objCommand
 Dim objRecordset
 Dim strConnectionString
 Dim lngValue
 Dim lngCount
 Dim str3

 strConnectionString = "DRIVER={Oracle ODBC Driver};UID=123;PWD=123;DBQ=dbac;"
 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
 MsgBox(lngValue)
 '以上都没有问题,如果是number类型,下边的语句就执行不过去了,但是如果是varchar2就没有问题
 objRecordset.movefirst
 MsgBox(lngValue)
 lngValue = objRecordset.Fields(i).Value
 'HMIRuntime.Tags("dbValue").Write CDbl(lngValue)
 Else
 HMIRuntime.Trace "Selection returned no fields" & vbNewLine 
 End If
 Set objCommand = Nothing
 objConnection.Close
 Set objRecordset = Nothing
 Set objConnection = Nothing
 ConnectFunGetValue = lngValue
 End Function

 在button中的调用函数如下:
 Dim i
 i = (ConnectFunGetValue("select num1 from rc_test where id = '001'",0))
 MsgBox(i)

 以上的num1是number(5)类型,如果换位varchar2类型的id,那么没有任何问题,请问到底是怎么回事(数据是存在的)?
 因为不懂vbs,只能向大家求教了,谢谢!
 请详细指教,如果有可以读取的方法请直接详细写出,因为我看不太懂vbs,很多地方如果只是点到即止我可能根本看不懂,不知道如何操作,麻烦大家了,最好是成熟的代码,再次感谢!

问题补充:
num1是varchar2的时候没有问题,我的id是varchar2类型的。。。否则num1是字符型怎么过得去,再次重申,id为varchar2类型,如果num1是varchar2类型将没有问题,能够正常查询得到结果,但是如果将num1改为number类型,在语句objRecordset.movefirst之后都不会执行(我用了一个笨方法,就是在此语句之前的msgBox都会提示,之后就不会提示了),之前都正常执行,请指教,谢谢!问题补充机会有限,希望大家能够明白,不行就又要重新开贴了。谢谢!

最佳答案

问题应该出在select num1 from rc_test where id = '001'语句中,这是数据库查询语句,这就要看在数据库中定义id的数据类型,如果是number则查询语句的001是不需要带单引号的,如果是字符串类型则需要带单引号的,而你的查询语句(select num1 from rc_test where id = '001')中001带有单引号,所以才会出现类似问题(如果是number类型,下边的语句就执行不过去了,但是如果是varchar2就没有问题),数据库查询语句要严格按照数据库中数据类型来写的;所以按照数据库中数据类型修改001中的单引号应该没问题.
问题补充:要不你就改成(select * from rc_test where id = '001'",2),后面的2根据你的num1在数据库中的列而定,反正肯定是个常数,这样就不管num1是什么类型的数据了,试试看!

提问者对于答案的评价:
收分

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc269442.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2019年6月11日 上午6:47
下一篇 2019年6月11日 上午6:47

相关推荐

  • 如何在WINCC中加入故障复位按钮

    想在WINCC中加入个按钮能够用鼠标点击进行以报警的故障复位 最佳答案 我也刚做了一个。 程序在PLC中实现,报警输出变量进行互锁,在触发条件后加入报警复位。 …

    SIMATIC WinCC 2019年6月11日
  • 关于WinCC7.3 C/S架构下 客户端Horn报警声音的问题

    项目的配置为WinCC Server 两台冗余, Client 一台,使用Horn组态报警声音,其中在两台Server上都可以发出报警声音,…

    SIMATIC WinCC 2017年6月7日
  • 用户归档ID

    在用户归档中如果删除某一段配方表数据后,该段内ID会消失,如果此时再建立一个新的数据,则ID会顺延,请问:1.如果ID继续变大,当达到最大值后会重新走ID=1开始吗?2.如何再次走…

    SIMATIC WinCC 2019年6月11日
  • DCS是什么东西,为什么能控制很多设备

    请教一下DCS是什么东西,DCS是一台具有通信功能的电脑吗,还是指的是软件,或是CPU,客户机,网上的解释看不懂,一头雾水,请问有懂的大神帮忙解答一下. 钻石用户推荐最佳答案 DC…

    SIMATIC WinCC 2021年7月5日
  • wincc 无线远程

    请教:由于设备和中控室距离太远,想无线通讯。Wincc 有IE版本的吗?PLC连接DTU无线模块,上位机的WINCC 和PLC无线通讯,有这类模块或者协议吗? …

    SIMATIC WinCC 2017年7月26日
  • 自己设计登陆框的问题

    #pragma code ("UseAdmin.DLL") #include "pwrt_api.h&quot…

    SIMATIC WinCC 2019年6月11日
  • wincc报警消音问题

    我用Horn做的报警,当有错误报警时,电脑会播放声音文件,当报警自动消除后,声音还在播放,只有确认报警后声音才不再播放。我的目的是希望报警消除后,声音自动停止播放,不需要每次都得确…

    SIMATIC WinCC 2019年6月11日
  • Wincc 7.0 客户机项目可以生成自己的数据包么?

    我现在的项目的操作记录是以报警消息的模式做的,消息记录存在各自的客户机上,A客户机的操作记录只能在A客户机上查看,在B客户机或者服务器上都不好看到A的操作记录,想通过某台服务器加载…

    SIMATIC WinCC 2018年12月6日
  • VBA代码求解释

    Dim objExcelApp Set objExcelApp =CreateObject("Excel.Application&…

    SIMATIC WinCC 2021年7月5日
  • 管理员组下的管理员

    管理员的更名怎么做,还有是这个管理员更改口令,原来安装的 时候就有还是后来设定?需要输入原来的口令,我新建的项目拿来的口令呀,想改掉这个管理员的名称也不行,到底怎么才能更…

    SIMATIC WinCC 2019年6月11日