用ADOX 創建數據庫

用ADOX  
   
  BOOL   CPassportDoc::CreateDB(LPCTSTR   lpszFile)  
  {  
    if(::PathFileExists(lpszFile)){  
      CString   strTemp;  
      strTemp.Format(IDS_TARGET_EXISTS,lpszFile);  
      AfxMessageBox(lpszFile);  
      return   FALSE;  
    }  
    ADODB::_ConnectionPtr   tempConnn;  
    ADOX::_CatalogPtr   pCatalog   =   NULL;  
    ADOX::_TablePtr     pTable   =   NULL;  
          ADOX::_IndexPtr   pIndexNew     =   NULL;  
          ADOX::_IndexPtr   pIndex     =   NULL;  
    CString   strConnect;  
    CString   strDBPath=lpszFile;  
    strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=%s"),strDBPath);  
    COleVariant   Connect(strConnect);    
    try{  
      pCatalog.CreateInstance(_T("ADOX.Catalog"));  
      pCatalog->Create((LPCTSTR)strConnect);//創建數據庫  
      tempConnn.CreateInstance(_T("ADODB.Connection"));  
      tempConnn->PutCommandTimeout(30);  
      tempConnn->PutConnectionTimeout(30);  
      tempConnn->put_CursorLocation(ADODB::adUseClient);  
      tempConnn->Open(_bstr_t(strConnect),_bstr_t(),_bstr_t(),ADODB::adConnectUnspecified);  
      pCatalog->PutActiveConnection(_variant_t((IDispatch   *)   tempConnn));  
      pTable.CreateInstance(_T("ADOX.Table"));  
      pTable->ParentCatalog   =pCatalog;  
      pTable->Name="Passport";  
      ADOX::ColumnsPtr   pCols   =pTable->Columns;  
      pCols->Append(_T("RecordID")     ,ADOX::adInteger,0);//自動編號字段  
      pCols->Append(_T("Name")       ,ADOX::adWChar,255);//文本字段  
      pCols->Append(_T("DateOfBirth")     ,ADOX::adDate,0);//日期字段  
      pCols->Append(_T("OtherInfo"),ADOX::adLongVarWChar,0);//備註字段  
      pCatalog->Tables->Refresh();  
      long   lCount=pCols->Count;  
      for(long   i=0;i<lCount;i++){  
        pCols->GetItem(i)->ParentCatalog   =pCatalog;//重要!設置Catalog,參見Q201826   PRB:   Error   3265   When   You   Access   Properties   Collection  
        ADOX::PropertiesPtr   pProperties=pCols->GetItem(i)->Properties;  
        if(pProperties){//這裏是用於調試的屬性顯示代碼  
          long   lp=pProperties->Count;  
          TRACE("Properties   for   Col   %s/r/n",(LPCTSTR)pCols->GetItem(i)->Name);  
          for(long   j=0;j<lp;j++){  
            TRACE("/rProperty   %s:%s/r/n",g_GetValueString(pProperties->GetItem(j)->Name)  
              ,g_GetValueString(pProperties->GetItem(j)->Value));  
          }  
        }  
      }  
      pCols->GetItem(_T("RecordID"))->Properties->GetItem(_T("Description"))->Value=_T("記錄編號");//註釋  
      pCols->GetItem(_T("RecordID"))->Properties->GetItem(_T("AutoIncrement"))->Value=true;//自動編號  
      pCols->GetItem(_T("Name"))->Properties->GetItem(_T("Jet   OLEDB:Compressed   UniCode   Strings"))->Value=true;  
      pCols->GetItem(_T("Name"))->Properties->GetItem(_T("Description"))->Value=_T("姓名");  
      pCols->GetItem(_T("DateOfBirth"))->Properties->GetItem(_T("Description"))->Value=_T("出生日期");  
    pCols->GetItem(_T("OtherInfo"))->Properties->GetItem(_T("Jet   OLEDB:Compressed   UniCode   Strings"))->Value=true;  
      pCols->GetItem(_T("OtherInfo"))->Properties->GetItem(_T("Description"))->Value=_T("其他信息");  
      pCatalog->Tables->Append(_variant_t   ((IDispatch*)pTable));//添加表  
      pCatalog->Tables->Refresh();//刷新  
      pIndexNew.CreateInstance(_T("ADOX.Index"));  
      pIndexNew->Name   =   "RecordID";//索引名稱  
      pIndexNew->Columns->Append("RecordID",ADOX::adInteger,0);//索引字段  
      pIndexNew->PutPrimaryKey(-1);//主索引  
      pIndexNew->PutUnique(-1);//唯一索引  
      pTable->Indexes->Append(_variant_t   ((IDispatch*)pIndexNew));//創建索引  
      pIndexNew=NULL;  
      pCatalog->Tables->Refresh();//刷新  
      return   TRUE;  
    }  
    catch(_com_error   &e){  
      ESErrPrintProviderError(tempConnn);  
      ESErrPrintComError(e);  
      return   FALSE;  
    }  
    catch(...){  
    }    
    return   FALSE;  
  }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章