Board index » Visual Studio » Inscrutable Type Mismatch Error

Inscrutable Type Mismatch Error

Visual Studio224
I've taken Charles Oppermann's excellent phone directory command line VBS and

tried to use it as a web application. I have added the necessary input field

and output location but the very end of the script throws Microsoft VBScript

runtime error '800a000d' Type mismatch errors. My entire site utilizes user

authentication so I know that the problem can't be there but I'm missing

something else, perhaps in my variable declaration.



The specific line causing the error is in the final loop:



strDisplayLine = objADORecordset.Fields("cn").Value & vbTab



= = = = = = = = = =



<%@ LANGUAGE="VBSCRIPT" %>

<%

Option Explicit

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>LDAP Lookup</title>

<style type="text/css">

body, input, select, table, textarea

{

font-size: 9pt;

font-family: arial;



}



.niceButton {

font-size : 9pt;

font-family : arial;

background-color : #eaeaea;

color : #333333;

font-weight : bold;

border-width : thin;

}

</style>

<%



dim strPerson, objADsRootDSE, strADsPath, strBase, strObjects, strName,

strAttributes, strScope, objADOConnection, objADOCommand, objADORecordset,

strDisplayLine, strFilter

strPerson = trim(request.form("last"))

' Input box is not empty and Cancel button was not clicked



' Build the query string

' Active Directory OLEDB Provider format has four parts separated by

semi-colons:

' Root: which is the starting point for the search

' Filter: conditions to search on, using RFC 2254 format

' Attributes: attributes to return

' Scope: base, onelevel or subtree for entire directory partition



' Specify the search base.

' We'll use the global catalog for performance reasons since the

' Name and Telephone number attributes are available from the GC



' First, need to discover the local global catalog server

Set objADsRootDSE = GetObject("GC://RootDSE")



' Form an ADsPath string to the DN of the root of the Active Directory forest

strADsPath = "GC://" & objADsRootDSE.Get("rootDomainNamingContext")



' Wrap the ADsPath with angle brackets to form the base string

strBase = "<" & strADsPath & ">"



' Release the ADSI object, no longer needed

Set objADsRootDSE = Nothing



' Specify the LDAP filter

' First, indicate the category of objects to be searched (all people, not

just users)

strObjects = "(objectCategory=person)"



' If user enters "*", then filter on all people

If (strPerson = "*") Then

strName = "(sn=*)"

Else

strName = "(sn=" & strPerson & "*)"

End If



' Add the two filters together

strFilter = "(&" & strObjects & strName & ")"



' Set the attributes we want the recordset to contain

' We're interested in the common name and telephone number

strAttributes = "cn,telephoneNumber"



' Specify the scope (base, onelevel, subtree)

strScope = "subtree"



' Create ADO connection using the ADSI OLE DB provider

Set objADOConnection = CreateObject("ADODB.Connection")

objADOConnection.Open "Provider=ADsDSOObject;"



' Create ADO commmand object and associate it with the connection

Set objADOCommand = CreateObject("ADODB.Command")

objADOCommand.ActiveConnection = objADOConnection



' Create the command string using the four parts

objADOCommand.CommandText = strBase & ";" & strFilter & ";" & strAttributes

& ";" & strScope



' Set the number of records in the recordset logical page

'objADOCommand.Properties("Page Size") = 20



' Set the maximum result size

objADOCommand.Properties("Size Limit") = 20



' Sort the results based on the cn attribute

objADOCommand.Properties("Sort On") = "cn"



' Execute the query for the user in the directory

Set objADORecordset = objADOCommand.Execute



If objADORecordset.EOF Then

strDisplayLine = "No records were found."

Else

' Loop through all the returned records

While Not objADORecordset.EOF



' Display the row using the selected fields

strDisplayLine = objADORecordset.Fields("cn").Value & vbTab



' Check to see if telephone number field is null

If IsNull(objADORecordset.Fields("telephoneNumber")) Then

strDisplayLine = strDisplayLine & "(number not listed)"

Else

' Retrieve telephone number and add to line

strDisplayLine = strDisplayLine & objADORecordset.Fields("telephoneNumber")

End If



' Advance to the next record

objADORecordset.MoveNext



Wend

End If



' Close the ADO connection

objADOConnection.Close



%>

</head>

<body text="#333333"><%=strDisplayLine%></body></html>


-
 

Re:Inscrutable Type Mismatch Error

First, try it without ".Value"



strDisplayLine = objADORecordset.Fields("cn") & vbTab



Second, have you done a Response.Write on the field to see what it actually

contains? (var's in VBScript are automatically Variants, so it couldn't give

a right rats testical what the format is supposed to be, which means the

problem is most likely with the field itself (how you're trying to access it

perhaps?)).



--

Regards



Steven Burn

Ur I.T. Mate Group

www.it-mate.co.uk



Keeping it FREE!



"corbett" <corbett@discussions.microsoft.com>wrote in message

Quote
I've taken Charles Oppermann's excellent phone directory command line VBS

and

tried to use it as a web application. I have added the necessary input

field

and output location but the very end of the script throws Microsoft

VBScript

runtime error '800a000d' Type mismatch errors. My entire site utilizes

user

authentication so I know that the problem can't be there but I'm missing

something else, perhaps in my variable declaration.



The specific line causing the error is in the final loop:



strDisplayLine = objADORecordset.Fields("cn").Value & vbTab



= = = = = = = = = =



<%@ LANGUAGE="VBSCRIPT" %>

<%

Option Explicit

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>LDAP Lookup</title>

<style type="text/css">

body, input, select, table, textarea

{

font-size: 9pt;

font-family: arial;



}



.niceButton {

font-size : 9pt;

font-family : arial;

background-color : #eaeaea;

color : #333333;

font-weight : bold;

border-width : thin;

}

</style>

<%



dim strPerson, objADsRootDSE, strADsPath, strBase, strObjects, strName,

strAttributes, strScope, objADOConnection, objADOCommand, objADORecordset,

strDisplayLine, strFilter

strPerson = trim(request.form("last"))

' Input box is not empty and Cancel button was not clicked



' Build the query string

' Active Directory OLEDB Provider format has four parts separated by

semi-colons:

' Root: which is the starting point for the search

' Filter: conditions to search on, using RFC 2254 format

' Attributes: attributes to return

' Scope: base, onelevel or subtree for entire directory partition



' Specify the search base.

' We'll use the global catalog for performance reasons since the

' Name and Telephone number attributes are available from the GC



' First, need to discover the local global catalog server

Set objADsRootDSE = GetObject("GC://RootDSE")



' Form an ADsPath string to the DN of the root of the Active Directory

forest

strADsPath = "GC://" & objADsRootDSE.Get("rootDomainNamingContext")



' Wrap the ADsPath with angle brackets to form the base string

strBase = "<" & strADsPath & ">"



' Release the ADSI object, no longer needed

Set objADsRootDSE = Nothing



' Specify the LDAP filter

' First, indicate the category of objects to be searched (all people, not

just users)

strObjects = "(objectCategory=person)"



' If user enters "*", then filter on all people

If (strPerson = "*") Then

strName = "(sn=*)"

Else

strName = "(sn=" & strPerson & "*)"

End If



' Add the two filters together

strFilter = "(&" & strObjects & strName & ")"



' Set the attributes we want the recordset to contain

' We're interested in the common name and telephone number

strAttributes = "cn,telephoneNumber"



' Specify the scope (base, onelevel, subtree)

strScope = "subtree"



' Create ADO connection using the ADSI OLE DB provider

Set objADOConnection = CreateObject("ADODB.Connection")

objADOConnection.Open "Provider=ADsDSOObject;"



' Create ADO commmand object and associate it with the connection

Set objADOCommand = CreateObject("ADODB.Command")

objADOCommand.ActiveConnection = objADOConnection



' Create the command string using the four parts

objADOCommand.CommandText = strBase & ";" & strFilter & ";" &

strAttributes

& ";" & strScope



' Set the number of records in the recordset logical page

'objADOCommand.Properties("Page Size") = 20



' Set the maximum result size

objADOCommand.Properties("Size Limit") = 20



' Sort the results based on the cn attribute

objADOCommand.Properties("Sort On") = "cn"



' Execute the query for the user in the directory

Set objADORecordset = objADOCommand.Execute



If objADORecordset.EOF Then

strDisplayLine = "No records were found."

Else

' Loop through all the returned records

While Not objADORecordset.EOF



' Display the row using the selected fields

strDisplayLine = objADORecordset.Fields("cn").Value & vbTab



' Check to see if telephone number field is null

If IsNull(objADORecordset.Fields("telephoneNumber")) Then

strDisplayLine = strDisplayLine & "(number not listed)"

Else

' Retrieve telephone number and add to line

strDisplayLine = strDisplayLine &

objADORecordset.Fields("telephoneNumber")

End If



' Advance to the next record

objADORecordset.MoveNext



Wend

End If



' Close the ADO connection

objADOConnection.Close



%>

</head>

<body text="#333333"><%=strDisplayLine%></body></html>





-

Re:Inscrutable Type Mismatch Error

Thanks for those insights! I've decided to pursue a different tack and will

report back when I get it working.



"Steven Burn" wrote:



Quote
First, try it without ".Value"



strDisplayLine = objADORecordset.Fields("cn") & vbTab



Second, have you done a Response.Write on the field to see what it actually

contains? (var's in VBScript are automatically Variants, so it couldn't give

a right rats testical what the format is supposed to be, which means the

problem is most likely with the field itself (how you're trying to access it

perhaps?)).



--

Regards



Steven Burn

Ur I.T. Mate Group

www.it-mate.co.uk



Keeping it FREE!



"corbett" <corbett@discussions.microsoft.com>wrote in message

news:8368AB90-1DB3-4B34-8540-DAFED3E0DB94@microsoft.com...

>I've taken Charles Oppermann's excellent phone directory command line VBS

and

>tried to use it as a web application. I have added the necessary input

field

>and output location but the very end of the script throws Microsoft

VBScript

>runtime error '800a000d' Type mismatch errors. My entire site utilizes

user

>authentication so I know that the problem can't be there but I'm missing

>something else, perhaps in my variable declaration.

>

>The specific line causing the error is in the final loop:

>

>strDisplayLine = objADORecordset.Fields("cn").Value & vbTab

>

>= = = = = = = = = =

>

><%@ LANGUAGE="VBSCRIPT" %>

><%

>Option Explicit

>%>

><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

><html>

><head>

><title>LDAP Lookup</title>

><style type="text/css">

>body, input, select, table, textarea

>{

>font-size: 9pt;

>font-family: arial;

>

>}

>

>.niceButton {

>font-size : 9pt;

>font-family : arial;

>background-color : #eaeaea;

>color : #333333;

>font-weight : bold;

>border-width : thin;

>}

></style>

><%

>

>dim strPerson, objADsRootDSE, strADsPath, strBase, strObjects, strName,

>strAttributes, strScope, objADOConnection, objADOCommand, objADORecordset,

>strDisplayLine, strFilter

>strPerson = trim(request.form("last"))

>' Input box is not empty and Cancel button was not clicked

>

>' Build the query string

>' Active Directory OLEDB Provider format has four parts separated by

>semi-colons:

>' Root: which is the starting point for the search

>' Filter: conditions to search on, using RFC 2254 format

>' Attributes: attributes to return

>' Scope: base, onelevel or subtree for entire directory partition

>

>' Specify the search base.

>' We'll use the global catalog for performance reasons since the

>' Name and Telephone number attributes are available from the GC

>

>' First, need to discover the local global catalog server

>Set objADsRootDSE = GetObject("GC://RootDSE")

>

>' Form an ADsPath string to the DN of the root of the Active Directory

forest

>strADsPath = "GC://" & objADsRootDSE.Get("rootDomainNamingContext")

>

>' Wrap the ADsPath with angle brackets to form the base string

>strBase = "<" & strADsPath & ">"

>

>' Release the ADSI object, no longer needed

>Set objADsRootDSE = Nothing

>

>' Specify the LDAP filter

>' First, indicate the category of objects to be searched (all people, not

>just users)

>strObjects = "(objectCategory=person)"

>

>' If user enters "*", then filter on all people

>If (strPerson = "*") Then

>strName = "(sn=*)"

>Else

>strName = "(sn=" & strPerson & "*)"

>End If

>

>' Add the two filters together

>strFilter = "(&" & strObjects & strName & ")"

>

>' Set the attributes we want the recordset to contain

>' We're interested in the common name and telephone number

>strAttributes = "cn,telephoneNumber"

>

>' Specify the scope (base, onelevel, subtree)

>strScope = "subtree"

>

>' Create ADO connection using the ADSI OLE DB provider

>Set objADOConnection = CreateObject("ADODB.Connection")

>objADOConnection.Open "Provider=ADsDSOObject;"

>

>' Create ADO commmand object and associate it with the connection

>Set objADOCommand = CreateObject("ADODB.Command")

>objADOCommand.ActiveConnection = objADOConnection

>

>' Create the command string using the four parts

>objADOCommand.CommandText = strBase & ";" & strFilter & ";" &

strAttributes

>& ";" & strScope

>

>' Set the number of records in the recordset logical page

>'objADOCommand.Properties("Page Size") = 20

>

>' Set the maximum result size

>objADOCommand.Properties("Size Limit") = 20

>

>' Sort the results based on the cn attribute

>objADOCommand.Properties("Sort On") = "cn"

>

>' Execute the query for the user in the directory

>Set objADORecordset = objADOCommand.Execute

>

>If objADORecordset.EOF Then

>strDisplayLine = "No records were found."

>Else

>' Loop through all the returned records

>While Not objADORecordset.EOF

>

>' Display the row using the selected fields

>strDisplayLine = objADORecordset.Fields("cn").Value & vbTab

>

>' Check to see if telephone number field is null

>If IsNull(objADORecordset.Fields("telephoneNumber")) Then

>strDisplayLine = strDisplayLine & "(number not listed)"

>Else

>' Retrieve telephone number and add to line

>strDisplayLine = strDisplayLine &

objADORecordset.Fields("telephoneNumber")

>End If

>

>' Advance to the next record

>objADORecordset.MoveNext

>

>Wend

>End If

>

>' Close the ADO connection

>objADOConnection.Close

>

>%>

></head>

><body text="#333333"><%=strDisplayLine%></body></html>







-