VBScript:如何将记录集中的值设置为字符串
问题描述:
这可能是一个初学者问题,但是如何将记录集设置为字符串变量?VBScript:如何将记录集中的值设置为字符串
这里是我的代码:
Function getOffice (strname, uname)
strEmail = uname
WScript.Echo "email: " & strEmail
Dim objRoot : Set objRoot = GetObject("LDAP://RootDSE")
Dim objDomain : Set objDomain = GetObject("LDAP://" & objRoot.Get("defaultNamingContext"))
Dim cn : Set cn = CreateObject("ADODB.Connection")
Dim cmd : Set cmd = CreateObject("ADODB.Command")
cn.Provider = "ADsDSOObject"
cn.Open "Active Directory Provider"
Set cmd.ActiveConnection = cn
cmd.CommandText = "SELECT physicalDeliveryOfficeName FROM '" & objDomain.ADsPath & "' WHERE mail='" & strEmail & "'"
cmd.Properties("Page Size") = 1
cmd.Properties("Timeout") = 300
cmd.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Dim objRS : Set objRS = cmd.Execute
WScript.Echo objRS.Fields(0)
Set cmd = Nothing
Set cn = Nothing
Set objDomain = Nothing
Set objRoot = Nothing
Dim arStore
Set getOffice = objRS.Fields(0)
Set objRS = Nothing
End function
当我尝试运行的功能,它抛出一个错误“VBScript运行时错误:类型不匹配” 我想这意味着它不能设置字符串变量与记录集值。
我该如何解决这个问题?
我只是试图
如果ISNULL(objRS.Fields(0)。价值)= TRUE则 getOFfice = “noAD” 别的 getOFfice = objRS.Fields(0)。价值 端如果
而且引发不同的错误ADODB.Field:BOF或EOF为True,或者当前记录已被删除。请求的操作需要当前记录。
答
这是我的经验认为,从数据库调用返回数据的各种方式往往非常依赖于用于访问数据的方法/驱动程序(例如ODBC,ADO,ADO.NET,ODP.NET,OleDB等)。有些需要ToStri ng(),GetString(),一个强制转换或其他一些变体。
答
我刚刚结束在上面添加“On Error Resume Next”,它只是跳过空错误。
虽然我希望有更简单的方法来处理vbscript中的NULL值。
感谢您的全力帮助
答
您确定自己的记录集不是空的吗?通常情况下,在开始做任何事之前,你首先要检查一下。不知道别的什么需要做的,我可能会建议是这样的:
Function getOffice (strname, uname)
strEmail = uname
WScript.Echo "email: " & strEmail
Dim objRoot : Set objRoot = GetObject("LDAP://RootDSE")
Dim objDomain : Set objDomain = GetObject("LDAP://" & objRoot.Get("defaultNamingContext"))
Dim cn : Set cn = CreateObject("ADODB.Connection")
Dim cmd : Set cmd = CreateObject("ADODB.Command")
cn.Provider = "ADsDSOObject"
cn.Open "Active Directory Provider"
Set cmd.ActiveConnection = cn
cmd.CommandText = "SELECT physicalDeliveryOfficeName FROM '" & objDomain.ADsPath & "' WHERE mail='" & strEmail & "'"
cmd.Properties("Page Size") = 1
cmd.Properties("Timeout") = 300
cmd.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Dim objRS : Set objRS = cmd.Execute
If Not objRS.BOF Then objRS.Move First
If Not objRS.EOF Then
If Not IsNull(objRS.Fields(0)) and objRS.Fields(0) <> "" Then WScript.Echo cStr(objRS.Fields(0))
End If
Set cmd = Nothing
Set cn = Nothing
Set objDomain = Nothing
Set objRoot = Nothing
Dim arStore
Set getOffice = objRS.Fields(0)
Set objRS = Nothing
End function
显然,有检查一个空的记录,并检查空值等多种方法,但这里有一个方法可能工作。
答
Set仅用于对象,它不能用于像字符串这样的简单变量。
试试这个:(这也可以确保记录不为空)
If objRS.RecordCount <> 0 Then
getOffice = CStr(objRS.Fields(0))
Else
getOffice = ""
End If
答
试试这个:
getOffice = objRS.getString
这将返回整个记录的制表符分隔字符串。
Set getOffice = objRS.Fields(0) 不能正确 - 只有对象被设置,并且您正在处理字符串。您还应该首先测试记录集的eof和bof。 – Fionnuala 2008-11-20 11:18:27