例如:
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等。
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等。
#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();//释放指针
int nCount = FP->GetCount();
看看能否得到字段数量。
FieldPtr FP1 = FP->GetItem(0);
FP1->Name就是字段名了。