vs2010MFCActiveX控件,连接ORACLE数据库,并显示表名,字段名,并把表格在DataGrid显示

来源:互联网 发布:马克斯cms怎么安装 编辑:程序博客网 时间:2024/05/16 12:17

在头文件类中先定义这些变量,方便在操作数据库的成员函数中使用。

_ConnectionPtr pConn;//连接指针_RecordsetPtr pRst;//记录集指针_CommandPtr pCmd;//_bstr_t mStrSQL;//查询语句_bstr_t mStrSQL1;//查询语句CString strColName;//字段名字HRESULT hr;//查询结果判断Fields* fields;//HRESULT hr1;Fields* fields1;CDataGrid m_dbGrid;//定义一个DataGrid对象long ColCount;//字段个数



连接数据库,pConn->ConnectionString的值可以用UDL文件测试连接下看能不能连上,然后用文本文件打开,把连接字符串粘上即可。

CoInitialize(NULL);//初始化COM运行环境pConn = NULL;pRst = NULL;pCmd = NULL;try{pConn.CreateInstance(__uuidof(Connection));pConn->ConnectionString ="Provider=OraOLEDB.Oracle.1;Password=photo;Persist Security Info=True;User ID=photo;Data Source=PHOTO";pConn->Open("","","",adConnectUnspecified);}catch(...){MessageBox(_T("连接数据库失败,请重连"),_T("警告"),0);}

显示表名在combo中,sql语句:SELECT TABLE_NAME FROM USER_ALL_TABLES;是查询所有用户表的,

SELECT TABLE_NAME FROM ALL_ALL_TABLES;是查询包括系统表在内的所有表

try{pRst1.CreateInstance("ADODB.Recordset");//创建pRst1对象pRst1->CursorLocation=adUseClient;mStrSQL1 = "SELECT TABLE_NAME FROM USER_ALL_TABLES";pRst1->Open(mStrSQL1,pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); while(!pRst1->rsEOF)//当记录集pRst1后面还有值{CString  str = pRst1->GetCollect("TABLE_NAME");//表名m_combo1.AddString(str);pRst1->MoveNext();}}catch(...){MessageBox(_T("显示表名失败"),_T("警告"),0);}

显示字段在combo中

try{pRst.CreateInstance(__uuidof(Recordset));pRst.CreateInstance("ADODB.Recordset");//创建pRst对象pRst->CursorLocation=adUseClient; //游标的位置出现.不加这句会出现The rowset is not bookmarkable运行错误mStrSQL = "select *from YW_RYXXB"; pRst->Open(mStrSQL,pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); hr = pRst->get_Fields (&fields); //得到记录集的字段集和 if(SUCCEEDED(hr)) { ColCount = pRst->Fields->Count;//得到的字段个数}for(j=0;j<ColCount;j++){CString strName=(char*)_bstr_t(pRst->Fields->Item[j]->Name);//字段名m_Combo7.AddString(strName);m_Combo8.AddString(strName);m_Combo9.AddString(strName);m_Combo10.AddString(strName);m_Combo11.AddString(strName);m_Combo12.AddString(strName);}if(SUCCEEDED(hr)){fields->Release();}}catch(...){MessageBox(_T("连接字段失败"),_T("警告"),0);}

把连接的表显示在DataGrid中

m_dbGrid1.SetRefDataSource(NULL); m_dbGrid1.SetRefDataSource((LPUNKNOWN)pRst);m_dbGrid1.Refresh();

在ActiveX中如何使用DataGrid,见如下连接

http://blog.csdn.net/u012702039/article/details/18661091

0 0