可以获得Access数据库中表的信息

来源:互联网 发布:淘宝定制规则 编辑:程序博客网 时间:2024/06/07 09:33

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//获得数据库中所有用户表的名称(strCnn:数据库联接字符串;arTables:存放用户表名称的数组;成功返回TRUE,失败返回FALSE)

BOOL GetMDBTables(CString strCnn, CStringArray &arTables)
{
     SQLHENV m_henv;
     if( SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&m_henv) )
     {
   TRACE(_T("Failed to run SQLAllocHandle/n"));
   return FALSE;
}
     // 设置版本信息
     if( SQL_SUCCESS != SQLSetEnvAttr(m_henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER) )
     {
   TRACE(_T("Failed to run SQLSetEnvAttr/n"));
   return FALSE;
}
     // 分配连接句柄
     SQLHDBC m_hdbc;
     if( SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_DBC,m_henv,&m_hdbc) )
     {
   TRACE(_T("Failed to run SQLAllocHandle/n"));
   return FALSE;
}
     // 连接数据源
     UCHAR szConnectOutput[512];
     SWORD nResult;
     if( SQL_SUCCESS != SQLDriverConnect(m_hdbc,NULL,(UCHAR*)strCnn.GetBuffer(MAX_PATH+1),SQL_NTS,szConnectOutput,sizeof(szConnectOutput),&nResult,SQL_DRIVER_COMPLETE) )
     {
   TRACE(_T("Failed to run SQLDriverConnect/n"));
   return FALSE;
}
strCnn.ReleaseBuffer();
     SQLHSTMT hstmt = NULL;
     if( SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_STMT,m_hdbc,&hstmt) )
     {
   TRACE(_T("Failed to run SQLDriverConnect/n"));
   return FALSE;
}  
     // 得到所有表名称和表类型
     if( SQL_SUCCESS != SQLTables(hstmt,NULL,0,NULL,0,NULL,0,NULL,0) )
     {
   TRACE(_T("Failed to run SQLDriverConnect/n"));
   return FALSE;
}  
SDWORD cb;
char szTableName[256];
char szTableType[256];
CString strName;
SQLBindCol( hstmt, 3, SQL_C_CHAR, szTableName, 255, &cb );
SQLBindCol( hstmt, 4, SQL_C_CHAR, szTableType, 255, &cb );
while( SQL_SUCCESS == SQLFetch(hstmt) )
{
   if(strcmp(szTableType,"TABLE")==0)
   {
    strName=szTableName;
    arTables.Add(strName);
   }
}
SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
     SQLDisconnect( m_hdbc );
     SQLFreeHandle( SQL_HANDLE_DBC, m_hdbc );
     SQLFreeHandle( SQL_HANDLE_ENV, m_henv );
return TRUE;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//获得数据库中指定用户表的所有字段名称(strCnn:数据库联接字符串;strTable:用户表名称;arFields;存放用户表名称的数组;成功返回TRUE,失败返回FALSE)

BOOL GetMDBFields(CString strCnn, CString strTable, CStringArray &arFields)
{
     SQLHENV m_henv;
     if( SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&m_henv) )
     {
   TRACE(_T("Failed to run SQLAllocHandle/n"));
   return FALSE;
}
     // 设置版本信息
     if( SQL_SUCCESS != SQLSetEnvAttr(m_henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER) )
     {
   TRACE(_T("Failed to run SQLSetEnvAttr/n"));
   return FALSE;
}
     // 分配连接句柄
     SQLHDBC m_hdbc;
     if( SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_DBC,m_henv,&m_hdbc) )
     {
   TRACE(_T("Failed to run SQLAllocHandle/n"));
   return FALSE;
}
     // 连接数据源
     UCHAR szConnectOutput[512];
     SWORD nResult;
     if( SQL_SUCCESS != SQLDriverConnect(m_hdbc,NULL,(UCHAR*)strCnn.GetBuffer(MAX_PATH+1),SQL_NTS,szConnectOutput,sizeof(szConnectOutput),&nResult,SQL_DRIVER_COMPLETE) )
     {
   TRACE(_T("Failed to run SQLDriverConnect/n"));
   return FALSE;
}
strCnn.ReleaseBuffer();
     SQLHSTMT hstmt = NULL;
     if( SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_STMT,m_hdbc,&hstmt) )
     {
   TRACE(_T("Failed to run SQLDriverConnect/n"));
   return FALSE;
}  
// 得到所有表名称和字段名称
if( SQL_SUCCESS == SQLColumns(hstmt,NULL,0,NULL,0,NULL,0,NULL,0) )
{
   SDWORD cb;
   CString str;
   char szTableName[256];
   char szColumnName[256];
   SQLBindCol( hstmt, 3, SQL_C_CHAR, szTableName, 255, &cb );
   SQLBindCol( hstmt, 4, SQL_C_CHAR, szColumnName, 255, &cb );
   while( SQL_SUCCESS == SQLFetch(hstmt) )
   {
    if(strcmp(szTableName,(LPCTSTR)strTable)==0)
    {
     str=szColumnName;
     arFields.Add(str);
    }
   }
}
SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
     SQLDisconnect( m_hdbc );
     SQLFreeHandle( SQL_HANDLE_DBC, m_hdbc );
     SQLFreeHandle( SQL_HANDLE_ENV, m_henv );
return TRUE;
}

 
原创粉丝点击