注册 登录
编程论坛 ASP技术论坛

代码错误,想把数据库中的一列赋值给数组,并输出来。

Kettyjin1983 发布于 2007-11-20 13:53, 2578 次点击

<%@ LANGUAGE=VBSCRIPT%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>THANKS FOR YOUR SUPPORT</title>
</head>


<body bgcolor="#CCFFFF">

<%
dim myconn
set myconn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")

constr="provider=microsoft.jet.oledb.4.0;Data Source=" & server.MapPath("user.mdb")
myconn.open=constr
Set rs=myconn.Execute("select ID from user")
id = rs("ID")

if not rs.eof then
dim num(28)
i =0
num(i)=id
response.Write num(i)&"<br>"

i=i+1
movenext

end if
rs.close
set rs=nothing
Myconn.close
set myconn=nothing
%>

</body>

</html>

Microsoft JET Database Engine 错误 '80040e14'

FROM 子句语法错误。

/survey/random/aabb.asp,行23

15 回复
#2
Kettyjin19832007-11-20 14:31

哪里错了啊,同志们,帮我看看呀。

#3
yms1232007-11-20 15:22
myconn.open=constr
这里调用的是方法不用加=号应改为
myconn.open constr

Set rs=myconn.Execute("select ID from user")
user为数据库关键字不能用作表名,如一定要用加中括号区别
Set rs=myconn.Execute("select ID from [user]")
#4
madpbpl2007-11-20 15:22
select ID from user
改成
select ID from [user]
#5
Kettyjin19832007-11-20 15:41

<%@ LANGUAGE=VBSCRIPT%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>THANKS FOR YOUR SUPPORT</title>

</head>
<body bgcolor="#CCFFFF">
<%
dim myconn
set myconn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")

constr="provider=microsoft.jet.oledb.4.0;Data Source=" & server.MapPath("user.mdb")
myconn.open constr
Set rs=myconn.Execute("select ID from login")
if not rs.eof then
dim num(28)
i =0
for i=0 to 28
num(i)=rs("id")
response.Write num(i)&"<br>"
rs.movenext
i=i+1
next

end if
rs.close
set rs=nothing
Myconn.close
set myconn=nothing
%>

</body>

</html>
页面怎么只显示了0-14,后面的就没有了,奇怪了,本来应该是0-28啊?

#6
Kettyjin19832007-11-20 15:48
晕,只显示了一半啊,我把num(28)改成num(14),它只显示0-7,咋回事啊?
#7
yms1232007-11-20 16:15
dim num(28)
i =0
for i=0 to 28
num(i)=rs("id")
response.Write num(i)&"<br>"
rs.movenext
i=i+1
next
改成这样试试
Dim num(28)
Dim i
i=0
Do Until rs.eof
IF i<=Ubound(num) Then
num(i)=rs("id")
response.Write num(i)&"<br>"
End IF
i=i+1
rs.movenext
Loop
#8
Kettyjin19832007-11-20 16:25

行了,强烈要求斑竹解释一下原因,为什么我写的只显示一半啊,

#9
yms1232007-11-20 16:55

dim num(28)
i =0
for i=0 to 28
num(i)=rs("id")
response.Write num(i)&"<br>"
rs.movenext
i=i+1
next
看过楼主的代码分析目的是想把数据库记录集rs中的所有id都放到数组里,而楼主的写法只是在循环数组,并没有循环记录集。个人认为如果这段程序只做查询,其实可以写的更灵活一些,因为这里已知数据库里有28个ID,如果未知数据库里的ID个数,这个程序就不好办了,所以个人修改了一下楼主的程序
<%
dim myconn
set myconn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")

constr="provider=microsoft.jet.oledb.4.0;Data Source=" & server.MapPath("user.mdb")
myconn.open constr
rs.Open "select ID from login",1,1'更改打开记录集的方式获得记录总数
if not rs.eof then
Dim num()'动态数组
Dim i
ReDim num(rs.RecordCount)'初始化动态数组确定数组元素的个数,rs.RecordCount返回当前记录集有多少条记录。
i=0
Do Until rs.EOF
num(i)=rs("id")
response.Write num(i)&"<br>"
i=i+1
rs.movenext
Loop
end if
rs.close
set rs=nothing
Myconn.close
set myconn=nothing
%>


[此贴子已经被作者于2007-11-20 16:57:10编辑过]

#10
Kettyjin19832007-11-21 08:39
受教了,非常感谢斑竹,你是好样的。
#11
Kettyjin19832007-11-21 11:34

<%@ LANGUAGE=VBSCRIPT%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>THANKS FOR YOUR SUPPORT</title>
</head>
<body bgcolor="#CCFFFF">

<%
dim myconn
set myconn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")

constr="provider=microsoft.jet.oledb.4.0;Data Source=" & server.MapPath("user.mdb")
myconn.open constr
rs.Open "select ID from login",myconn,1,1'更改打开记录集的方式获得记录总数
if not rs.eof then
totoaliq = rs.RecordCount
Dim num()'动态数组
Dim i
ReDim num(totoaliq)'初始化动态数组确定数组元素的个数,rs.RecordCount返回当前记录集有多少条记录。
i=0
Do Until rs.EOF
num(i)=rs("id")

i=i+1
rs.movenext
Loop
end if
rs.close
randomize
for i=0 to totoaliq-1
c=Round(rnd*totoaliq)
if i >0 then
for k=0 to i-1
while num(i)=c'碰到随即产生的值,那么重新再产生一次,至到该值与前面的随即值不同为止。
c=Round(rnd*totoaliq)
i=i+1
wend

next
end if
num(i) = c
rs.open "select * from login where id ="&num(i)
if not rs.eof then
response.write ("name is:"&rs("EngName")&"<br>")
end if
rs.close
next
set rs=nothing
myconn.close
set myconn=nothing
%>
</body>
</html>
随机产生随机值,显示的结果仍然有相同的名字取出。

#12
Kettyjin19832007-11-21 15:46
randomize
for i=0 to totoaliq-1
c=Round(rnd*totoaliq-1)
if i >0 then
for k=0 to i-1
if num(k)=c then
c=Round(rnd*totoaliq-1)
k=0
end if
next
end if
num(i) = c'显示的结果发现的是第一位经常有重复的,看来在随机产生一个数字时并没有与第一位进行判断,而是从第二位开始的,不知道是什么原因,帮我看下啊。
#13
yms1232007-11-21 16:21
楼主是想随机读取数据库里的记录?
#14
Kettyjin19832007-11-21 16:29
是的啊,随即读取。
#15
yms1232007-11-21 18:03
本人写的一个在一定范围内产生一组随机数组的代码
<%
Function getRanDom(max,min)
Dim times, i, j
times = 2
Dim ttNumber
ttNumber = max + min - 1
Dim tAry()
ReDim tAry(ttNumber)
For i = 0 To ttNumber
tAry(i) = min + i
Next
For j = 0 To times - 1
i = ttNumber - 1
While i > 0
Dim temp, randomNum
temp = 0
randomNum = CInt(TtGetRandom(0, max * 3, i) Mod i)
temp = tAry(i)
tAry(i) = tAry(randomNum)
tAry(randomNum) = temp
i = i - 1
Wend
Next
getRanDom = tAry
End Function
Function TtGetRandom(max,min,chaosSeed)
Randomize chaosSeed * Timer()
TtGetRandom = Rnd * chaosSeed
End Function
%>
楼主可以使用这个代码
#16
yms1232007-11-21 18:12

将我写的代码保存到一个ASP文件
比如保存名称为MarkRandom.asp文件与楼主的文件存在同一目录下
<%@ LANGUAGE=VBSCRIPT%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>THANKS FOR YOUR SUPPORT</title>
</head>
<body bgcolor="#CCFFFF">
<!--#include file="MarkRandom.asp"-->
<!--引用文件到当前页面-->
<%
dim myconn
set myconn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")

constr="provider=microsoft.jet.oledb.4.0;Data Source=" & server.MapPath("user.mdb")
myconn.open constr
rs.Open "select ID from login",myconn,1,1'更改打开记录集的方式获得记录总数
if not rs.eof then
totoaliq = rs.RecordCount
Dim num()'动态数组
Dim i
num=getRanDom(totaliq,1)'取得在总纪录数范围内的一组随机数组
rs.close
for i=0 to totoaliq-1
rs.open "select * from login where id ="&num(i)
if not rs.eof then
response.write ("name is:"&rs("EngName")&"<br>")
end if
rs.close
next
set rs=nothing
myconn.close
set myconn=nothing
%>
</body>
</html>

不知道是不是楼主想要的效果,每次在数据库的所有记录中遍历,但顺序是随机的,每次显示的名称顺序都不一样。

1