Sql-запрос не возвращает данные

Я использую этот код для выбора кодового номера процедуры в VBA Access и проверки наличия дубликатов сохраненного продукта.

Dim db as dao.database
Dim rs as dao.recordset

Set db = currentdb

Sql_string = "SELECT code_number FROM table_product WHERE name_product ='Printer HP Color Laser Jet 550dn'"

Set rs = db.openrecordset(Sql_string)

If rs.recordcount > 1 then 
    Msgbox "Duplicate Product"
    db.close
    rs.close 'all seted to nothings
    Exit sub
Else:Text1.value =rs!code_number
End if

Этот код не позволяет идентифицировать повторяющееся название продукта.

Хотя продукт повторяется несколько раз, он всегда возвращает значение один. Я проверяю его на наличие другого имени продукта, но не обнаруживаю повторяющееся имя продукта.

Следующий код работает нормально и во многом похож на приведенный выше код:

Dim db as dao.database
Dim rs as dao.recordset

Set db = currentdb

Sql_string = "SELECT product_name FROM table_product WHERE code_number ='INK001'"

Set rs = db.openrecordset(Sql_string)

If rs.recordcount > 1 then 
    Msgbox "Duplicate Product"
    db.close
    rs.close
    Exit sub
Else:Text2.value =rs!product_name
End if

Я использую Access 2016. Кто-нибудь знает, в чем проблема? Пожалуйста, направляйте меня. Я в полном замешательстве.

Проверьте структуру таблицы и имя поля. Проверьте любой файл базы данных с этим кодом. Проверьте, что sql_string в запросе работает правильно, но vba работает неправильно. Оммм ремонтная контора. Прочтите документы Дао. Безрезультатно.

Вы уверены, что имя устройства правильное? Может быть, вместо этого будет Laser Jet 5550dn (по крайней мере, Google так предполагает)? Что произойдет, если вы создадите запрос с этим оператором SQL?

FunThomas 06.03.2024 14:11

да, я учел пустое пространство. Количество повторяющихся записей отображается в запросе, но не в коде.

Hassan2015 06.03.2024 14:19

Тот же код по-прежнему работает правильно (второй код), но рассматриваемый код не работает. (Первый код)

Hassan2015 06.03.2024 14:23

В таблице проблема решилась указанием обоих полей в качестве индекса. Я не знаю точной причины, нужно больше читать о DAO.

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

Ответы 2

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

Попробуй это:

Dim db As dao.database
Dim rs As dao.recordset

Set db = currentdb

Sql_string = "SELECT code_number FROM table_product WHERE name_product = 'Printer HP Color Laser Jet 550dn'"

Set rs = db.openrecordset(Sql_string)

If rs.recordcount > 0 then 
    Msgbox "Duplicate Product"
Else
    Me!Text1.value = rs!code_number
End if
rs.close

Или используйте DLookup, чтобы свести их к минимуму.

Возможно, это хорошая идея, но я не понимаю причину этой проблемы.

Hassan2015 06.03.2024 18:57

Проверьте это. Я не уверен в вашем определении дубликатов.

Gustav 06.03.2024 19:53

Вы ответили косвенно. В таблице, которую я использовал, я не определил поле индекса. Проблема решилась указанием обоих полей. Я не знаю точной причины, нужно читать больше. спасибо мальчик

Hassan2015 06.03.2024 20:21

В таблице проблема решилась указанием обоих полей в качестве индекса. Я не знаю точной причины, нужно больше читать о DAO.

по соображениям производительности счетчик повторов будет равен тому, сколько «следующих шагов» вы сделали в данных. Итак, либо используйте count(*), либо используйте movelast перед проверкой счетчика, либо вы можете указать тип таблицы в openRecordSet. вероятно, лучше просто использовать dcount(), и в производительности нет никакой разницы.

Albert D. Kallal 07.03.2024 03:01

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