我目前正在首次使用ASP进行编码,并已到达ADO。假设我的查询如下:
SQL = "SELECT President FROM Testing"
表格如下:
President ------------------ George Washington John Adams Thomas Jefferson James Madison James Monroe
我最初从W3获得的代码如下:
For Each x In recordset.fields
Response.Write(x.name)
Response.Write(" = ")
Response.Write(x.value & "<br>")
Next
但是它只会返回:
President = George Washington
当我期待整张桌子的时候。直到我从W3改变它为止:
Do Until Recordset.EOF
For Each x In recordset.fields
Response.Write(x.name)
Response.Write(" = ")
Response.Write(x.value & "<br>")
Next
Response.Write("<br>")
Recordset.MoveNext
Loop
我得到了所有的名字。有人可以帮我看看发生了什么吗?我想在第一段代码中,它会循环遍历表,直到它给了我所有的名字,但事实并非如此。差不多,“对于每个记录集字段,写下列名+等号+当前行的值,然后转到下一行行。”
或者是因为我不能正确理解记录集?
答案 0 :(得分:3)
您的For Each
循环枚举记录集的当前记录(vulgo“row”)的字段。您需要通过记录集向move“当前记录”指示符的另一个循环来迭代所有记录/行。那就是
Do Until recordset.EOF 'stop after the last record
... 'do stuff
recordset.MoveNext 'move to the next record
Loop
确实
答案 1 :(得分:2)
由于myself和@sean-lange已在上面的评论中指出了
。 Fields
集合仅包含当前记录的列。
ADODB.Recordset
对象包含列数据和行数据我们如何获取行?记录集的行为取决于所使用的游标,但为此我们假设我们可以来回移动。
@sean-langes类比最好,将ADODB.Recordset
视为Excel电子表格,Fields
集合是顶部的列。如果我们在一行中从左到右制表,我们只看到当前行的数据,以获得我们必须向下移动电子表格的下一行。 ADODB.Recordset
方法提供的MoveNext()
也是如此。这会告诉光标移动到下一条记录并使用行值重新填充Fields
集合。
您发布的第二个示例是用于迭代ADODB.Recordset
中的记录的常用技巧。让我们分解代码正在做什么;
这开始循环并告诉经典ASP继续循环包含的代码,直到光标到达.EOF
(文件结束)等于True
。这表示光标已经超过最终记录,并且没有更多记录要通过调用MoveNext()
进行处理。
Do While Not recordset.EOF
在循环中我们有一个当前记录,所以在这种情况下我们可以访问Fields
集合并枚举数据。
For Each x In recordset.fields
键是MoveNext
,它将光标移动到下一条记录,并重新填充与当前记录关联的集合,例如Fields
。
recordset.MoveNext
答案 2 :(得分:0)
注意:我对VB的经验不多。第一段代码只返回George Washington的原因是因为指针在记录集中没有前进。指针固定在记录0(在数组中工作),因此,我相信,返回乔治华盛顿5次。在第二个示例中,指针在每次迭代后移动(Recordset.MoveNext),因此将打印所有名称。
第一个代码正在执行:Response.Write(x [0])5次。 第二个代码正在执行:Response.Write(x [0])移动指针 Response.Write(x [1]])等
答案 3 :(得分:0)
SQL = "SELECT President FROM Testing"
Set objRs = objConnection.Execute(SQL)
Do While Not objRs .EOF
Response.Write objRs("President") & "<br>"
objRs.MoveNext
Loop