Currentdb.Execute (Database.Execute) не работает или выдает ошибки

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

Я попытался выполнить код в окне immidate, но это дало мне ошибку о моих скобках (на самом деле я не знаю, как правильно ввести приглашение), поэтому я изменил свой запрос с переменных на установленные значения для вставки, но это все равно не работает и ошибки не выдает.

Я убедился, что в моем коде нет «Ошибки», и попытался создать ошибку вручную. Синтаксические ошибки отображаются как обычно, поэтому я предполагаю, что с сообщениями об ошибках все в порядке.

'Table Columns: ID, ProjectID, Versionnumber

SQL = "INSERT INTO tblVersion " & _
"(ProjectID, Versionnumber) " & _
"VALUES (1, 'v3.0');"
Currentdb.Execute SQL

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

Попробуйте добавить пробел после номера версии)

kiks73 08.04.2019 14:18

Если вы хотите ошибок, вам нужно использовать Currentdb.Execute SQL, dbFailOnError. В противном случае любая ошибка вызовет тихий сбой.

Erik A 08.04.2019 14:19

Пробовал, но результат не меняется. Поправлю в сегменте кода

P.Weg 08.04.2019 14:20

Теперь он показывает ошибки, и я могу решить проблему. Спасибо @ErikA

P.Weg 08.04.2019 14:22
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
4
3 657
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

CurrentDb.Execute по умолчанию не вызывает все ошибки. Он просто молча выйдет из строя, не сообщая вам, что запрос был неудачным, независимо от каких-либо утверждений On Error.

Насколько я знаю, все ошибки, которые могут быть сгенерированы во время компиляции (синтаксические ошибки, недопустимые имена таблиц или имена полей), возникают, а ошибки времени выполнения (нарушение ограничений, повторяющиеся первичные ключи и т. д.) не возникают. поднятый.

Чтобы получить все ошибки, используйте dbFailOnError. Это также приведет к сбою всего запроса, если в одной операции возникнет ошибка (например, одна строка нарушает ограничение), в то время как без этого не будет выполнена только неудачная операция.

Итак, в общем, используйте это:

Currentdb.Execute SQL, dbFailOnError

dbFailonError не решает эту проблему для меня. Одно поле в моей таблице настроено со списком со списком, и оно ограничено списком. Однако, когда я запускаю код CurrentDb.Execute со значением, которого нет в списке, в таблицу ничего не добавляется, и в мой код On Error не возвращается ошибка. Я использую Access 2016. Он отлично работает с неправильным заголовком поля, но не с неправильным значением.

BenW 01.10.2020 18:26

@BenW Это другой вопрос. Ограничить список — это ограничение пользовательского интерфейса, а не ограничение базы данных, поэтому не вызывает dbFailOnError. Если вы спросите об этом здесь и предоставите минимальный воспроизводимый пример, я, вероятно, смогу предоставить решение.

Erik A 01.10.2020 19:00

Код точно такой же, как код, которым поделился P.Weg, за исключением того, что поле ProjectID является текстовым полем и ограничено списком (список предоставляется связанной таблицей). Я не понимаю, почему это не ограничение базы данных, если оно приводит к сбою моего оператора вставки SQL. Но главный вопрос в том, почему он не вызывает никаких ошибок.

BenW 02.10.2020 05:08

@BenW Я не понимаю, почему это не ограничение базы данных, если оно приводит к сбою моего оператора вставки SQL. В том-то и дело. Обычно это не приводит к сбою вставки, если только в миксе нет чего-то еще, например отношения между таблицами с ссылочной целостностью. Вот почему я хочу минимальный воспроизводимый пример и не буду отвечать здесь.

Erik A 02.10.2020 08:21

Эрик, вы были правы в том, что это вызвано отношением таблицы со ссылочной целостностью (а не списком связанных полей), но я до сих пор не понимаю, почему это не выдает ошибку. Я создал здесь отдельный вопрос со ссылкой на мою минимальную базу данных. stackoverflow.com/questions/64216792/…

BenW 06.10.2020 00:03

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