首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请问: vc 子窗口怎么使用父窗口打开的数据库

2012-01-16 
请教: vc 子窗口如何使用父窗口打开的数据库本人以前没玩过数据库,目前做 一个项目,在主窗口中使用ADO方式

请教: vc 子窗口如何使用父窗口打开的数据库

  本人以前没玩过数据库,目前做 一个项目,在主窗口中使用ADO方式打开老数据库,并操作老数据库。

  现在需要在子窗口中往数据库中写数据,在子窗口中已经获取老父窗口的句柄,但是不能获取到定义操作数据库的指针。

  我的数据库连接指针是在父窗口中的InitInstance函数中定义的,因为在打开父窗口之前有一个登陆过程,使用到数据库。

  
CPerCardSystemApp theApp;

CString strUser;
_ConnectionPtrm_pConnection; //数据库指针
_RecordsetPtrm_pRecordset;

/////////////////////////////////////////////////////////////////////////////
// CPerCardSystemApp initialization

BOOL CPerCardSystemApp::InitInstance()
{
// 初始化COM,创建ADO连接等操作
AfxOleInit();

AfxEnableControlContainer();

m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));

m_pConnection->CommandTimeout = 5;

  CString strConnect = "Provider=SQLOLEDB;Data Source=DEREK\\SQLEXPRESS;Initial Catalog=;Persist Security Info=True;User ID=;Password=;";
m_pConnection->Open((_bstr_t)strConnect,"","",adConnectUnspecified);

}


//登陆框
CDialogLogon dlglogon;
int isLogon = FALSE;
//m_pMainWnd = &dlg;
int Response = dlglogon.DoModal();
if (!isLogon)
{
if (Response == IDOK)
{
strUser = dlglogon.m_user;
isLogon = TRUE;
}
else if (Response == IDCANCEL)
{
isLogon = FALSE;

return FALSE;
}

}
//显示主窗口
if (isLogon)
{
CPerCardSystemDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{

}
else if (nResponse == IDCANCEL)
{

}
}

return FALSE;
}


子窗口获取父窗口的句柄

 CSystemDlg *pNew = (CSystemDlg*)AfxGetApp()->GetMainWnd();

 





[解决办法]
CDialogLogon构造函数加一个参数,把m_pConnection传进去
[解决办法]
看看这里的例子适不适合你
http://blog.csdn.net/xianglitian/archive/2010/05/22/5617173.aspx
[解决办法]
还有一个简单的办法是申明_ConnectionPtr m_pConnection; //数据库指针
成全局变量CPerCardSystemApp.cpp中,InitInstance函数定义:m_pConnection.CreateInstance(__uuidof(Connection));,在要使用的.cpp文件中
extern _ConnectionPtr m_pConnection; // Connection对象

[解决办法]
建立的是个全局变量,打开一次就可以了,不用重新打开,最后退出就m_pConnection->Close();
[解决办法]
自己写个ADO类,使用非常方便,网上也有

热点排行