在头文件类中先定义这些变量,方便在操作数据库的成员函数中使用。
_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,见如下连接