我正在尝试使用查询导出表,然后我想从ms访问文件中删除该查询对象,但它给了我错误 - 无法更新Database.File可能只是readonly。
我的代码
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");
给出错误
答案 0 :(得分:2)
DeleteObject期望AcObjectType
枚举中的常量。
而不是完整的枚举(AcObjectType)
,而是使用AcObjectType.acQuery
作为DeleteObject
的第一个参数,并将查询的名称作为第二个参数。
在Access应用程序会话中,我可以使用以下两种方法之一删除名为 tmpExport 的查询:
DoCmd.DeleteObject acQuery, "tmpExport"
CurrentDb.QueryDefs.Delete "tmpExport"
但是,对于其中任何一个工作,db必须是可更新的,而不是只读的。因此,当这些方法有效时,Debug.Print CurrentDb.Updatable
会回复True
。
如果我以只读方式打开数据库,CurrentDb.Updatable
回复False
,并尝试删除 tmpExport 会引发错误3027,“无法更新。数据库或对象是只读的。“
不幸的是我不知道如何将这些语句翻译成c#。
答案 1 :(得分:0)
这些都适合我:
using Access = Microsoft.Office.Interop.Access;
<...>
MsAcs.DoCmd.DeleteObject(Access.AcObjectType.acQuery, "query1");
并删除表,是的,这是一个查询,但是,删除表。
MsAcs.CurrentDb().Execute("DROP TABLE query2");
MsAcs.Quit();
确保在以前的测试中运行的任务管理器中没有数据库。