我有一个Access数据库和一个C#应用程序。 C#app对Access中的某些表做了一些事情,我希望在C#代码结束时刷新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
}
如果数据库已关闭,我的代码可以正常工作。如果数据库已经打开,我该如何使用该功能?
编辑:C#在Access表中执行了一些插入操作,因此当它结束时我想在打开时刷新表单。
答案 0 :(得分:1)
如果数据库已关闭,我的代码可以运行。如果数据库已经打开,我该如何使用该功能?
我刚刚在C#Winforms应用程序上尝试了以下代码,它对我有用。如果我在Access中打开了我的数据库,并且在数据库中打开了“LogForm”表单,那么当我单击C#表单上的按钮时,Access表单就会更新。
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支持文章
How to use Visual C# to automate a running instance of an Office program