Я пытаюсь настроить собственное сообщение об ошибке для перехода к MS Access (из SQL Server), когда пользователь вводит дубликат (вместо системного сообщения 2627). Я читал о блоках sp_addmessage и RAISERROR и TRY/CATCH, которые все имеют смысл. Но нигде я не посмотрел, кажется ли, что вы указываете, где вы поместите код RAISERROR (и блок TRY/CATCH), чтобы он действительно перешел обратно к приложению. Итак, куда идет код?Где вы помещаете код SQL RAISERROR?
ответ
Не думайте об этом с точки зрения пользователей, вводящих дубликаты ключей. Вместо этого подумайте о том, что пользователи просто вводят ключи, некоторые из которых оказываются дублирующими при попытке их вставить. Это тонкая разница, но она помогает вам здесь, потому что это означает, что вы думаете, что ваш код доступен для всех новых табличных вставок вместо определенного типа вставки.
Когда пользователь вводит ключ, выполняется инструкция SQL INSERT. Если ключ является дубликатом, и у вас есть ограничения, определенные в таблице, чтобы предотвратить это, оператор INSERT терпит неудачу. Если в вашем приложении Access вы пишете собственный SQL, вы можете обернуть его в TRY/CATCH и поместить RAISERROR в блок CATCH. Если ваше приложение Access таково, что вы никогда не увидите SQL, вы можете застрять, и вам придется смириться со встроенным поведением.
Я запускаю приложение на бэкэнд SQL Server, который я сам разрабатываю, так что да, я пишу SQL. Если я правильно прочитаю ваш ответ, я бы поставил TRY/CATCH в ограничение в коде таблицы? То есть в инструкции CREATE TABLE? – Rominus
Отрицательный @Rominus, вы положили бы его в инструкцию INSERT. – scsimon
- 1. Где вы помещаете файл dotcloud.yml?
- 2. Где вы помещаете имена полей базы данных?
- 3. Где вы помещаете относительный url в код jQuery?
- 4. Где вы помещаете SQL-выражения в свои проекты C#?
- 5. Где вы помещаете свои словарные данные?
- 6. Где вы помещаете классы неконтроллеров в codeigniter?
- 7. Silverlight Toolkit, где вы помещаете двоичные файлы
- 8. Где вы помещаете загруженные файлы в android
- 9. Где вы помещаете свои поля CSS?
- 10. В MVC, где вы помещаете пользовательский класс?
- 11. Вы помещаете «авторские права» в свой код?
- 12. Где вы помещаете данные глобального приложения в приложение для iPhone?
- 13. Где вы помещаете логику с помощью системы шаблонов без логики
- 14. Где вы помещаете аргументы -Dvar = value в конфигурации отладки Eclipse?
- 15. Где вы помещаете ключ шифрования на общедоступный сервер?
- 16. Где вы помещаете токен CSRF в Relay/GraphQL?
- 17. Где вы помещаете файлы CSS в каталог приложений rails?
- 18. В MVC, где вы помещаете ссылки на свою модель Классы?
- 19. Где вы помещаете AsyncTask, который будет загружать данные в ListFragment?
- 20. Где вы помещаете файл .jar для внешней библиотеки в java
- 21. Как вы помещаете UIWebView где-то, кроме MainView.xib?
- 22. Вы помещаете NSFetchRequest в cellForRowAtIndexPath?
- 23. Как вы помещаете код отслеживания в файл PDFLaTeX
- 24. В каком порядке вы помещаете методы в код класса?
- 25. Где вы размещаете свои SQL-запросы?
- 26. Где вы помещаете код сценария обратного вызова ajax в rails 3.1?
- 27. Как вы помещаете {и} в строку формата
- 28. Вы помещаете свои индексы в исходный контроль?
- 29. Как вы помещаете ObservableCollection в текстовый блок
- 30. Где вы помещаете изображение, которое вы загружаете для кнопки в приложении java?
RAISEERROR() - это функция sql. Вы вызываете это, когда есть ошибка, которую вы хотите вернуть. Вам не нужно инкапсулировать его в хранимую процедуру. Он уже доступен для использования там, где вы хотите его использовать. –
@StevenMays, я вижу. Я все еще не знаю, куда поместить мой код, который использует RAISERROR. – Rominus
Вам не нужен RAISERROR. Используйте обработчик ошибок в VBA для отображения значимого сообщения. Вот пример: https://social.msdn.microsoft.com/Forums/office/en-US/77c6075b-e18c-4598-a9d4-db2a91e8270c/trap-error-in-access-form-linked-to-sql -server-table? forum = accessdev – Andre