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下载后的画面和PC里编程的不一样

    我用pc编程然后下载到WINCC里,结果发现我下载到wincc触摸屏里的内容和我PC里编程出来的不一样,这是为什么呀? 问题补充:就是没有把原来屏里的内容覆盖掉 现在解决…

    SIMATIC WinCC 2019年6月11日
  • wincc中怎么保存文本变量到内部变量

    VALVE_STATUS = "0"保存到8位文本形式的内部变量中为什么读出来时一片空白,难道wincc里只能VALVE_STATUS&nb…

    SIMATIC WinCC 2020年11月1日
  • WINCC通过MQTT协议分发数据

    WINCC 7.5SP1 的云连接功能,支持MQTT,西门子发的参考案例中使用了AWS云服务。我们这的情况是有一台固定公网IP服务器,安装了linux系统,自建…

    SIMATIC WinCC 2020年11月1日
  • SQL2005开机重装

    我安装wincc6.2的附件SQL2005,没有成功,就算了。不用wincc6.2了。但电脑每次开机或重启都会自动安装SQL2005,都不成功。怎么样能够去掉,我的系统是XP&nb…

    SIMATIC WinCC 2019年6月11日
  • 如何记录下操作员的操作信息

    现在要在画面上做个小功能,比如我用这个用户名登陆了后,我的所有操作信息都可以自动保存为记事本的格式记录下来;这个该怎么做? 问题补充:能再具体点吗?还不是很明白 最佳答案 记事本来…

    SIMATIC WinCC 2019年6月11日
  • Web客户端OCX控制显示不出来

    我在WINCC7.0SP3上发布了远程Web画面,在客户端所有画面都可以显示出来,就是画面中的动态控件显示不出来,控件是OCX类型的,不知道是什么原因,请各位大侠指导!! 最佳答案…

    SIMATIC WinCC 2017年6月18日
  • 如何在同一个画面窗口中显示不同的画面?

    画面窗口的使用 课程编号:V1227 本视频详细介绍了如何使用WinCC中的画…. 点击这里,打开新窗口观看完整视频 该视频下的所有用户提问列表 如何在同一个画面窗口中显示不同…

    2017年11月12日
  • WINCC库图旋钮

    WINCC库图某旋钮,属性—事件—鼠标,其C动作程序已经自动生成。如何应用其C动作,比如将该旋钮和PLC某变量联系起来控制自己的程序等? 最佳答案 属性最后一项-toggl…

    SIMATIC WinCC 2019年6月11日
  • 遇到一个wincc的奇怪问题,求解答

    wincc运行项目,画面上的控制显示不正常,一张画面上有的控件显示颜色正常,有的就显示灰色。换一台电脑还是这样,后来发现,运行起画面来,找到不正常的画面,点击一下保存,再切换到这样…

    2020年11月1日
  • wincc与s7-400通信

    五台装有相同Wincc界面的客户机,通过以太网CP443-1访问S7-400 (cpu 416),只有首先运行的两台客户机可以正常访问S7-400中的数据,后面…

    SIMATIC WinCC 2019年6月11日