homeshopper
asked on
error '800a000d' Type mismatch: 'strRowArray' for Session Array
I am getting the following error in line 179 of Classic ASP code. It works in VB.net.
I am trying to asign a multi-dimention array to Session and vice versa.
Microsoft VBScript runtime error '800a000d' Type mismatch: 'strRowArray' for Session Array
If (strRowArray(i, j) = "" ) Then 'error:Line 179 Type mismatch: 'strRowArray'
This session array comes from Line 385
Session("strArrayDetail33" ) = strRowArray ' Line 385 strArrayDetail33
For clarity I am posting full code below:
Thanks in advance for any help given.
I am trying to asign a multi-dimention array to Session and vice versa.
Microsoft VBScript runtime error '800a000d' Type mismatch: 'strRowArray' for Session Array
If (strRowArray(i, j) = "" ) Then 'error:Line 179 Type mismatch: 'strRowArray'
This session array comes from Line 385
Session("strArrayDetail33"
For clarity I am posting full code below:
Thanks in advance for any help given.
<%
Sub BindData1()
currentPage = Request.QueryString("PageID")
if currentPage = 0 then
Response.Write("<div style='position:absolute;width:837px;height:150px;left:0px;top:250px;font-size:xx-small;overflow:auto;border:1px solid #722F90;' id='DIV999'>")
Response.Write("Page:" & currentPage & "# ")
Dim objConn '//Connection object that the DataGrid will use
if Session("strConnection") = "" then
else
Dim strRowArray
strRowArray = Session("strArrayDetail33") ' strRowArray(i, j)
Dim oCounter : oCounter = 0
Dim strCountRow
For i = 0 To strCountRow '- 2
For j = 0 To 88
If (strRowArray(i, j) = "" ) Then 'error:Line 179 Type mismatch: 'strRowArray'
Else
oCounter = oCounter + 1
If oCounter = 7 Then
Response.Write("<br/>")
oCounter = 0
End If
If j = 0 Then
Response.Write("<a href='../scriptFrame/tempDefault" & (currentPage) & ".asp?db22=" & strRowArray(i, 0) & "&dt22=" & strRowArray(i, j) & "&intDetail22=" & intDetail22 & "&strD22=False" & "&PageID=" & (currentPage) & "' runat='server'>" & "<font color='#0000FF' size='2'>" & strRowArray(i, j) & "</font>" & "</a> ")
Else
Response.Write("<a href='../scriptFrame/tempDefault" & (currentPage) & ".asp?db22=" & strRowArray(i, 0) & "&dt22=" & strRowArray(i, j) & "&intDetail22=" & intDetail22 & "&strD22=False" & "&PageID=" & (currentPage) & "' runat='server'>" & "<font color='#FF00FF' size='1'>" & strRowArray(i, j) & "</font>" & "</a> ")
End If
End If
Next 'j
Next 'i
End If
Response.Write("</div>")
end if
End Sub
%>
<%
Sub BindData3()
currentPage = Request.QueryString("PageID")
if currentPage = 0 then
Response.Write("<div style='position:absolute;width:837px;height:484px;left:0px;top:140px;font-size:xx-small;overflow:auto;border:1px solid #722F90;' id='DIV999'>")
Response.Write("Page:" & currentPage & "# ")
Dim objConn, strQuery, dataRow, rowDatabase '//Connection object that the DataGrid will use
if Session("strConnection") = "" then
else
Response.Write("")
Dim GetString 'As String = Nothing
Dim GetString2 'As String = Nothing
Dim TableLabelappTest
Dim detailsLabelappTest
Dim builder 'As New SqlConnectionStringBuilder(detailsLabelappTest)
builder = Session("strConnection")
Dim conn 'As New SqlConnection()
Dim tblTables 'As DataTable = Nothing
Dim odbconn 'As New SqlConnection()
Dim strRowArray(100, 100) 'As String
Dim strColumnArray(100, 400) 'As String
'Dim localArray(100)
Dim filterList 'As New List(Of String)()
Dim dbitems 'As String = Nothing
Dim tbitems 'As String = Nothing
Dim caItem
Dim strSQLServer : strSQLServer = "Dinosaur1\sqlexpress"
Dim strLogin : strLogin = "sa"
Dim strPassword : strPassword = "H6web97!"
Dim intDetail22 : intDetail22 = Session("strIntDetail22")
Dim strRow : strRow = 0 'As Integer = 0
Dim strColumn : strColumn = 0 'As Integer = 0
Dim strCountRow : strCountRow = 0 'As Integer = 0
Dim strCountColumn : strCountColumn = 0 'As Integer = 0
Dim oCounter : oCounter = 0 'As Integer = 0
Dim ErrorLabel : ErrorLabel = ""
Dim ConnStr, adoxConn, oServer, oDB, adodbConn, table, Item
intDetail22 = intDetail22 + 1
If intDetail22 > 10 Then
intDetail22 = 10
End If
Set oServer = CreateObject("SQLDMO.SQLServer")
oServer.Name = strSQLServer
' Check the server is alive
If oServer.Status <> 1 Then
Response.Write "Server " & strSQLServer & " is not running. Exiting."
End If
' Connect to the SQL Server instance
oServer.LoginSecure = False
oServer.Connect strSQLServer, strLogin, strPassword
' We're connected to the server let's iterate through the Databases Collection
For Each oDB in oServer.Databases
if oDB.Name = "master" or oDB.Name = "msdb" or oDB.Name = "model" or oDB.Name = "tempdb" then
else
strRowArray(strRow, strColumn) = oDB.Name
'Response.Write strRowArray(strRow, strColumn) & "# "
strRow = strRow + 1
end if
Next
' Disconnect from SQL Server
oServer.Disconnect
set oServer = nothing
strCountRow = strRow
For i = 0 To strCountRow
GetString2 = (builder & "; Initial Catalog=" & strRowArray(i, 0) & ";")
' Use this string if using SQL Server:
'ConnStr = "provider=SQLOLEDB;network=DBMSSOCN;"
'ConnStr = ConnStr & "uid=<uid>;pwd=<pwd>;server="
'ConnStr = ConnStr & "<x.x.x.x>;database=" & dbname
ConnStr = Session("strConnection") & "Initial Catalog=" & strRowArray(i, 0) & ";"
set adoxConn = CreateObject("ADOX.Catalog")
set adodbConn = CreateObject("ADODB.Connection")
adodbConn.open ConnStr
adoxConn.activeConnection = adodbConn
for each table in adoxConn.tables
if table.type="TABLE" then
strColumn = strColumn + 1
strColumnArray(i, strColumn) = table.name
'response.write strColumnArray(i, strColumn) & "# "
end if
next
adodbConn.close: set adodbConn = nothing
set adoxConn = nothing
If strCountColumn <= strColumn Then
strCountColumn = strColumn
End If
strColumn = 0
Next 'i
'Response.Write("<br/><br/>Array:")
'Response.Write("strCountRow:" & strCountRow & "# ")
For i = 0 To strCountRow '- 2
strColumn = 0
For j = 0 To 88
If (strColumnArray(i, j) = "") Then
Else
strColumn = strColumn + 1
strRowArray(i, strColumn) = strColumnArray(i, j)
'response.write strRowArray(i, strColumn) & "# "
End If
Next 'j
If strCountColumn <= strColumn Then
strCountColumn = strColumn
End If
strColumn = 0
Next 'i
oCounter = 0
For i = 0 To strCountRow '- 2
For j = 0 To 88
If (strRowArray(i, j) = "" ) Then
Else
oCounter = oCounter + 1
If oCounter = 7 Then
Response.Write("<br/>")
oCounter = 0
End If
If j = 0 Then
Response.Write("<a href='../scriptFrame/tempDefault" & (currentPage) & ".asp?db22=" & strRowArray(i, 0) & "&dt22=" & strRowArray(i, j) & "&intDetail22=" & intDetail22 & "&strD22=False" & "&PageID=" & (currentPage) & "' runat='server'>" & "<font color='#0000FF' size='2'>" & strRowArray(i, j) & "</font>" & "</a> ")
Else
Response.Write("<a href='../scriptFrame/tempDefault" & (currentPage) & ".asp?db22=" & strRowArray(i, 0) & "&dt22=" & strRowArray(i, j) & "&intDetail22=" & intDetail22 & "&strD22=False" & "&PageID=" & (currentPage) & "' runat='server'>" & "<font color='#FF00FF' size='1'>" & strRowArray(i, j) & "</font>" & "</a> ")
End If
End If
Next 'j
Next 'i
Session("strArrayDetail33") = strRowArray ' Line 385 strArrayDetail33
Dim jj : jj = 1
Dim localArray
Set fso = CreateObject("Scripting.FileSystemObject")
Set Session("fso") = fso
dim myArray(1)
myArray(0) = "foo"
myArray(1) = "bar"
Session("myArray") = myArray
Session("username") = "Splunge"
Session("password") = "BlatBar"
For Each Item In Session.Contents
if item = "strArrayDetail33" then
Session(item) = "strRowArray(i, j)"
Response.Write "<br/> <b><u>" & item & " is an Session(array)</u></b> "
end if
If IsArray(Session(item)) Then
Response.Write " <b><u>" & item & " is an array</u></b> "
' if you know its structure, you can
' loop through like this:
localArray = Session(item)
For i = 0 To Ubound(localArray)
Response.Write "<br> " & item
Response.Write "(" & i & ") = " & localArray(i)
Next
Elseif IsObject(Session(item)) Then
Response.Write " <b><u>" & item & " is an object</u></b> "
' though we know we're not supposed to
' store objects in the session, right?
Else
Response.Write "<b><u>" & item & "</u></b>" & " = " & Session(item) & "# "
if jj = 2 then
Response.write("<br>")
else
end if
jj = jj + 1
End If
'Response.Write "<br>"
Next
set session("fso") = nothing
set fso = nothing
End If
Response.Write("</div>")
end if
End Sub
%>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thank you for the help.
I have BindData3() in the header file, which is called first.
I had For the line Each Item In Session.Contents
to display the contents of the session variables etc.
As per your suggestion, I took out this code.
You are right, it is causing the problem.
The last line of BindData3 is now Session("strArrayDetail33" ) = strRowArray
Then response.write "array assigned to session var..."
In the main part of the page BindData1() is called.
The following code as per your suggestion runs without errors:
This now correctly displays the contents of the session variables etc created
in the header file BindData3()
With your suggestions, this will now allow me to use the contents of an array in any page.
As you said, the array can be created in one page and assigned to session.
Then in another page the contents of the array can be retreived from the session etc.
Thanks again for your help.
I have BindData3() in the header file, which is called first.
I had For the line Each Item In Session.Contents
to display the contents of the session variables etc.
As per your suggestion, I took out this code.
You are right, it is causing the problem.
The last line of BindData3 is now Session("strArrayDetail33"
Then response.write "array assigned to session var..."
In the main part of the page BindData1() is called.
The following code as per your suggestion runs without errors:
<%
Dim strRowArray
strRowArray = Session("strArrayDetail33") ' strRowArray(i, j)
Dim oCounter : oCounter = 0
If IsArray(strRowArray) Then
Dim strCountRow, strCountCol
strCountRow = UBound(strRowArray, 1)
strCountCol = UBound(strRowArray, 2) ' or the other way around...
response.write "array dimensions: " & strCountRow & " x " & strCountCol
Else
response.write "no array"
End If
%>
Then finally I added the following code to BindData1():This now correctly displays the contents of the session variables etc created
in the header file BindData3()
With your suggestions, this will now allow me to use the contents of an array in any page.
As you said, the array can be created in one page and assigned to session.
Then in another page the contents of the array can be retreived from the session etc.
Thanks again for your help.
<%
Dim intDetail22
Response.Write("<br/>")
For i = 0 To strCountRow
For j = 0 To strCountCol
If (strRowArray(i, j) = "" ) Then
Else
oCounter = oCounter + 1
If oCounter = 7 Then
Response.Write("<br/>")
oCounter = 0
End If
If j = 0 Then
Response.Write("<a href='../scriptFrame/tempDefault" & (currentPage) & ".asp?db22=" & strRowArray(i, 0) & "&dt22=" & strRowArray(i, j) & "&intDetail22=" & intDetail22 & "&strD22=False" & "&PageID=" & (currentPage) & "' runat='server'>" & "<font color='#0000FF' size='2'>" & strRowArray(i, j) & "</font>" & "</a> ")
Else
Response.Write("<a href='../scriptFrame/tempDefault" & (currentPage) & ".asp?db22=" & strRowArray(i, 0) & "&dt22=" & strRowArray(i, j) & "&intDetail22=" & intDetail22 & "&strD22=False" & "&PageID=" & (currentPage) & "' runat='server'>" & "<font color='#FF00FF' size='1'>" & strRowArray(i, j) & "</font>" & "</a> ")
End If
End If
Next 'j
Next 'i
End If
Response.Write("</div>")
end if
End Sub
%>
Great! Glad I could help.
Keep on shopping! ;-)
Keep on shopping! ;-)
ASKER
attached screen shot displaying BindData3() when button B3 is pressed
The error appears in BindData1() when button B1 is pressed.
Thanks in advance for any help given.
CaptureWiz098.jpg