VC编程列举数据库中的表(应用)

// #include <afxdb.h>
void  CDataDlg::OnButton2() 
{
    
// TODO: Add your control notification handler code here
    CStringArray strList;
    ListTables(FALSE, FALSE, strList );
    
forint i=0; i< strList.GetSize(); i++)
    
{
        m_list1.AddString( strList.GetAt( i ) );
    }

    strList.RemoveAll();
}


// VC编程列举数据库中的表格
BOOL ListTables( bool  bViews,  bool  bSystemTables, CStringArray  &  listbox)
{
    
// const char strDSN[]="ds_person";//???¨??μ?ODBCêy?Y?′??3?
    
// CDatabase database;
    CDatabase m_database;
    
    
int  ret= -1;
    HSTMT hStmt;
    UCHAR   szName[
256];
    SDWORD  cbName;
    
    
// è±ê?è?ó??§±í?¢2?êy????êóí??¢?μí3±í
    CString type = "'TABLE'";
    
if( bViews )
        type 
+= ", 'VIEW'";//êóí?
    if( bSystemTables )
        type 
+= ", 'SYSTEM TABLE'";//?μí3±í
    
// í¨1yODBC′ò?aêy?Y?a
    try
    
{
        
if!m_database.Open(NULL,FALSE,FALSE,_T("ODBC;"),TRUE) )
            
return false;
    }

    
catch(CDBException * e)
    
{
        AfxMessageBox(e
->m_strError);
        
return false;
    }

    
// ·???Statement??±ú
    
//SQLAllocStmt (database.m_hdbc,&hStmt);
    SQLAllocHandle (SQL_HANDLE_STMT,m_database.m_hdbc,&hStmt);
    
// ??è?±íD??¢(·μ??ò???êy?Y±í)
    ret = SQLTables(hStmt,
        NULL,SQL_NTS,
        NULL,SQL_NTS,
        NULL,SQL_NTS,
        (unsigned 
char *)type.GetBuffer(0),SQL_NTS);
    
if(ret == SQL_ERROR)
    
{
        SQLFreeStmt(hStmt,SQL_CLOSE);
        m_database.Close();
        
if(ret ==  SQL_INVALID_HANDLE )
        
{
            AfxMessageBox(
"Invalid handle");
            
return false;
        }

        AfxMessageBox(
"Database Could Not be Open");
        
return false;
    }

    
// áD±í???t????
    
// listbox.ResetContent();
    CString strtemp;
    
while(1)
    
{
        strtemp 
= "";
        
// è?êy?Yμ??o3???
        ret = SQLFetch(hStmt);
        
if(ret == SQL_NO_DATA_FOUND)
            
break;
        
// è??3ò?áDêy?Y(μú3áD?a±í??£??????1óD±íê?D??¢êy?Y?a??μè)
        
// ret = SQLGetData(hStmt, 3, SQL_C_CHAR, szName, TABLE_NAME_LENGTH, &cbName);
        ret = SQLGetData(hStmt, 3, SQL_C_CHAR, szName, 10&cbName);
        strtemp 
= ((char*)szName);//?óè?áD±í???t??ê?
        listbox.Add(strtemp);
    }

    
// listbox.SetCurSel(0);//???D
    
// êí·???±ú
    SQLFreeStmt( hStmt,SQL_CLOSE);
    m_database.Close();
    
    
return true;
 
}
罗纳尔成
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值