10

開いているAccess(Jet)データベースをJET Version4.xにアップグレードする必要があるプログラムがあります(まだそのバージョンでない場合)。(これにより、SQL-92構文機能の使用が可能になります)

アップグレードは(比較的)簡単です。JRO.JetEngineオブジェクトのCompactDatabaseメソッド(ここで説明)を呼び出すとうまくいくはずですが、これを行う前に、アップグレードが必要かどうかを判断する必要があります。既存のデータベースのJetOLEDB:Engineタイプを確認するにはどうすればよいですか?これは、開いているOleDBConnectionから判別できますか?

ノート:

  1. Jetライブラリのバージョンではなく、データベースのバージョンについて話しています。
  2. C#または.Netソリューションは大歓迎です。
  3. これは、Accessアプリケーションではなく、Jetエンジンを使用するアプリケーションです。
4

4 に答える 4

4

ADOへの参照を設定する必要があります。そうすれば、プロパティを取得できます。

アクセスの内側から

Dim cnn As ADODB.Connection
Set cnn = CurrentProject.Connection

アクセスの外から

Dim cnn As New ADODB.Connection
cnn.Open Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Contact.mdb

そして最後に

Debug.Print cnn.Properties("Jet OLEDB:Engine Type").Value

これ.Valueは1から5を返します。5の場合はすでにJet4xにあり、それ以外の場合は以前のバージョンです。

あなたが見ているアップグレードテクニックの別の例もここにあります:MDBデータベースを別のフォーマット(JET、アクセスバージョン)に変換します

于 2010-05-29T03:21:36.810 に答える
1

Office Interopを使用して、情報を取得できます(記事から明らかに盗まれました)。

データベースの作成に使用されたAccessのバージョンを確認するにはどうすればよいですか?

    public void WhichVersion(string mdbPath)
    {
        Microsoft.Office.Interop.Access.Application oAccess = new Microsoft.Office.Interop.Access.ApplicationClass();
        oAccess.OpenCurrentDatabase(mdbPath, false, "");

        Microsoft.Office.Interop.Access.AcFileFormat fileFormat = oAccess.CurrentProject.FileFormat;

        switch (fileFormat)
        {
            case Microsoft.Office.Interop.Access.AcFileFormat.acFileFormatAccess2:
                Console.WriteLine("Microsoft Access 2"); break;
            case Microsoft.Office.Interop.Access.AcFileFormat.acFileFormatAccess95:
                Console.WriteLine("Microsoft Access 95"); break;
            case Microsoft.Office.Interop.Access.AcFileFormat.acFileFormatAccess97:
                Console.WriteLine("Microsoft Access 97"); break;
            case Microsoft.Office.Interop.Access.AcFileFormat.acFileFormatAccess2000:
                Console.WriteLine("Microsoft Access 2000"); break;
            case Microsoft.Office.Interop.Access.AcFileFormat.acFileFormatAccess2002:
                Console.WriteLine("Microsoft Access 2003"); break;
        }

        oAccess.Quit(Microsoft.Office.Interop.Access.AcQuitOption.acQuitSaveNone);
        Marshal.ReleaseComObject(oAccess);
        oAccess = null;
    }
}

編集:

もう1つの方法は、DAOを使用することです(このリンクから日本語から翻訳)。値を微調整する必要があるかもしれませんが、開始するのに適した場所のようです。

public int GetCreatedVersion(string mdbPath)
{
    dao.DBEngine engine = new dao.DBEngine();
    dao.Database db = engine.OpenDatabase(mdbPath, false, false, "");
    string versionString = db.Properties["AccessVersion"].Value.ToString();
    int version = 0;
    int projVer = 0;

    switch (versionString.Substring(0, 2))
    {
        case "02":
            version = 2; break;
        case "06":
            version = 7; break;
        case "07":
            version = 8; break;
        case "08":
            foreach (dao.Property prop in db.Properties)
            {
                if (prop.Name == "ProjVer")
                {
                    projVer = int.Parse(prop.Value.ToString());
                    break;
                }
            }
            switch (projVer)
            {
                case 0:
                    version = 9; break;
                case 24:
                    version = 10; break;
                case 35:
                    version = 11; break;
                default:
                    version = -1; break;                            
            }
            break;
        case "09":
            foreach (dao.Property prop in db.Properties)
            {
                if (prop.Name == "ProjVer")
                {
                    projVer = int.Parse(prop.Value.ToString());
                    break;
                }
            }
            switch (projVer)
            {
                case 0:
                    version = 10; break;
                case 24:
                    version = 10; break;
                case 35:
                    version = 11; break;
                default:
                    version = -1; break;
            }
            break;
    }
    db.Close();

    return version;
}
于 2010-06-01T20:25:48.280 に答える
1

SQL-92言語機能を使用するステートメントのテスト呼び出しを行うだけです。失敗した場合は、アップグレードする必要があります。

于 2010-06-02T15:18:52.550 に答える
-1

私はこれが古い投稿であることを知っていますが、「Jet OLEDB:EngineType」のように取得できる他のプロパティのリストを見つけるために何日も探しました。リストされているすべてのプロパティを含むMSリンクを次に示します。 Jetプロバイダー固有の接続パラメーターのリスト

于 2017-08-01T14:31:00.517 に答える