有谁知道用SQLTables()函数返回数据库中的表后,怎么再从该返回结果中取出该数据库中表的名称!谢谢!!

解决方案 »

  1.   

    看看下面的例子,关键是在调用SQLTables()后用SQLBindCol()来绑定所要的数据列,再调用SQLFetch()获取数据。Good Luck!
    try
    {
    if(db.Open(NULL))
    {
    CString strDBName,strMsg1,strMsg2;
    //strMsg1=db.GetConnect ();
    strDBName=db.GetDatabaseName();
    strMsg2.Format("Open database %s ok! ",strDBName);
    //AfxMessageBox(strMsg2);

    retcode=SQLAllocHandle(SQL_HANDLE_STMT,db.m_hdbc, &hstmt);

    // Get a list of the tables
    retcode = SQLTables( hstmt,
    NULL, 0,      /* All catalogs */
    NULL, 0,      /* All schemas   */
    NULL, 0,   /* All tables */
    NULL, 0);     /* All columns  */

    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
    {
    SQLRETURN rc;
    long lRecordRead=0;
    SWORD FAR iNumResultCols=0;
    CObArray arrODBCColumns;

    #define NAME_LENs 100
    SQLCHAR szName[NAME_LENs];
    SQLINTEGER cbName;
    SQLBindCol(hstmt, 3, SQL_C_CHAR, szName, NAME_LENs, &cbName);
    while(true)
    {
    rc=SQLFetch(hstmt);
    if(rc==SQL_ERROR)
    continue;
    if(rc==SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
    {
    CString strTName=szName;
    m_listbox.AddString (strTName);
    }
    else 
    {
    break;
    }

    }

    SQLFreeHandle(SQL_HANDLE_STMT,hstmt);

    } }
    }
    catch(CDBException* p_dbe)
    {
    AfxMessageBox(p_dbe->m_strError,MB_ICONERROR);
    p_dbe->Delete();
    return FALSE;
    }