Я использую 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 записей, но я думаю, что он возвращает гораздо больше!
Несколько вопросов.
Прежде всего, нет гарантии, что курсор будет первой записью, поэтому вам нужно использовать
If rs.EOF AND rs.BOF
для проверки отсутствия возвращенных записей.
Затем вы должны начать с
rs.MoveFirst
чтобы перейти к первой записи, а затем в вашем цикле вам нужно
rs.MoveNext
перейти к следующей записи и т.д.
Ваш текущий код просто бесконечно работает с одной записью, в которой открывается набор записей.
После того, как вы проверили 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
Вы можете добавить заголовок один раз перед циклом, и тогда вам не нужен оператор if.
Оператор if внутри цикла do until предназначен для наличия заголовка внутри списка. В конце забыл поставить rs.movenext