在VC中使用SQL语句查询Access数据库,请问如何得到SQL语句的运行结果?比如我写了一个SELECT查找语句,怎么知道它是否找到?是不是用CDaoRecordset类的什么方法?

解决方案 »

  1.   

    你是什么连接方式?以下是odbc的CDatabase db;
    db.OpenEx( NULL, CDatabase::forceOdbcDialog );// Create and open a recordset object
    // directly from CRecordset. Note that a
    // table must exist in a connected database.
    // Use forwardOnly type recordset for best
    // performance, since only MoveNext is required
    CRecordset rs( &db );
    rs.Open( CRecordset::forwardOnly,
             _T( "SELECT * FROM SomeTable" ) );// Create a CDBVariant object to
    // store field data
    CDBVariant varValue;// Loop through the recordset,
    // using GetFieldValue and
    // GetODBCFieldCount to retrieve
    // data in all columns
    short nFields = rs.GetODBCFieldCount( );
    while( !rs.IsEOF( ) )
    {
       for( short index = 0; index < nFields; index++ )
       {
          rs.GetFieldValue( index, varValue );
          // do something with varValue
       }
       rs.MoveNext( );
    }rs.Close( );
    db.Close( );
      

  2.   

    我对数据库不熟,所以每次都用纯ODBC实现,以下的代码从程序里抄出来的,用的就是access数据库,代码肯定用不成,看个流程就行了
    SQLHENV m_hEnv;
    SQLHDBC m_hDbc;
    char szFile[SQL_MAX_MESSAGE_LENGTH] = "alskdfjalskdf";
    const char *pDriver = "asldfkjasdf";
    if ( TRUE != SQLConfigDataSource( NULL, ODBC_CONFIG_DSN, pDriver, szFile ) )
    {
    if ( TRUE != SQLConfigDataSource( NULL, ODBC_ADD_DSN, pDriver, szFile ) )
    {
    THROWISTERROR();
    }
    }
    SQLRETURN rc;
    SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_hEnv );
    SQLSetEnvAttr( m_hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0 ); 
    SQLAllocHandle( SQL_HANDLE_DBC, m_hEnv, &m_hDbc ); 
    SQLSetConnectAttr( m_hDbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0 );
    rc = SQLConnect( m_hDbc, (SQLCHAR*)"dnsname", SQL_NTS, NULL, 0, NULL, 0 );
    if ( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO )
    {
    throw 0;
    }
    SQLRETURN rc;
    SQLHSTMT hStmt;
    char szStmt[1024] = "SELECT * FROM ";
    strcat( szStmt, m_szTable );
    strcat( szStmt, " WHERE NUM=" );
    itoa( m_nQueryNum, szStmt + strlen( szStmt ), 10 );
    rc = SQLAllocHandle( SQL_HANDLE_STMT, m_hDbc, &hStmt );
    if ( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO )
    {
    THROWSQLERROR( SQL_HANDLE_DBC, m_hDbc );
    }
    rc = SQLExecDirect( hStmt, (SQLCHAR*)szStmt, SQL_NTS );
    if ( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO )
    {
    THROWSQLERROR( SQL_HANDLE_STMT, hStmt );
    }
    char szBuild[32];
    char szRoom[32];
    char szOffice[32];
    char szPart[32];
    char szName[32];
    char szJob[32];
    char szDial[32];
    char szExt[32];
    SQLLEN sl;
    rc = SQLBindCol( hStmt, 3, SQL_C_CHAR, szBuild, 32, &sl );
    if ( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO )
    {
    THROWSQLERROR( SQL_HANDLE_STMT, hStmt );
    }
    rc = SQLBindCol( hStmt, 4, SQL_C_CHAR, szRoom, 32, &sl );
    rc = SQLBindCol( hStmt, 5, SQL_C_CHAR, szOffice, 32, &sl );
    rc = SQLBindCol( hStmt, 6, SQL_C_CHAR, szPart, 32, &sl );
    rc = SQLBindCol( hStmt, 7, SQL_C_CHAR, szName, 32, &sl );
    rc = SQLBindCol( hStmt, 8, SQL_C_CHAR, szJob, 32, &sl );
    rc = SQLBindCol( hStmt, 9, SQL_C_CHAR, szDial, 32, &sl );
    rc = SQLBindCol( hStmt, 10, SQL_C_CHAR, szExt, 32, &sl );
    int nIndex = 0;
    HWND hOffice = GetDlgItem( m_hDlg, IDC_LISTOFFICE );
    HWND hPeople = GetDlgItem( m_hDlg, IDC_LISTPEOPLE );
    while ( true )
    {
    ZeroMemory( szDial, sizeof(szDial) );
    ZeroMemory( szOffice, sizeof(szOffice) );
    rc = SQLFetch( hStmt );
    if ( rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO )
    {
    if ( nIndex == 0 )
    {
    AddListItem( hOffice, 0, 2, "办公室名:", szOffice );
    AddListItem( hOffice, 1, 2, "隶属部门:", szPart );
    AddListItem( hOffice, 2, 2, "房间号:", szRoom );
    AddListItem( hOffice, 3, 2, "所在楼号:", szBuild );
    }
    AddListItem( hPeople, nIndex, 4, szName, szJob, szDial, szExt );
    }
    else if ( rc == SQL_NO_DATA )
    {
    break;
    }
    else
    {
    THROWSQLERROR( SQL_HANDLE_STMT, hStmt );
    }
    nIndex++;
    }
    SQLFreeHandle( SQL_HANDLE_STMT, hStmt );
      

  3.   

    连接字符串是下面的格式:dbq=数据库文件名\0DSN=DSN名称驱动名在下面,注意,一个空格都不能多也不能少
    Microsoft Access Driver (*.mdb)
      

  4.   

    另外,要用ODBC的话要包含一些头文件:
    #include <Sql.h>
    #include <SqlExt.h>
    #include <odbcinst.h>再在实现文件的头里加上下面的一行:
    #pragma comment( lib, "odbc32.lib" )