Вызов процедуры в модуле доступа из .Net? - PullRequest
3 голосов
/ 08 мая 2009

У меня проблемы с автоматизацией Access 2007 из .Net, VB или C #. Все, что я хочу сделать, это вызвать подпрограмму в модуле доступа из .Net.

В конечном счете, я должен заставить его работать в VB, но я пробовал оба с одинаковыми результатами.

Ниже приведен код в моей форме тестирования VB. Это приводит к ошибке:

System.Runtime.InteropServices.COMException (0x800A9D9F): Исключение из HRESULT: 0x800A9D9F в Microsoft.Office.Interop.Access.ApplicationClass.Run (Строковая процедура, Object & Arg1, Object & Arg2, ..., Object & Arg30) *

Мой тестовый Sub в Access называется «MyTest» и является модулем «Module1». Все, что он делает, это вставляет одну запись в таблицу. Он работает нормально изнутри Access. Я безуспешно пробовал различные варианты «Module1.MyTest», «MyTest ()», «Call MyTest» и т. Д.

Я нашел несколько других примеров в сети автоматизации Access (и других приложений Office), но, похоже, не смог заставить их работать. Если бы кто-нибудь мог указать мне на рабочий пример, я был бы благодарен.

Пример кода:

Imports Access = Microsoft.Office.Interop.Access
Imports Microsoft.Office.Core

Public Class FormTest
    Private Sub cmdTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdTest.Click

        Dim aa As New Access.Application()

        Try
            aa.OpenCurrentDatabase("c:\Test.accdb")
            aa.Run("MyTest")
        Catch ex As Exception
            MsgBox(ex.ToString())
        Finally
            If aa IsNot Nothing Then
                aa.Quit(Access.AcQuitOption.acQuitSaveNone)
            End If
            Me.Close()
        End Try

    End Sub
End Class

Ответы [ 3 ]

2 голосов
/ 08 мая 2009

Это была охрана. В Access мне пришлось отключить все проверки безопасности. Как только я это сделал, все заработало нормально.

0 голосов
/ 08 мая 2009

Если целью вашего процесса доступа является манипулирование таблицей в файле доступа, почему бы вам не открыть соединение ODBC или OLEDB с файлом .mdb, а затем выполнить работу непосредственно с таблицей, либо открыв набор записей и манипулирование им, или отправка соответствующих инструкций SQL?

Вы по крайней мере сэкономите все время, необходимое для создания нового экземпляра Access.

0 голосов
/ 08 мая 2009

Попробуйте просмотреть InnerException (действительную причину ошибки).

Также, если вы знаете VB6 - попробуйте написать тот же код на VB6 и посмотрите, работает ли он.
Если вы не столкнулись с какой-либо ошибкой, она должна работать так же в VB.net

РЕДАКТИРОВАТЬ: MyTest публичный метод?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...