1

ESE データベース ファイル、つまり WebCacheV01.dat を解析しています。これは、IE 10 がすべての閲覧履歴とその他の情報の保存を開始したファイルです。このファイルを解析するために JET Blue CPP API を使用しています。

整数型または長整数型の列値を読み取ることはできますが、文字列型の列値を読み取ることはできません。

たとえば、「MSysObjects」テーブルを開いて、「Name」列の値を取得したいとします。

サンプルコードはこちら

 for( err = ::JetMove( sessionID, tableId, JET_MoveFirst, 0 );
        JET_errSuccess == err;
        err = ::JetMove( sessionID, tableId, JET_MoveNext, 0 ) )
    {
        JET_COLUMNID columnid = 12/*columnid of the Name column*/;
        char *pszBuff = new char[2048];
        if( pszBuff )
        {
            long lReadBytes;
             memset(pszBuff, 0, 2048);
             err = ::JetRetrieveColumn( sessionID,
               tableId,
                columnid,
                pszBuff,
                2047,
               &lReadBytes,
               0,
               NULL);
            delete[] pszBuff;
        }
    }

JetRetrieveColumn の戻り値は -1507 で、これは JET_errColumnNotFound に他なりません。ESEDatabaseViewer ツールを使用して、MSysObjects テーブルに 25 列が含まれていることを確認しました。つまり、列 18 は無効ではありません。

ESE データベースから文字列値を取得する方法を知っている人がいたら教えてください。

よろしくお願いします。

4

1 に答える 1

2

ほぼ 2 日を費やした後、ESE データベース テーブルから値を適切に読み取る方法をようやく見つけました。columnid は順番に並んでいると考えていたので、「ESEDatabaseView」ツールで特定の列の位置を数えて columnid を決定していました。

しかし、そうではありません。columnid を取得する適切な方法は、列の名前を指定して JetGetTableColumnInfo メソッドを呼び出すことです。columnid を取得したら、それを JetRetrieveColumn メソッドで使用して列の値を取得します。

ここに修正されたコードがあります

for( err = ::JetMove( jetSessionId, jetContainersTableId, JET_MoveFirst, 0 );
    JET_errSuccess == err;
    err = ::JetMove( jetSessionId, jetContainersTableId, JET_MoveNext, 0 ) )
{
    unsigned long nReadBytes = 0;

    JET_COLUMNDEF colName;
    err = ::JetGetTableColumnInfoW(jetSessionId, jetContainersTableId, L"Name", (void *)&colName, sizeof(JET_COLUMNDEF), JET_ColInfo);

    wchar_t szName[MAX_PATH] = {0};
    if( JET_errSuccess == err )
    {
        err = ::JetRetrieveColumn(jetSessionId, jetContainersTableId, colName.columnid, szName, sizeof(szName) , &nReadBytes, 0, NULL);
    }
}

これは、ESE データベースで作業している人を助けるかもしれません。

于 2015-02-18T10:31:02.410 に答える