aExchange()(对话框数据交换函数)。 在DoDataExchange()函数 “//}}AFX_DATA_MAP” 后面加入有关内容。见下面程序的黑体部分。如果黑体部分语句加在“//}}AFX_DATA_MAP”的前面,那么,要再次修改IDD_ZF0001_FORM表单时,就无法使用ClassWizard.
void CZf0001View::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CZf0001View)
DDX_Control(pDX, IDC_COMBO1, m_comb);
DDX_Control(pDX, IDC_EDIT4, m_SS);
DDX_FieldText(pDX, IDC_EDIT2, m_pSet->m_bl1, m_pSet);
DDX_FieldText(pDX, IDC_EDIT3, m_pSet->m_dgdl1, m_pSet);
DDX_FieldCBString(pDX, IDC_COMBO1, m_pSet->m_bzm, m_pSet);
DDX_FieldText(pDX, IDC_EDIT5, m_pSet->m_dgqd1, m_pSet);
//}}AFX_DATA_MAP
DDX_FieldText(pDX, IDC_EDIT1, m_pSet2->m_bl, m_pSet2);
DDX_FieldText(pDX, IDC_EDIT6, m_pSet2->m_hh, m_pSet2);
DDX_FieldText(pDX, IDC_EDIT7, m_pSet2->m_zzcm, m_pSet2);
}
3.3.3 在对话框中加入一个按钮
为演示二个表关联的效果,在对话框中加入一个“关联”按钮和一个输入参数用的"定位"编辑框。并给此按钮增加单击事件代码如下:
void CZf0001View::OnButton1()
{
// TODO: Add your control notification handler code here
char ll;
int nn=0;
m_SS.GetLine(0,ll); //读“定位”编辑框中的内容
nn=m_SS.LineLength(0); //读“定位”编辑框中的字符内容的长度
if(nn) //“定位”编辑框中有输入内容,则按内容检索形成新的记录集
{ m_pSet->mbzm=(CString)ll;
m_pSet->mbzm=m_pSet->mbzm.Left(nn)+"%"; //“%”由SQL语法规定代表任意长度(长度可以为0)的字符串
m_pSet->Requery(); //在表FSB中重新检索
if(m_pSet->IsEOF())
{ MessageBox("检索结果为空!");
UpdateData(FALSE);
m_pSet->mbzm="%";
m_pSet->Requery();
}
m_pSet2->Requery(); //以表1当前记录BZM值,在表2:DBK1中检索
UpdateData(FALSE); //刷新表单内容
m_SS.SetSel(0,-1);
m_SS.ReplaceSel(""); //清除“定位”编辑框中的内容,使下一次单击“关联”按钮时,不会重复检索(即使nn=0)
}
else //“定位”编辑框为空,则按表1现有的结果集与表2:DBK1关联
{
m_pSet2->mhh=m_pSet->m_bzm; //将表1当前记录BZM值,作为表DBK1的查找参数
m_pSet2->Requery();
UpdateData(FALSE);
m_pSet->MoveNext();
}
}
4. 小结
通过本例可知,虽然VC++提供了Appwizard和Classwizard, 为编程者节省了大量的工作,但是想编出优秀的VC++应用程序,仅凭这些是远远不够的;必须熟悉MFC类库、ActiveX控件等知识。本文作为一个例子介绍了二个表的联接方法。在实际的应用中,读者可以举一翻三,编制更加完善的数据库应用程序。
参考文献
1. 康博创作室等编著. Visual C++6.0 高级开发教程. 人民邮电出版社
2. 齐舒创作室 编著. Visual C++6.0编程技巧与实例分析. 中国水利水 电出版社
3. 官章全 刘加明编著. Visual C++6.0 类库大全. 电子工业出版社
摘自《软件世界》