例如:
id          name           sex           age
1           aa             男            24
2           bb             女            30
3           cc             女            16
如何得到所有的记录,即取出所有的值?
注意:我并不一定知道字段的名字如id,name等,因为客户可能查询许多表中的一个,并且查询的字段也不固定,select*from 或者select id,name from 或者 select name,sex from等。

解决方案 »

  1.   

    知道表名:ADO+SQL根据表名得到字段信息#include <conio.h>
    #define PAUSE  printf("\npress any key to exit"); getch();#define _WIN32_DCOM#pragma warning(push)
    #pragma warning(disable:4146)
    #import "e:\program files\common files\system\ado\MSADO15.DLL" no_namespace rename("EOF", "EndOfFile")
    #pragma warning(pop)int main(int argc, char* argv[])
    {
    _ConnectionPtr m_pConn;
    _RecordsetPtr m_pRs;
    CoInitializeEx(NULL, COINIT_MULTITHREADED);
    _bstr_t bstrConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;"
    "Data Source=F:\\lylong\\db1.mdb;Persist Security Info=False";
    try{
    m_pConn.CreateInstance( __uuidof(Connection) );
    m_pRs.CreateInstance( __uuidof(Recordset) );
    m_pConn->Open( bstrConnStr, "", "", adConnectUnspecified );
    m_pRs->Open( "table1", 
    m_pConn.GetInterfacePtr(), adOpenForwardOnly, adLockOptimistic, adCmdTable); long lColumn = m_pRs->Fields->Count;
    printf("%-12s%-10s%-10s\n", "字段名", "长度", "类型");
    for( long i=0; i<lColumn; i++ )
    {
    printf("%-12s%-10d%-10d\n", (char*)m_pRs->Fields->Item[i]->Name, 
    m_pRs->Fields->Item[i]->DefinedSize,
    m_pRs->Fields->Item[i]->Type);
    }

    m_pRs->Close();
    m_pConn->Close();
    }catch( _com_error e )
    {
    printf( "\n%s Error: %ld\r\n"
    "%s\r\n"
    "%s\r\n",
    (char*)e.Source(),
    e.Error(),
    (char*)e.Description(),
    (char*)e.ErrorMessage() );
    m_pRs->Close();
    m_pConn->Close();
    }
    CoUninitialize();
    PAUSE;
    return 0;
    }
    --------------------------------
    _RecordsetPtr m_pRs;
    _variant_t vFieldName;
    for(int I=0; I<m_pRecordset->Fields->Count; I++)
    {
      vFieldName=m_pRecordset->Fields->GetItem((long)intI)->Name;
      CString str=vFieldName.bstrVal;
    }
    -------------------------------------
    int iCols=m_pRecordset->Fields->GetCount();
    _variant_t vardata;
    vardata.vt=VT_I4;
    vardata.iVal=iCols;
    for(vardata.iVal=0;vardata.iVal<iCols;vardata.iVal++)
    {
    _bstr_t bstrCols=m_pRecordset->Fields->GetItem(vardata.iVal)->GetName();
    MessageBox(bstrCols);
    }
    -------------------------
    _bstr_t   mStrSQL;
    CString   strColName;
    BSTR      bstrColName;
    long      ColCount,i; 
    Field *   field = NULL;
    HRESULT   hr;
    Fields *  fields = NULL;
    LPCTSTR   nameField;

    //打开记录集,得到字段名,并将字段名信息添加到ListBox中mStrSQL = "SELECT * FROM Images";m_pRecordset->Open(mStrSQL,               
    m_pConnection.GetInterfacePtr(),  
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);

    hr = m_pRecordset->get_Fields (&fields); //得到记录集的字段集和
     
    if(SUCCEEDED(hr)) 
        fields->get_Count(&ColCount); //得到记录集的字段集合中的字段的总个数 for(i=0;i<ColCount;i++)
    {
    fields->Item[i]->get_Name(&bstrColName); //得到记录集//中的字段名
    strColName=bstrColName;
    nameField = strColName;
    m_FieldsList.AddString(nameField);
    } if(SUCCEEDED(hr))
    fields->Release();//释放指针
      

  2.   

    先: FieldsPtr FP = piRecordset->GetFields();
    int nCount = FP->GetCount(); 
    看看能否得到字段数量。
      

  3.   

    FieldsPtr FP = piRecordset->GetFields();
    FieldPtr FP1 = FP->GetItem(0);
    FP1->Name就是字段名了。
      

  4.   

    执行完SQL后用下面语句:int no=m_pRecordset->GetRecordCount();