现在要在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