VC6.0+ADOXint CNumDatabase::Create(CString Filename)
{
HRESULT hr;
_CatalogPtr pCatalog;
_TablePtr pTableSetting, pTableSN;
CString sConn; sConn.Format( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s", Filename, "Icey2007" ); try
{
TESTHR( hr = pCatalog.CreateInstance(__uuidof(Catalog)) ); pCatalog->Create( _bstr_t(sConn) );
pCatalog->PutActiveConnection( _variant_t(sConn) ); TESTHR( hr = pTableSetting.CreateInstance(__uuidof(Table)) ); pTableSetting->Name = "_Setting";
pTableSetting->Columns->Append( "Index", adInteger, 0 );
pTableSetting->Columns->Append( "Time", adDate, 0 );
pTableSetting->Columns->Append( "Product", adVarWChar, 12 );
pTableSetting->Columns->Append( "Operation", adVarWChar, 8 );
pTableSetting->Columns->Append( "Content", adVarWChar, 40 );
pCatalog->Tables->Append( _variant_t((IDispatch *)pTableSetting) ); //pTableSetting->Keys->Append( "_Setting_Key", adKeyPrimary, "Index", "", "" ); pTableSetting->Columns->GetItem("Index")->Properties->GetItem("AutoIncrement")->PutValue( _variant_t(VARIANT_TRUE,VT_BOOL) );  //========================= 在这一句出错 ========================
pTableSetting->Columns->GetItem("Product")->Properties->GetItem("Jet OLEDB:Allow Zero Length")->PutValue( _variant_t(VARIANT_FALSE,VT_BOOL) );
pTableSetting->Columns->GetItem("Operation")->Properties->GetItem("Jet OLEDB:Allow Zero Length")->PutValue( _variant_t(VARIANT_FALSE,VT_BOOL) );
pTableSetting->Columns->GetItem("Content")->Properties->GetItem("Jet OLEDB:Allow Zero Length")->PutValue( _variant_t(VARIANT_FALSE,VT_BOOL) ); TESTHR( hr = pTableSN.CreateInstance(__uuidof(Table)) ); pTableSN->Name = "SN";
pTableSN->Columns->Append( "Number", adVarWChar, 24 );
pTableSN->Columns->Append( "Product", adVarWChar, 12 );
pTableSN->Columns->Append( "State", adVarWChar, 4 );
pTableSN->Columns->Append( "SN", adVarWChar, 24 );
pTableSN->Columns->Append( "Time", adDate, 0 );
pCatalog->Tables->Append( _variant_t((IDispatch *)pTableSN) ); pTableSN->Columns->GetItem("Number")->Properties->GetItem("Jet OLEDB:Allow Zero Length")->PutValue( _variant_t(VARIANT_FALSE,VT_BOOL) );
pTableSN->Columns->GetItem("Product")->Properties->GetItem("Jet OLEDB:Allow Zero Length")->PutValue( _variant_t(VARIANT_FALSE,VT_BOOL) );
pTableSN->Columns->GetItem("State")->Properties->GetItem("Jet OLEDB:Allow Zero Length")->PutValue( _variant_t(VARIANT_FALSE,VT_BOOL) );
pTableSN->Columns->GetItem("SN")->Properties->GetItem("Jet OLEDB:Allow Zero Length")->PutValue( _variant_t(VARIANT_FALSE,VT_BOOL) );
}
catch(_com_error &e) 
{
_bstr_t bstrSource( e.Source() );
_bstr_t bstrDescription( e.Description() );
return -16002;
}
catch(...) 
{
return -16002;
} return 0;
}运行到设置 AutoIncrement 时出错 “{"多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。" (1)}”。如果没有这一句则能正常执行。请问引起错误的原因?
或者我的方法不对,那又该如何设置一个自动编号的列?

解决方案 »

  1.   


    pTableSetting->SetFiledProperty("Index", "AutoIncrement", TRUE);
      

  2.   


    应该是这个
    pTableSetting->Columns->GetItem("Index")->Properties->GetItem("AutoIncrement")->Value=TRUE;
      

  3.   


    shunruo:不行的,早就试过了,编译都通不过:NumDatabase.cpp(77) : error C2664: 'PutValue' : cannot convert parameter 1 from 'const int' to 'const class _variant_t &'
            Reason: cannot convert from 'const int' to 'const class _variant_t'
            No constructor could take the source type, or constructor overload resolution was ambiguous把 TRUE 换成 VARIANT_TRUE,编译能通过,但运行时还是出错。
      

  4.   

    参考:
    pTable->PutName(tTableName);
    // we need to put parent catalog to see the
    // Properties collection
    pTable->PutParentCatalog(pCatalog);pColumn.CreateInstance(__uuidof(Column));pColumn->Name = "SomeName";
    pColumn->Type = adInteger;
    pColumn->DefinedSize = 10;pTable->Columns->Append(_variant_t((IDispatch *)pColumn),
    adInteger, 10);pColumn = pTable->Columns->GetItem("SomeName");pColumn->Properties->GetItem("Autoincrement")->Value =
    true;// here you can set another column propertiespColumn->Release();
    pColumn = NULL;pCatalog->Tables->Append(_variant_t((IDispatch *)pTable));