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报警记录编辑 快速的方法

    我下位机中有200个报警点,我在wincc 中做报警记录(一个个往里输入累还出错)有没有比较快速巧妙的方法啊?  求高手帮忙 谢谢 最佳答案…

    SIMATIC WinCC 2018年12月5日
  • 数据修改记录

    要怎么在%ignore_a_1%上对变量的修改情况进行查看,也就是可以通过在触摸屏上点击一个按钮,转到另一个界面或弹出一个对话框,显示变量的修改时间,最好也可以显示修改之后的变量值…

    SIMATIC WinCC 2021年7月5日
  • WINCC7.0在VISTA环境下连接SQLSERVER数据库

    目前非要把在XP下完成的项目移到VISTA下面用,原来用的好好的,连接数据库都没问题: strConnectionString ="Driver={S…

    SIMATIC WinCC 2019年6月11日
  • wincc 过程归档数据查询

    请问一下我用变量记录把变量值归档后用什么最简单的办法查询到任意时间段内的历史数据?别跟我说用在线表格和趋势,因为我试过满足不了我要求,因为我归一次档就有26个几台,每个几台有8个变…

    SIMATIC WinCC 2019年6月11日
  • 触摸屏KTP-178

    在做触摸屏178画面,我在画面1里放个按钮,按下这个按钮切换的画面2,按下这个按钮后必须输入用户名和密码才能进入画面2,当从画面2返回到画面1是,重新按按钮进入画面2,也要用户名和…

    SIMATIC WinCC 2019年6月11日
  • wincc历史曲线的曲线名称,可以随一键打印,打印出来

    wincc温度记录曲线,有6个点的温度记录,如何实现,把每条曲线的名称标注出来;一键打印时,曲线名称可以随曲线显示出来。当前使用的是7.3版本 最佳答案 趋势控件不能曲线上显示名称…

    SIMATIC WinCC 2021年7月5日
  • wincc7.5可以自己升级到wincc7.5sp1吗?

    有正版授权 最佳答案 可以升级参考:WinCC升级授权如何使用:http://www.ad.siemens.com.cn/productportal/prods/hmi/wincc…

    SIMATIC WinCC 2021年7月5日
  • 触摸屏控件text内容异常

    空间上文本输入时输入到英文部分中了,软件中显示的都为英文部分的内容,但是下到触摸屏中又是中文的内容。每次改完后都需要将触摸屏控件中英文的内容复制到中文中去才行。 问题补充:只需要中…

    2020年11月1日
  • 使用博图V13移植项目,报警出错

    源程序采用step7集成的winccflexibleSP4,现在更换新版的HMI需要使用博图软件对原画面程序进行移植,首先是讲画面从集成项目中拷贝出,然后另存为低版本的的SP2,再…

    2021年7月5日
  • WinCC哪个版本开始可以支持双屏显示?

    操作画面比较多,需要分屏显示,不知道WinCC想要做双屏显示该如何做?不想做成那种把画面做成两个屏大小的那种,想要让两个屏幕分别显示两个画面这样~ 最佳答案 如何实现简单的&nbs…

    SIMATIC WinCC 2021年7月5日