ODBC有一个函数SQLColumns()可以取得列的信息,我把MSDN上关于该函数的例子编译后发现取出的字段名(COLUMN_NAME)不是实际的字段名而是Field1,Field2,Field3这样的字符串,怎么才能得到实际的列名呢?

解决方案 »

  1.   

    SQLRETURN SQLColAttribute (
    SQLHSTMTStatementHandle,
    SQLUSMALLINTColumnNumber,
    SQLUSMALLINTFieldIdentifier,
    SQLPOINTERCharacterAttributePtr,
    SQLSMALLINTBufferLength,
    SQLSMALLINT *StringLengthPtr,
    SQLPOINTERNumericAttributePtr);
      

  2.   

    CRecordset m_set;
    CODBCFieldInfo fieldinfo ;
    int col=0;//第几列
    m_set.Open(CRecordset::forwardOnly,_T(m_SQL),CRecordset::readOnly);m_set.GetODBCFieldInfo((short) col,fieldinfo );fieldinfo.m_strName就是列名
      

  3.   

    to wanglei888(阿笨猫) 
    用SQLColAttribute 在哪里设置表名啊?to 52001314(passenger)
    _T(m_SQL)里面应该写什么?总列数怎么获得呢?
      

  4.   

    52001314说的已经很全面了,至于总列数可以用
    long nFields = rs.GetODBCFieldCount( );_T(m_SQL)就是sql语句,例如"select * from custmer"
      

  5.   

    to qxin2002(秋子) 
    上面的代码能运行吗?是不是还要用CDatabase连接数据库?
      

  6.   

    qxin2002都说了,总列数用m_set.GetODBCFieldCount();
    T(m_SQL)就是sql语句.要用CDatabase;
    CDatabase g_database;
    g_database.Open(.....);
    CRecordset m_set(&g_database);
    m_set.Open(CRecordset::forwardOnly,_T(m_SQL),CRecordset::readOnly);m_set.GetODBCFieldInfo((short) col,fieldinfo );
      

  7.   

    用MFC中关于ODBC的类比较方便
    可参见52001314(passenger)的答案,另外在补充一点
    m_SQl中最好加上一个Where子句 where 1=2 这样速度可以快点(因为没有满足条件的记录,减少系统的消费)
      

  8.   

    你们都能取到列名吗,我的结果怎么还是样的,代码如下:
    CDatabase g_database;
    g_database.Open(_T( "myDB" ), FALSE,FALSE, _T( "ODBC;UID=my" ));
    CRecordset m_set(&g_database);
    CODBCFieldInfo fieldinfo ;
    CString sql="select * from myTable where 1=2";
    m_set.Open(CRecordset::forwardOnly,sql,CRecordset::readOnly);
    long nFields = m_set.GetODBCFieldCount( );
    for(int i=0;i<nFields;i++)
    {
    m_set.GetODBCFieldInfo((short) i,fieldinfo );
    cout<<fieldinfo.m_strName<<endl;
    }输出结果
    Field1
    Field2
    Field3
    Field4
    Field5
    Field6
    Field7
    Field8
    Field9
    Field10怎么回事啊?
      

  9.   

    to 52001314(passenger) 
    不是中文的
    我看SQLColumns()帮助中有这样一句话,但还是不明白
    If the SQL_ATTR_METADATA_ID statement attribute is set to SQL_TRUE, ColumnName is treated as an identifier, and its case is not significant. If it is SQL_FALSE, ColumnName is a pattern value argument; it is treated literally, and its case is significant.
      

  10.   

    to 52001314(passenger) 
    我的列名也是中文的,怎么就不行呢?
    能不能发个能运行的简单源代码给我?
      

  11.   

    写错了,我的列名也是英文的。
    我的mail:[email protected]