获取ACCESS2000数据库中所有表的名称
来源:优易学  2010-1-15 17:41:38   【优易学:中国教育考试门户网】   资料下载   IT书店
void OpenSchemaX(TCHAR *TableName)

  {

  HRESULT hr = S_OK;

  ::CoInitialize(NULL); //初始化Com

  IADORecordBinding *picRs = NULL;

  _RecordsetPtr pRstSchema("ADODB.Recordset");

  _ConnectionPtr pConnection("ADODB.Connection" );

  pConnection->ConnectionString = TableName;

  pConnection->Provider = "Microsoft.Jet.OLEDB.4.0";

  try

  {

  pConnection->Open(pConnection->ConnectionString, "", "", adModeUnknown);

  pRstSchema->QueryInterface(

  __uuidof(IADORecordBinding), (LPVOID*)&picRs);

  pRstSchema = pConnection->OpenSchema(adSchemaTables);//枚举表的名称处理

  while(!(pRstSchema->EndOfFile))

  {

  CString strTableType;

  _bstr_t table_name = pRstSchema->Fields->

  GetItem("TABLE_NAME")->Value;//获取表的名称

  _bstr_t table_type = pRstSchema->Fields->

  GetItem("TABLE_TYPE")->Value;//获取表的类型

  strTableType.Format("%s",(LPCSTR) table_type);

  if(!lstrcmp(strTableType,_T("TABLE")))

  {

  m_strList.AddString((LPCSTR) table_name);//添加表的名称

  }

  pRstSchema->MoveNext();

  }

  // Clean up objects before exit.

  pRstSchema->Close();

  pConnection->Close();

  }

  catch (_com_error &e)

  {

  // Notify the user of errors if any.

  // Pass a connection pointer Accessed from the Connection.

  PrintProviderError(pConnection);

  PrintComError(e);

  }

  CoUninitialize();

  }

  void PrintProviderError(_ConnectionPtr pConnection)

  {

  ErrorPtr pErr = NULL;

  if( (pConnection->Errors->Count) > 0)

  {

  long nCount = pConnection->Errors->Count;

  // Collection ranges from 0 to nCount -1.

  for(long i = 0;i < nCount;i++)

  {

  pErr = pConnection->Errors->GetItem(i);

  CString strError;

  strError.Format("Error number: %x\t%s", pErr->Number, pErr->Description);

  AfxMessageBox(strError);

  }

  }

  }

  void PrintComError(_com_error &e)

  {

  _bstr_t bstrSource(e.Source());

  _bstr_t bstrDescription(e.Description());

  // Print COM errors.

  CString strError;

  strError.Format("Error number: Description = %s\tCode meaning = %s",(LPCSTR) bstrDescription, e.ErrorMessage());

  AfxMessageBox(strError);

  }

  调用方法:

  CString strFileName;

  TCHAR FileName[MAX_PATH];

  TCHAR bigBuff[2048] = _T(""); // maximum common dialog buffer size

  TCHAR szFilter[] = _T("Text Files (*.mdb)|*.mdb|All Files (*.*)|*.*

  ");

  CFileDialog dlg(TRUE, NULL, NULL,

  OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT, szFilter);

  // Modify OPENFILENAME members directly to point to bigBuff

  dlg.m_ofn.lpstrFile = bigBuff;

  dlg.m_ofn.nMaxFile = sizeof(bigBuff);

  if(IDOK == dlg.DoModal() )

  {

  strFileName = dlg.GetPathName();

  lstrcpy(FileName,strFileName);

  OpenSchemaX(FileName);

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训