广西地震工程分析信息系统平台属性数据库的设(2)
ADO库包含3个智能指针:_ConnectionPtr、_CommandPtr和_RecordsetPtr。这3个智能指针功能强大,但分工不同,在连接数据时,主要用到的是_ConnectionPtr,其连接代码如下:
::CoInitialize(NULL);
try{
str_("Provider=%s;Server=%s;Initial Catalog=%s;uid=%s;pwd=%s;",m_,m_,m_,m_,m_);
m_("");
bstr_Connect=(_bstr_t)str_Connect;
m_pConnection->Open(bstr_Connect,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox(());
}
要显示数据库中的内容,可以用MFC提供的DataGrid控件。要将数据显示在DataGrid Control控件之中,就要用到_RecordsetPtr。它是一个专门用来记录记录集的指针,但由于其界面显示不太友好,可用一个专门用来显示属性数据的封装程序包,此封装程序包只需要行数和列数就能实现显示,故ADOConn类相对简单。主要实现的函数有GetRecordCount、GetFieldsCount、GetRecordSet,其中GetRecordCount是为了获得记录集的条数(即显示时行数),GetFieldsCount是为了获取字段数(即显示时列数),GetRecordSet是为了获取执行SQL语句之后返回的记录集。程序封装包仅仅是提供了一个能够初始化设备环境的接口,使显示界面更加友好,对程序封装包的调用以及用来实现属性数据的显示需要自己编写代码。
3 标签页对话框实现
3.1 标签页对话框初始化
对数据库中的各个表采用标签页对话框方式处理,即每个数据库表对应一个标签页对话框,在标签页上可对数据库表进行添加、修改、删除操作,如图2所示。
图2 标签页对话框Fig.2 Label page dialog box
各个标签页对话框由TabCtrl控件控制和切换。实现对话框的切换比较容易,初始化用一个Dialog类型的数组pDialog来存放各个需要切换的标签页对话框(即各个表)。在切换时,调用OnTcnSelchangeTabControl()函数,其实现代码如下:
pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
m_CurSelTab=m_();
pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
除了对TabCtrl控件实现初始化,便于在弹出主界面时,能在其上面加载一个对话框,还要在主界面的下部实现显示这个对话框对应的表所存储的内容。这时,就要用到前文提到的程序封装包,在OnInitialDialog()之中,添加 InitSQLForm(strTabName[m_CurSelTab],),InitRecordsetPtr()和InitGridCtrl()函数。这3个函数都需要调用封装程序包的一些初始化设备对话框的一些功能,由于各个函数的实现代码较长,这里仅对其中的关键性代码进行说明:
1)InitSQLForm(strTabName[m_CurSelTab],)主要是实现对设备的初始化。
2)InitRecordsetPtr()函数获得执行SQL语句的返回的_RecordsetPtr类型的指针。该指针在InitGridCtrl()中将会用到。
3)InitGridCtrl()是非常关键的一个函数,它真正实现了在对话框中显示表格内容。在这个函数中,将会调用SetGridCtr()和FillGridCtr(m_AllRecordsetPtr,m_strTabName)两个函数。其中,SetGridCtr()实现添加表格以及表格中的各个字段,主要用到列数(即字段);而FillGridCtr(m_AllRecordsetPtr,m_strTabName)实现向表格中填充数据,主要用到行数(即记录集的条数)。列数和行数的获得,都用到_RecordsetPtr类型的指针,这就是InitRecordsetPtr()函数功能的体现。SetGridCtr()和FillGridCtr()是非常关键的两个函数,因代码较长,这里不作介绍。
3.2 标签页对话框间切换
在加载TabCtrl控件后,对这个控件添加一个消息响应函数OnTcnSelchangeTabControl(NMHDR *pNMHDR,LRESULT *pResult),该函数会在切换对话框时调用,具体实现代码如下:
pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
m_CurSelTab=m_();
pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
UnInitSQLForm();
InitSQLForm(strTabName[m_CurSelTab],);
InitRecordsetPtr();
InitGridCtrl();
在初始化时用一个Dialog类型的数组来存储各个对话框类的对象,使得通过前3行代码就可实现标签页对话框间切换。第4行UnInitSQLForm()是为了将切换之前的那个表格清除(如果不加这行代码,这两个表将一同显示,当然有一些覆盖的地方),最后3行代码和初始化时的代码一样,用来实现对切换后的表加载显示。
3.3 标签页与主界面联系
文章来源:《世界地震工程》 网址: http://www.sjdzgczz.cn/qikandaodu/2021/0308/442.html
上一篇:高烈度区高层隔震结构研究新进展与应用
下一篇:大型地下洞室群地震动输入机制探讨