如何使用DoCmd删除ms访问查询对象.DeleteObject

本文关键字:查询 对象 DeleteObject 访问 ms 何使用 DoCmd 删除 | 更新日期: 2023-09-27 17:59:36

我试图使用查询导出一个表,然后我想从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");

给出错误

如何使用DoCmd删除ms访问查询对象.DeleteObject

DeleteObject需要AcObjectType枚举中的常量。使用AcObjectType.acQuery作为DeleteObject的第一个参数,使用查询的名称作为第二个参数,而不是完全枚举(AcObjectType)

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

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

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

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

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

这两项都适用于我:

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

和droptable,是的,它是一个查询,尽管如此,droptable。

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

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