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日
下一篇 2019年6月11日

相关推荐