我用ADO对一个access数据库编程,如果我不知道这个数据库中有哪些数据表,我怎么得到关于所有数据表的信息,比如表名。有人说用ADOX能解决这个问题,不知道应该怎么做?如果直接用ADO,真的就毫无办法了吗?
各位高手,希望你能给我一个较详细的例子说明,小弟我先谢过了!!!

解决方案 »

  1.   

    pConnection->OpenSchema() 用这个方面就可以,祥细调用方法查阅 MSDN 。
      

  2.   

    VB的写法,改改就可以用在VC上了。
    Public Sub OpenSchemaX() Dim cnn1 As ADODB.Connection
    Dim rstSchema As ADODB.Recordset
    Dim strCnn As String

    Set cnn1 = New ADODB.Connection
    strCnn = "driver={SQL Server};server=srv;" & _
    "uid=sa;pwd=;database=pubs"
    cnn1.Open strCnn

    Set rstSchema = cnn1.OpenSchema(adSchemaTables)

    Do Until rstSchema.EOF
    Debug.Print "Table name: " & _
    rstSchema!TABLE_NAME & vbCr & _
    "Table type: " & rstSchema!TABLE_TYPE & vbCr
    rstSchema.MoveNext
    Loop
    rstSchema.Close

    cnn1.Close

    End Sub
      

  3.   

    inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
    bool IsTableExist(LPCTSTR sConnectionStr,LPCTSTR suser,LPCTSTR spwd,LPCTSTR sTableName)
    {
    bool bTableExist = false;
    HRESULT hr = S_OK;
    std::ostringstream oss;
    ADOX::_CatalogPtr m_pCatalog = NULL;
    try
    {
    TESTHR(hr = m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog)));
    m_pCatalog->PutActiveConnection((LPCTSTR)sConnectionStr);
    ADOX::TablesPtr tables=m_pCatalog->Tables;
    for(long i=0;i<tables->Count;i++)
    {
    ADOX::_TablePtr pTable = NULL;
    pTable=tables->Item[i];
    if(stricmp(sTableName,(LPCSTR)(pTable->Name))==0)
    {
    bTableExist = true;
    break;
    }
    }
    }
    catch(_com_error &e)
    {
    _bstr_t bstrSource(e.Source());
    _bstr_t bstrDescription(e.Description());
    oss<<"_com_error Source:"<<(LPCSTR)bstrSource<<" \t description: ";
    oss<<(LPCSTR)bstrDescription;
    AfxMessageBox(oss.str().c_str());
    }
    return bTableExist;
    }