2012-06-11 3 views
1

В базе данных доступа у меня есть небольшая функция, которая вызывается при запуске, которая регистрирует часть программного обеспечения для генерации штрих-кодов.Обработка ошибок VBA для функций, вызванных макросом

Когда программное обеспечение не установлено, тогда из-за ошибки в доступе к Microsoft нарушают работу, поэтому я хотел бы добавить правильную обработку ошибок, которая информирует пользователя о том, что вызывает проблему.

Эта функция вызывается из макроса при запуске и сбой базы данных, а не правильная обработка ошибок.

Неправильная ли ошибка?

Public Function LicenseTBarCode() 
On Error GoTo Err_LicenceTBarCode 

Dim TB As New TBarCode10 
TB.LicenseMe "<EXPUNGED>", eLicKindSite, 1, "<EXPUNGED>", eLicProd1D 
Set TB = Nothing 
Exit Function 

Err_LicenceTBarCode: 
MsgBox "TBarcode Software is not installed. Please contact the database administrator.", vbExclamation, Error 
DoCmd.Quit 
End Function 
+1

Ваш код ошибки в порядке, но я подозреваю, что проблема заключается в 'Dim TB As New TBarCode10'. Это говорит о том, что вы создали ссылку на соответствующую библиотеку, так ли это? – Fionnuala

+0

Да, есть библиотека типов, которая используется. Проблема возникает, когда библиотека недоступна. Я понял, что если библиотеки не могут быть найдены, то это перейдет к обработчику ошибок. – VBwhatnow

+1

Вы должны прочитать http://www.accessmvp.com/djsteele/AccessReferenceErrors.html – Fionnuala

ответ

3

Изменить код, чтобы использовать позднее связывание:

Public Function LicenseTBarCode() 
On Error GoTo Err_LicenceTBarCode 

    Dim TB 
    Set TB = CreateObject("TBarCode10.TBarCode10") 
    TB.LicenseMe "<EXPUNGED>", eLicKindSite, 1, "<EXPUNGED>", eLicProd1D 
    Set TB = Nothing 
    Exit Function 

Err_LicenceTBarCode: 
    MsgBox "TBarcode Software is not installed. Please contact the database administrator.", vbExclamation, Error 
    DoCmd.Quit 
End Function 

Для того, чтобы это хорошо работало, вам действительно нужно использовать позднее связывание для всех коды TBarCode, в том числе и любых других объектов TBarCode вы можете использовать. Если вы еще не знакомы с Late Binding, сначала вам может быть сложно понять, особенно если вы работаете с любыми классами, использующими шаблон фабрики.

С поздней привязкой вы снимете свою ссылку на DLL, а затем ваш код должен скомпилироваться без ошибок. Разработка с помощью Late Binding может быть сложной задачей, поскольку у вас не будет доступа к IntelliSense. Он лучше всего работает с Early Binding, а затем позже конвертирует ваш код в Late Binding.

Еще одна вещь, которую вы теряете с помощью Late Binding - это любые константы, которые были определены в исходном объекте. Вы должны создать их самостоятельно. В зависимости от того, сколько вам нужно использовать, и где все, что вам нужно использовать, может быть проще всего создать модуль, чтобы удерживать эти константы. Вам действительно нужны только константы, которые фактически используются в вашем коде.

Global Const eLicKindSingle = 1 'Single license for exactly one computer 
Global Const eLicKindSite = 2 'Site license for an arbitrary number of computers within one site (or one facility) at one legal address 
Global Const eLicKindDeveloper = 3 'Developer license for redistribution to 3rd party 
Global Const eLicKindWeb = 3 'Web-server license 

Global Const eLicProd1D = 32 '(1D codes) 
Global Const eLicProd2D = 33 '(2D codes) 

В качестве альтернативы вы можете просто использовать значения, которые содержат константы. Например:

TB.LicenseMe "<EXPUNGED>", 2, 1, "<EXPUNGED>", 32 

Кроме того, насколько мне известно, Late Binding не работает с элементами управления ActiveX. Элементы управления ActiveX по своей сути ранней.

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

+0

Этот ответ несколько сработал. База данных все еще сбой, когда библиотека типов не установлена. – VBwhatnow

+0

Прошу прощения, у меня не было ссылки, отключенной в диалоговом окне «Ссылки». Я принимаю этот ответ – VBwhatnow

Смежные вопросы