Преобразовывает ошибки ADO в список списков собщений об ошибках
(defun ru-ado-error-handler (vl_error_object
connection_object
/
errors_object
error_object
error_count
error_number
error_list
error_value
result
)
;;; Преобразовывает ошибки в список списков точечных пар
;;; в виде ("name" . "value")
;;; Вначале обрабатываются возможные сообщения Visual LISP
(setq result (list
(list (cons "Ошибки Visual LISP"
(vl-catch-all-error-message vl_error_object)
) ;_ end of cons
) ;_ end of list
) ;_ end of list
;;; ADO накапливает ошибки в специальном объекте,
;;; откуда мы их должны извлечь
error_object (vlax-create-object "ADODB.Error")
errors_object (vlax-get-property connection_object "Errors")
error_count (vlax-get-property errors_object "Count")
error_number -1
) ;_ end of setq
;;; Теперь обрабатываем ошибки errors
(while (< (setq error_number (1+ error_number)) error_count)
(setq error_object
(vlax-get-property errors_object "Item" error_number)
error_list nil
) ;_ end of setq
;;; Проверяем все возможные пунктики ошибок
(foreach error_property '("Description"
"HelpContext"
"HelpFile"
"NativeError"
"Number"
"SQLState"
"Source"
)
(if (numberp (setq error_value
(vlax-get-property error_object error_property)
) ;_ end of setq
) ;_ end of numberp
(setq error_value (itoa error_value))
) ;_ end of if
(setq error_list (cons (cons error_property error_value) error_list))
) ;_ end of foreach
(setq result (cons (reverse error_List) result))
) ;_ end of while
(reverse result)
) ;_ end of defun