Почему я в бесконечном цикле при использовании LIKE в запросе Access VBA

Я использую 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 записей, но я думаю, что он возвращает гораздо больше!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
40
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Несколько вопросов.

Прежде всего, нет гарантии, что курсор будет первой записью, поэтому вам нужно использовать

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 внутри цикла do until предназначен для наличия заголовка внутри списка. В конце забыл поставить rs.movenext

Ants 29.05.2019 21:39

Вы можете добавить заголовок один раз перед циклом, и тогда вам не нужен оператор if.

forpas 29.05.2019 21:40

Другие вопросы по теме