VBScript:如何将记录集中的值设置为字符串

时间:2008-11-19 23:08:40

标签: vbscript string recordset

这可能是一个初学者问题,但是如何将记录集设置为字符串变量?

这是我的代码:

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,或者当前记录已被删除。请求的操作需要当前记录。

7 个答案:

答案 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

显然,有很多方法可以检查空记录集,并检查空值等,但这是一种可行的方法。