这可能是一个初学者问题,但是如何将记录集设置为字符串变量?
这是我的代码:
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).Value)= TRUE则 getOFfice =“noAD” 其他 getOFfice = objRS.Fields(0).VAlue 结束如果
然后抛出不同的错误ADODB.Field:BOF或EOF为True,或者当前记录已被删除。请求的操作需要当前记录。
答案 0 :(得分:3)
试试这个:
getOffice = objRS.getString
这会将整个记录集作为制表符分隔的字符串返回。
答案 1 :(得分:2)
Set仅用于对象,不能用于像字符串这样的简单变量 试试这个:(它还确保记录集不为空)
If objRS.RecordCount <> 0 Then
getOffice = CStr(objRS.Fields(0))
Else
getOffice = ""
End If
答案 2 :(得分:0)
Cstr(objRS.Fields(0))
答案 3 :(得分:0)
尝试更改此内容:
设置getOffice = objRS.Fields(0)
到此:
getOffice = objRS.Fields(0)
答案 4 :(得分:0)
根据我的经验,从数据库调用返回数据的各种方法通常非常依赖于用于访问数据的方法/驱动程序(例如ODBC,ADO,ADO.NET,ODP.NET,OleDB等) 。)有些人需要ToString(),GetString(),一个演员或其他一些变体。
答案 5 :(得分:0)
我刚刚在顶部添加了“On Error Resume Next”,它只是跳过了空错误。
虽然我希望有一种更简单的方法来处理vbscript中的NULL值。
感谢您的所有帮助
答案 6 :(得分:0)
你确定你的记录集不是空的吗?通常,在开始做任何事情之前,您需要先检查一下。我不知道它需要做什么,我可能会建议这样的事情:
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
显然,有很多方法可以检查空记录集,并检查空值等,但这是一种可行的方法。