在codeproject搞了个操作数据库的ADO类,想要枚举数据库的表,但就是搞不对。哪位大侠给个代码,或者给我指点一下迷津。
我用了下面的代码:CADORecordset *pAdoRs = new CADORecordset(pAdoDb);
pAdoRs->OpenSchema(adSchemaTables);
CADOFieldInfo *pInfo;
CString tabletype,tablename;
while(!pAdoRs->IsEOF())
{

pAdoRs->GetFieldInfo("TABLE",pInfo);
 tablename=pInfo->m_strName;
 AfxMessageBox(tablename);
}问题就是这个GetFieldInfo("TABLE",pInfo);函数的第一个参数我实在不知道要传什么值进去才能得到表名。

解决方案 »

  1.   

    也可用_bstr_t类型的变量试一下.
      

  2.   

    对,就是访问Fields里面的信息,但是我不知道要传递什么值进去才能得到表名。这个函数是codeproject里面一个人重写的类。它给了个例子:              long lVal;
                pRs->GetFieldValue("ID", lVal);
                pRs->MoveNext();
      

  3.   

    是不是应该用GetFieldValue来得到Fields对象中的表名?那么该传递什么参数呢?
      

  4.   

    CADORecordset *pAdoRs = new CADORecordset(pAdoDb);
    pAdoRs->OpenSchema(adSchemaTables);
    CString tabletype,tablename;
    while(!pAdoRs->IsEOF())
    {

    pAdoRs->GetFieldValue("TABLE_NAME",tablename);
                    pAdoRs->MoveNext();
     AfxMessageBox(tablename);
    }
    我已经解决了,但是这样会得到好多系统表,如何过滤掉只得到我的用户表???给个代码分就相送了!
      

  5.   

    GetFieldInfo("TABLE",pInfo);应该得到的是字段信息吧!其中TABLE是你的表名
      

  6.   

    我的Blog上有一篇相关的文章~
      

  7.   

    有返回的RecordSet中TABLE_TYPE一列可用。adSchemaTables
    20 
    返回目录中定义的给定用户可访问的表(包括视图)。 
    (TABLES Rowset)
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_NAME
    TABLE_TYPE 
      

  8.   

    获取表的type来区分系统表
    char pType[40];
    CString sTableName;               //非系统表名
    strcpy(pType, (char *)_bstr_t(pRstSchema->GetCollect("TABLE_TYPE")));
    if (!strcmp(pType, "TABLE"))  //如果是系统表的话会返回"SYSTEM TABLE"
    {
       ...
    }