2

クエリを使用してテーブルをエクスポートしようとしていますが、そのクエリオブジェクトをms accessファイルから削除したいのですが、エラーが発生します-データベースを更新できません。ファイルは読み取り専用である可能性があります。

以下の私のコード

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

DeleteObjectAcObjectTypeは、列挙からの定数を想定しています。完全な列挙 ( の代わりに、の最初の引数としてAcObjectType)使用し、クエリの名前を 2 番目の引数として使用します。AcObjectType.acQueryDeleteObject

Access アプリケーション セッション内から、次の 2 つの方法のいずれかを使用して、tmpExportという名前のクエリを削除できます。

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

ただし、これらのいずれかが機能するには、データベースが読み取り専用ではなく、更新可能である必要があります。したがって、これらのメソッドが機能するとDebug.Print CurrentDb.UpdatableTrue.

データベースを読み取り専用で開くと、CurrentDb.Updatable応答が返され、 tmpExportFalseを削除しようとすると、 「更新できません。データベースまたはオブジェクトは読み取り専用です」というエラー 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 に答える