【发布时间】:2023-03-29 20:12:01
【问题描述】:
SQL Server 2000 中包含两个字段(两个季节的每月苹果数和每月橙子数)的简单表(表 1)。我需要使用经典 ASP 提取这些字段的值并填充两个数组。约束:这些数组已经由一个现成的应用程序定义,我不需要过多接触,因为我是 Classic ASP 的初学者,我可能会做错事。
这些数组的定义如下:
Dim m_arrApples, m_arrOranges
我已成功连接到数据库,提取数据,然后在浏览器中显示(格式化数字)。然而,当我需要将它传输到一个数组中(以便被那个现成的应用程序接管并处理它(以图形格式显示)时,我遇到了一个错误。这是我的代码:
'Open connection with SQL Server
Dim conn
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=SQLOLEDB;server=" & NameServer & ";database=" & DataBaseName & ";uid=" & NameUser & ";pwd=" & DataBasePassword & ";"
'Open table and all records for further processing
dim strSQL
strSQL = "select * from " & Table1
Set rst = conn.Execute(strSQL)
'Going through the records in the table and try to get values of each field and allocate them to the array
If rst.BOF And rst.EOF Then
Response.Write "No data"
Else
i=0
Do While (Not rst.EOF)
i=i+1
'The line below confirms that the data extracted from database is displayed in the browser
'in its primary form (not graph), but that means I did it correctly up to this point
Response.Write rst("Apples") & "/" & rst("Oranges") & "<br>"
m_arrApples(i)= rst("Apples") ' THE ERROR IS AT THIS LINE. HERE THE SCRIPT IS STOPPED
m_arrOranges(i)= rst("Oranges")
rst.MoveNext
Loop
End If
错误是:
Microsoft VBScript runtime error '800a000d'
Type mismatch
任何提示将不胜感激。
【问题讨论】:
-
使用动态数组时,您需要使用
ReDim Preserve来定义新大小,如果您已经知道大小,请使用固定数组(如果您知道您将使用 10 个值)Dim m_arrApples(9)). -
是的。有效。谢谢!我在哪里相信你的答案?很久没用stackoverflow了……
-
这不是您使用错误的方法来调整数组大小,而是您没有定义任何数组,无论是动态的、固定的还是其他的。 Lankymart 的回答依赖于
Redim实际上会将非数组变量转换为数组这一事实,但如果您将数组调暗为数组,您的代码会更容易理解:Dim m_arrApples(), m_arrOranges()。 -
@Martha 同老说法,差别不大,只要你
ReDim无关紧要。然而,使用Dim yourvar()仍然有一个令人信服的理由,那就是IsArray()将永远是True,因为Dim yourvar只是一个变量,所以它会返回False- 请参阅Dim output() versus Dim output -
@Gab2020 那是一条评论,我现在added an answer。
标签: arrays asp-classic