📄 subject_42906.htm
字号:
<p>
序号:42906 发表者:草叶 发表日期:2003-06-06 18:20:16
<br>主题:怎样传递定义好的数据源对象给记录集?
<br>内容:我在myapp中定义了一个数据源对象,用别的记录集打开。我试了试,在初始化记录集的文件中加上一句extern CMyApp theApp;然后用CmyaaSet myaaSet(&theApp.m_db);初始化成功,可是,我初始化后打开了记录集,并没有关闭,当在别的函数中(仍是这个类)使用时,编译通不过,非得再进行判断<BR>if (!myaaSet.IsOpen())<BR> myaaSet.Open();<BR>才行,并且又让输入密码(数据库有密码)。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:金枪鱼 回复日期:2003-06-06 18:39:12
<br>内容:1)你应该在CMyApp theAPP并列地位处,比如它前面定义全局数据库指针<BR>CDatabase *pDb=new CDatabase();<BR>ASSERT(pDb!=NULL);//确保内存分配成功<BR><BR>CMyApp theAPP;<BR>.......<BR>2)在整个程序退出前销毁数据库对象<BR>if(pDb->IsOpen()) pDb->Clsoe();<BR>delete pDb;<BR>pDb=NULL;<BR>//不这样做,对于new分配的对象,会导致内存泄漏。<BR><BR>3)在使用pDb对象的类的CPP文件前部(定义的那个类除外),引入全局变量<BR>extern CDatabase *pDb;<BR><BR>4)使用时打开数据库<BR> if(!pDb->IsOpen())<BR> pDb->OpenEx(_T("DSN=")+strDataSourceName+_T(";UID=")+strDbLogName+_T(";PWD=")+strDbPwd,CDatabase::noOdbcDialog);<BR> if(!pDb->IsOpen())<BR>{<BR> ....//确定记录集的打开情况<BR>}<BR>5)记录集的派生类生成:通过类向导派生一个新的记录集C**set,记录选择MFC 的CRecordset,确定后悔自动弹出对话框让你选择你建立好的数据源,然后选择标,最好选择全字段动态方式。<BR><BR>6)在使用记录集的类中包含记录集的支持文件<BR><BR>7)构造记录集并传入数据库对象指针<BR> C**set *pRs=new C**set(pDb);<BR> ASSERT(pRs!=NULL);<BR> //构造过滤条件<BR> pRs->m_strFilter=_T("".......);<BR> pRs->Open(CRecordset::dynaset,NULL,CRecorset::readOnly);<BR> if(!pRs->IsOpen())<BR> {<BR> ....//缺省记录集的打开情况<BR> }<BR> .......//进行记录集的其它操作<BR>8)记录集使用完毕同样要释放<BR> if(pRs->IsOpen()) pRs->Clsoe();<BR> delete pRs;<BR> pRs=NULL;<BR><BR>我在给你写教科书了。<BR>2003-6-6 18:41:58
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -