在Access VBA查询中使用LIKE时为什么会陷入无限循环

时间:2019-05-29 19:04:38

标签: ms-access

我正在使用openrecordset进行选择查询,但我希望查询在列中查找特定单词,并仅返回这些记录。

我尝试了不同的样式,看来我一直收到相同类型的错误: 运行时错误6:溢出。那是因为我拥有一个计数器,该计数器只能容纳不超过32,000个字节。

如果我删除计数器,那是因为一个无休止的循环,没有错误消息只是在后台运行。我必须重新启动访问权限。

'Variables
Dim counter As Integer

'DB variables
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb

'Get records query
Set rs = db.OpenRecordset("SELECT * FROM Price_List WHERE Description LIKE '*cabin*'")

'Determine if the specified valve for this project was found
If rs.EOF Then
    MsgBox "No records were found for enclosures." & vbNewLine & vbNewLine & _
    "You can contact someone", vbInformation + vbOKOnly, "No Records Found"
    End
End If

List10.RowSource = ""

'display
List10.ColumnCount = 5
List10.ColumnWidths = "1500;4000;1200;1200;1200" 'Setting column widths for each record

counter = 0
Do
    If counter = 0 Then
        List10.AddItem ("Part Number)
        List10.AddItem (rs!PartNumber)
    Else
        List10.AddItem (rs!PartNumber)
    End If

    'counter = counter + 1
Loop Until rs.EOF

Label14.Caption = rs.RecordCount

rs.Close
db.Close

我希望它至少返回5条记录,但我想它还会返回更多的记录!

2 个答案:

答案 0 :(得分:1)

几个问题。

首先,不能保证光标将是第一条记录,因此您必须使用

If rs.EOF AND rs.BOF

检查是否没有返回记录。

然后您必须以

开始
rs.MoveFirst

转到第一条记录,然后在循环中需要

rs.MoveNext

移至下一条记录,依此类推

您当前的代码仅在记录集恰好打开的那条记录上无限运行。

答案 1 :(得分:0)

检查rs.EOF之后,您需要将光标放在第一条记录上,并将标题"Part Number"添加到列表中,因此在循环内不需要if
之后,开始循环,并在每次迭代结束时移至下一条记录:

rs.MoveFirst
List10.AddItem ("Part Number")
Do
    List10.AddItem (rs!PartNumber)
    counter = counter + 1
    rs.MoveNext
Loop Until rs.EOF