我用的是ADO操作Access数据库,请问怎么取得一个表的各个
列的名称呢?

解决方案 »

  1.   

    这是一个例子,
    void GetTableSchema(_ConnectionPtr pConnection, _bstr_t bstrTableName,_bstr_t* bstrColumnNames, int* nColumnCount)
    {
    ASSERT(pConnection->State==adStateOpen);
    _RecordsetPtr  pRstSchema  = NULL; try
    {
    SAFEARRAY FAR* psa = NULL;
    SAFEARRAYBOUND rgsabound;
    _variant_t  var;
    _variant_t  Array;
    rgsabound.lLbound = 0;
    rgsabound.cElements = 4;
    psa = SafeArrayCreate(VT_VARIANT, 1, &rgsabound);
    var.vt = VT_EMPTY;
    long ix;
    ix = 0;
    SafeArrayPutElement(psa, &ix, &var); ix= 1;
    SafeArrayPutElement(psa, &ix, &var); ix = 2;
    var.vt = VT_BSTR;
    var.bstrVal =bstrTableName;
    SafeArrayPutElement(psa, &ix, &var);
    SysFreeString(var.bstrVal);

    var.vt = VT_EMPTY;
    ix = 3;
    SafeArrayPutElement(psa, &ix, &var); Array.vt = VT_ARRAY|VT_VARIANT;
    Array.parray = psa;  pRstSchema = pConnection->OpenSchema(adSchemaColumns,&Array);
    *nColumnCount=0;
    while(!(pRstSchema->EndOfFile))
    {
    if(bstrColumnNames!=NULL)
    {
    _bstr_t column_name = pRstSchema->Fields->
    GetItem("COLUMN_NAME")->Value;
    *(bstrColumnNames++)=column_name;
    } *nColumnCount+=1;
    pRstSchema->MoveNext();
    }
    }
    catch (_com_error e) {
    PrintComError(e);
    } if (pRstSchema)
    if (pRstSchema->State == adStateOpen)
    pRstSchema->Close();
    }这个函数这样使用,
    int nColumnCount=0;
    _bstr_t* bstrColumnNames=NULL;
    GetTableSchema(m_pConnection,(_bstr_t)   strTableName,bstrColumnNames,&nColumnCount);
    if(nColumnCount!=0)
    {
    bstrColumnNames=new _bstr_t[nColumnCount];
    GetTableSchema(m_pConnection,(_bstr_t)strTableName,bstrColumnNames,&nColumnCount);
    }
    那么bstrColumnNames里面就是各列的名称了,
    这样可以取得CString strFieldName=(LPCTSTR)bstrColumnNames[i];
      

  2.   

    使用下面的语句sql server 下通过,access没试过
    Select a.status as Status, a.cdefault as cdefault, a.id as id, a.colorder as colorder, c.name as TableName, a.name as ColumnName, b.name as TypeName, a.length as Length, a.scale as Scale, a.isnullable as IsNullAble from syscolumns a, systypes b, sysObjects c where a.xtype = b.xusertype and a.id = c.id and c.xtype='U' and c.name = 'authors' //注:authors是表名称
    order by a.colorder
      

  3.   

    pRstSchema = pConnection->OpenSchema(adSchemaColumns,&Array);
    pRstSchema就是所有列的名称的表
    _bstr_t column_name = pRstSchema->Fields->GetItem("COLUMN_NAME")->Value;
    取得各列的名称