2

我正在尝试使用查询导出表,然后我想从 ms 访问文件中删除该查询对象,但它给了我错误 - 无法更新数据库。文件可能是只读的。

我的代码如下

MsAcs.OpenCurrentDatabase(newdb,false,"");
 MsAcs.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable;
                        MsAcs.DoCmd.TransferText(Microsoft.Office.Interop.Access.AcTextTransferType.acExportDelim, Type.Missing, "tmpExport", csvfile, true, Type.Missing, Type.Missing);

MsAcs.DoCmd.DeleteObject(Microsoft.Office.Interop.Access.AcObjectType, "tmpExport");

给出错误

4

2 回答 2

2

DeleteObject期望AcObjectType枚举中的常量。而不是完整的枚举 ( AcObjectType)AcObjectType.acQuery用作 的第一个参数DeleteObject,并将查询的名称用作第二个参数。

在 Access 应用程序会话中,我可以使用以下两种方法之一删除名为tmpExport的查询:

DoCmd.DeleteObject acQuery, "tmpExport"
CurrentDb.QueryDefs.Delete "tmpExport"

但是,要使其中任何一个工作,数据库必须是可更新的,而不是只读的。因此,当这些方法有效时,Debug.Print CurrentDb.Updatable回复True.

如果我以只读方式打开数据库,则CurrentDb.Updatable回复False并尝试删除tmpExport会引发错误 3027,“无法更新。数据库或对象是只读的。”

不幸的是,我不知道如何将这些语句翻译成 c#。

于 2013-02-16T16:42:51.757 回答
0

这两个都对我有用:

using Access = Microsoft.Office.Interop.Access;
<...>
   MsAcs.DoCmd.DeleteObject(Access.AcObjectType.acQuery, "query1");

并且删除表,是的,它是一个查询,但是,删除表。

   MsAcs.CurrentDb().Execute("DROP TABLE query2");  
   MsAcs.Quit();

确保任务管理器中没有从之前的测试运行的数据库。

于 2013-02-16T21:09:35.527 回答