4

Access2007.accdbデータベースファイルを圧縮して修復する必要があります。JRO.JetEngineが.mdbファイルでこれを実行できることは知っていますが、新しいバージョンの2007形式をコードで修復する必要があります。

助言がありますか?

編集:

これが問題です。COMオブジェクトライブラリ「MicrosoftOffice12Accessデータベースエンジンオブジェクトライブラリ」を使用し、DBEngineクラスを使用してそのCompactDatabseメソッドを呼び出すことができることがわかりました。しかし、データベースのパスワードを提供する場所がないようです。Office12データベースエンジンにはドキュメントがどこにもありません。CompactDatabaseメソッドの古いバージョンのドキュメントをいくつか見つけましたが、それらはまったく役に立ちません。

これは私を夢中にさせています。

4

5 に答える 5

6

Office 12 データベース エンジンのドキュメントはどこにもないようです。

正確ではありません。利用できる情報は限られています。

MSDN については、次を参照してください。

Access 2007 開発者リファレンス

Microsoft Jet Replication Objects (JRO) Referenceのブランチがあるため、JRO ( ADO classic を構成するライブラリの 1 つ) は、ACCDB 形式などの ACE で引き続き公式にサポートされています (そして AFAIK は引き続き機能します)。CompactDatabase メソッドは 2 つのパラメーターを受け取ります。どちらも OLE DB 接続文字列です。したがって、データベース パスワードの提供は、接続文字列での使用など、通常の接続と変わらないはずJet OLEDB:Database Passwordです。accdb 形式の場合はJet OLEDB:Engine Type=5、接続文字列に含める必要があることに注意してください。

Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=C:\MyDB.accdb;
Jet OLEDB:Database Password=MYPASSWORD;
Jet OLEDB:Engine Type=5

それだけの価値はありますが (実際にはあまり価値がありません)、ACE エンジンに関する限定的なドキュメントは、Access 2007 の Office ヘルプにあります。

Access データベース エンジンのほとんどは、独自形式が大流行した 1990 年代に開発されたものです。私は商業的な理由で文書化が抑制され、知識が単に失われたのではないかと考えています. そのため、現在入手可能なドキュメントには多くの穴があり、その中には大きな穴があります。多くの場合、エンジンがどのように機能するかを知る唯一の方法は、実際に使用してみることです。存在するドキュメントにはいくつかの恐ろしいエラーが含まれています: すでに今日、架空の機能 ( LIMIT TO nn ROWSCREATE TEMPORARY TABLEなど) を使用する可能性がある SO にいくつかの例を投稿しました。買い手責任負担。

于 2009-10-12T10:28:27.757 に答える
5

これが古いスレッドであることは知っていますが、これは私にとってはうまくいきました(VB.Netの場合)。うまくいけば、誰かが道を進むのを助けることができます:

「Microsoft Office 12.0 Access データベース エンジン オブジェクト ライブラリ」への参照を追加

Dim dbe As New Microsoft.Office.Interop.Access.Dao.DBEngine

dbe.CompactDatabase("C:\folder\database.accdb",  "C:\folder\database_New.accdb", , , ";pwd=<database password>")
于 2013-10-04T18:22:13.410 に答える
2

JROに関する参考までに、Accessバージョン2007以降のデータベースファイルはサポートしていません。このライブラリのCompactDatabaseメソッドは、ACE OLEDBプロバイダーを使用すると機能するように見えますが、実際には2002-2003(Jet 4.0)データベースファイルを生成します。

ところで、エンジンタイプ=5はJet4.0なので、作成されたバージョンに関しては完全にプレゼントになるはずです。

于 2011-04-01T13:24:49.850 に答える
2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.IO;
using System.Data;
using Microsoft.Office.Interop.Access.Dao;
protected void btnSubmitDenim_Click(object sender, EventArgs e)
{
    try
       {
string oldFileName = HttpContext.Current.Server.MapPath(@"~/App_Data/MyDatainAccess2010.accdb");
string newFileName = HttpContext.Current.Server.MapPath(@"~/App_Data/Temp.accdb");

   // Obtain a reference to the Access 2010 introp DBEngine formally known as JetEngine
          
    DBEngine engine = (DBEngine)HttpContext.Current.Server.CreateObject("Dao.DBEngine.120");

           
  // Compact the database (saves the compacted version to newFileName)

    engine.CompactDatabase(oldFileName, newFileName);
          

            // Delete the original database
            File.Delete(oldFileName);

            // Move (rename) the temporary compacted database to
            // the original filename
            File.Move(newFileName, oldFileName);

            // The operation was successful
            lblResult.Text = "Database Compact completed";
       }
       catch
       {
           // We encountered an error
           lblResult.Text = "Process Failed";
          
       }
    }
于 2011-07-01T00:06:26.810 に答える
2

JROは必要ありません。JRO は存在するべきではありません。Microsoft が誤って Access/Jet/ACE のネイティブ DAO をネイティブではない抽象化レイヤーである ADO に置き換えようとしたために発生した ADODB の醜い継子の 1 つです。JRO は、ADODB では利用できない Jet 固有の機能をサポートするために存在します。

代わりに DAO を使用した場合は、すべての機能が既にそこにあり、使用している Access のバージョンでサポートされているすべての形式で機能します (DAO のバージョンは Access のバージョンと同期されているため、つまり、 db エンジンが強化され、DAO の新しいバージョンが追加されました)。

そのため、A2007 では、単純に DAO コンパクト メソッドを使用していました (Access 2 以降、個別のコマンドとしての修復操作はなく、データベース エンジンがコンパクト中に修復が必要であると判断した場合にのみ修復が行われます)。Access の外部から作業している場合は、ACE と互換性のあるバージョンの DAO を使用する必要があります。A2007 がインストールされておらず、ACE を個別にインストールしている場合は、そのバージョンの DAO が一緒にインストールされています。

于 2009-10-10T21:00:12.623 に答える