VC6.0+ADO操作数据库的问题!!! 如何遍历一个表获得所有字段的名称及其数据类型??(ACCESS数据库) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 知道表名: #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();//释放指针 关于自己研发软件的流程 求助:CPropertysheet调用Dll里的资源Dialog的替换方案 如何在EDIT框中获取一个int变量? 关于位图与对话框 有关数据库的问题 请问在CFileDlg类中如何使文件“查找范围”在“网络邻居”上? 关于WebBrowser的疑问 请问怎么才能得到一个控件在对话框上的位置呢?谢谢 如何识别中文,输入中文 VFP菜鸟级问题:用.mpr还要用.mnt? vc.net工程打不开 msdn为什么总是运行不了???
#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();//释放指针