获取ACCESS2000数据库中的所有表的名称(vc + ado)

原创 2004年06月04日 14:56:00

原理就是通过枚举数据库中的表的类型,用户建立的表的类型一般是TBALE。所以通过判断当前数据库中表的类型,就可以获取表的名称了。

 

 

初始化部分

在stdafx.h中添加:

#include <icrsint.h>
#include <basetsd.h>
#include <ole2.h>

#import "c:/Program Files/Common Files/System/ADO/msado15.dll" /
no_namespace rename("EOF", "EndOfFile")

 

在主对话框的头文件中,映射一个:

 CListBox m_strList;

 

 

实现部分说明:

 

在构造函数中添加:

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

 

实现代码:

//枚举数据表的名称处理

 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);
        }
    }
}

//打印COM的错误信息

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() )
 {

  m_strList.ResetContent();
  strFileName = dlg.GetPathName();
  lstrcpy(FileName,strFileName);
  OpenSchemaX(FileName);
 }

 

释放部分:

LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 // TODO: Add your specialized code here and/or call the base class
 switch(message) {
 case WM_CLOSE:
  CoUninitialize();  
  break;
 default:
  break;
 }
 return CDialog::WindowProc(message, wParam, lParam);
}

调试环境:

WIN2000 + ADO + ACCESS2000 + VSP5

VC sqlserver中获取数据库所有表、字段名、记录数据

 sqlserver数据库listnulldeletesql [cpp] view plaincopyprint? class="cpp" name="code">/...
  • myiszjf
  • myiszjf
  • 2015年07月31日 17:25
  • 1060

详细介绍—获取ACCESS数据库中所有的表名(ODBC + MFC实现)解决方法

网上关于获取ACCESS数据库中所有的表名的文章挺多的,但是说的不是很详细,对于初学者来说很难看懂(我也是初学者呵呵),研究了很久,自己弄懂后,觉得很有必要做个详细的介绍,以免其他初学者向我一样,因为...
  • auragreen
  • auragreen
  • 2013年10月10日 11:58
  • 4387

得到Access数据库中的所有表名

///          /// 返回Mdb数据库中所有表表名          ///          public string[] GetShemaTableName(string da...
  • ffei060828
  • ffei060828
  • 2014年06月10日 23:39
  • 2045

ADO查询怎样得到EXCEL表名

采用ADO查询EXCEL,需要知道表名,一般EXCEL的第一个表名为“sheet1”,如果有例外,就需要先得到表名,否则会报错。程序如下:(其中参量file为服务器中excel文件的全路径名)Func...
  • nataka
  • nataka
  • 2005年11月08日 15:01
  • 1317

ADO读取EXCEL所有表名

        Dim cnFrom     As New ADODB.Connection    from excel        Dim cnTo     As New ADODB.Connec...
  • netcellsoft
  • netcellsoft
  • 2009年01月08日 16:57
  • 2022

VC用ADO访问数据库

VC用ADO访问数据库全攻略,介绍了VC用ADO来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看。  正文  一、ADO概述  ADO是Microsoft为最新和最强大的数据访问...
  • worldy
  • worldy
  • 2013年09月21日 11:18
  • 4610

python查询数据库所有表名和字段,使用SQLAlchemy查询所有表名

方法1: from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() engin...
  • BennyShi1998
  • BennyShi1998
  • 2017年07月24日 13:29
  • 1350

java获取mysql库的所有表名

public static List getTableNames() { Connection connection = null; PreparedStatement...
  • wynlqxm
  • wynlqxm
  • 2015年02月26日 18:11
  • 317

VC中用ADO记录集对象,获取某个表的记录总数!...

//呵呵,在网上查了下资料,再加上自己的亲自实践,还真获得了记录总数,在此记录下关键代码,以后用得着呢! //记得我第一次获取记录总数的时侯得到了一个-1,呵呵,现在终于明白是啥回事了,原来是游标的...
  • friendan
  • friendan
  • 2011年11月10日 13:04
  • 4413

vb获取数据库中所有表的名称

如何在 Visual Basic 中使用 ADO OpenSchema 方法 文章编号: 186246 - 查看本文应用于的产品 查看机器翻译免责声明 点击这里查看逐句中英文对照机器翻译 ...
  • hws1058648831a
  • hws1058648831a
  • 2013年05月20日 17:10
  • 1572
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:获取ACCESS2000数据库中的所有表的名称(vc + ado)
举报原因:
原因补充:

(最多只允许输入30个字)