Я использую этот код для выбора кодового номера процедуры в 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 работает неправильно. Оммм ремонтная контора. Прочтите документы Дао. Безрезультатно.
да, я учел пустое пространство. Количество повторяющихся записей отображается в запросе, но не в коде.
Тот же код по-прежнему работает правильно (второй код), но рассматриваемый код не работает. (Первый код)
В таблице проблема решилась указанием обоих полей в качестве индекса. Я не знаю точной причины, нужно больше читать о DAO.





Попробуй это:
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, чтобы свести их к минимуму.
Возможно, это хорошая идея, но я не понимаю причину этой проблемы.
Проверьте это. Я не уверен в вашем определении дубликатов.
Вы ответили косвенно. В таблице, которую я использовал, я не определил поле индекса. Проблема решилась указанием обоих полей. Я не знаю точной причины, нужно читать больше. спасибо мальчик
В таблице проблема решилась указанием обоих полей в качестве индекса. Я не знаю точной причины, нужно больше читать о DAO.
по соображениям производительности счетчик повторов будет равен тому, сколько «следующих шагов» вы сделали в данных. Итак, либо используйте count(*), либо используйте movelast перед проверкой счетчика, либо вы можете указать тип таблицы в openRecordSet. вероятно, лучше просто использовать dcount(), и в производительности нет никакой разницы.
Вы уверены, что имя устройства правильное? Может быть, вместо этого будет
Laser Jet 5550dn(по крайней мере, Google так предполагает)? Что произойдет, если вы создадите запрос с этим оператором SQL?