1

ACE データベース ドライバーを使用しています。ADOX を使用してアクセス データベースを作成しており、SQL コマンドを使用してデータを挿入しようとしています。ファイル名が .mdb 拡張子を使用している場合は機能しませんが、.accdb を使用している場合は機能します。x64 ace ドライバーを使用しています

    //create new database
PMString connectString("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=");
connectString += getFileName().c_str();
ADOX::_CatalogPtr pCatalog(__uuidof(ADOX::Catalog));
try{
    pCatalog->Create(connectString.c_str());
}catch( _com_error &e){
    throw dymexexception("Error creating table");
}


    //init connection
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
    throw dymexexception("Failed to initialize database");
hr = pConnection.CreateInstance(__uuidof(Connection));
if (FAILED(hr))
    throw dymexexception("Failed to initialize database");
hr = pConnection->Open(connectString.c_str(),"","",0);
if(FAILED(hr))
    throw dymexexception("Failed to initialize database");

これが挿入部分です

        //build sql insert query and execute it
    queryString = "INSERT INTO " + tableName + " VALUES(";
    for(int i=0;i<fieldValues.size();i++)
    {
        if(i>0)
            queryString += ",";
        queryString += fieldValues[i];
    }
    queryString += ")";
    executeSqlCmd(pCommand,queryString);

これは executeSqlCmd 関数の場所です

AdoNS::_RecordsetPtr ResultDatabase::executeSqlCmd(AdoNS::_CommandPtr pCommand,      PMString queryString)
{
pCommand->CommandText = (_bstr_t) queryString.c_str();
return pCommand->Execute(NULL,NULL,NULL);
}

フィードバックはありますか?

4

0 に答える 0