Выполнить функцию в открытом экземпляре Access из приложения .NET

1

У меня есть база данных Access и приложение С#. Приложение С# делает некоторые вещи для некоторых таблиц в Access, и я хочу обновить форму Access, когда заканчивается код С#. Я пытался это сделать:

void refresh()
    {
Access.Application acApp = new Access.ApplicationClass();//create msaccess application

object oMissing = System.Reflection.Missing.Value;
//Run the Test macro in the module
acApp.Run("Function_refresh",ref oMissing,ref oMissing,ref oMissing,ref oMissing,
ref oMissing,ref oMissing,ref oMissing,ref oMissing,
ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing
,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing
,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing
,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing
,ref oMissing,ref oMissing);
acApp.Quit();//exit application
        }

Мой код работает, если БД закрыта. Как я могу использовать эту функцию, если база данных уже открыта?

edit: С# выполняет некоторые вставки в таблице Access, поэтому, когда она заканчивается, я хочу обновить форму, когда она открыта.

  • 0
    Что происходит , когда файл базы данных открыт в Access?
  • 0
    Попробуй открыть еще одну БД.
Теги:
ms-access-2007
ms-access

1 ответ

1
Лучший ответ

Мой код работает, если DB закрыт. Как я могу использовать эту функцию, если база данных уже открыта?

Я просто попробовал следующий код для кнопки в приложении С# Winforms, и это сработало для меня. Если у меня открыта моя база данных в Access и форма "LogForm" открыта в базе данных, тогда, когда я нажимаю кнопку на моей форме С#, форма доступа обновляется.

private void button1_Click(object sender, EventArgs e)
{
    Microsoft.Office.Interop.Access.Application acApp;
    this.Activate();
    acApp = (Microsoft.Office.Interop.Access.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Access.Application");
    Microsoft.Office.Interop.Access.Dao.Database cdb = acApp.CurrentDb();
    cdb.Execute("INSERT INTO LogTable (LogEntry) VALUES ('Entry added ' & Now())");
    acApp.Forms["LogForm"].Requery();
}

Код адаптирован из статьи поддержки Microsoft

Как использовать Visual С# для автоматизации работающего экземпляра программы Office

Ещё вопросы

Сообщество Overcoder
Наверх
Меню