Before I wrote a "Perfect ODBC database program", we may have seen, there are encouragement, there are criticisms, but all of this only one purpose is to learn VC. I have been learning VC has nearly a year of time, level rookie level, and the VC knowledge Base for everyone to provide a place to communicate, we learn from each other and improve together. Thanks VC Knowledge Base each edition moderator!!!
In "A Perfect ODBC database program" I mentioned many aspects of perfecting it, making a small software. I follow this way of thinking, to achieve a number of basic functions. The Program adopts dialog box, the interface is divided into two parts by the way of property page: "Class Grade" and "Grade Score".
The program interface is shown below:
Let's first describe its use:
1. Select "Class Results", first select the class, here I have only achieved two class management. Press the Start button and the three list boxes show three recordsets for the selected class. The Start button is disabled, and the rest of the button on the recordset operation is allowed. To achieve the addition of records, delete records, modify records, search records, record sorting function. Better than before the place is mainly in the search records, record sorting. The lookup can be in multiple cases, and the sort is implemented by clicking the list header, in ascending and descending order, each column can be sorted. Because of the use of multiple recordsets, so in the implementation of the function of a lot of trouble, we can see the source program. After you've seen it, you may feel that the list of classes and teacher lists is easier to implement with files or arrays because they have a limited number of records and are fixed. I use the database, is to learn ODBC, master multiple recordset programming. Add records, delete records, change the record with the same idea, just because of the changes in student performance list caused by changes in the subject, everyone in the source program to see the process. Here is a look at Search records and record sorting.
Search Records
void CBaDialog::OnFind()
{
// TODO: Add your control notification handler code here
CFinDialog dlg;
if( dlg.DoModal()==IDOK)
{
this->Select();
m_bSet.Close();
if(dlg.m_Getstring2==">=")
m_Set.m_strFilter.Format("[%s]>=%.2f",dlg.m_Getstring1,dlg.m_find);
if(dlg.m_Getstring2=="=")
m_Set.m_strFilter.Format("[%s]=%.2f",dlg.m_Getstring1,dlg.m_find);
if(dlg.m_Getstring2=="<=")
m_Set.m_strFilter.Format("[%s]<=%.2f",dlg.m_Getstring1,dlg.m_find);
m_ListCtrlx.DeleteAllItems();
m_Set.Requery();
if(m_Set.IsEOF())
{
AfxMessageBox("没有符合条件的记录");
m_Set.Close();
return ;
}
else
this->Show();
}
}
Record sorting
void CBaDialog::OnColumnclickList3(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(FALSE== m_bS)
{
int k= pNMListView->iSubItem;
Sort(!m_bIsAsc,k);
m_ListCtrlx.DeleteAllItems();
this->Show();
}
*pResult = 0;
}
void CBaDialog::Sort(BOOL isAsc,int secol)
{
if(m_Set.IsOpen())
m_Set.Close();
this->Select();
m_bSet.Close();
CODBCFieldInfo fieldInfo;
m_Set.GetODBCFieldInfo(secol,fieldInfo);
if(isAsc)
{
m_Set.m_strSort=fieldInfo.m_strName+" ASC";
m_bIsAsc=TRUE;
}
else
{
m_Set.m_strSort=fieldInfo.m_strName+" DESC";
m_bIsAsc=FALSE;
}
m_Set.Requery();
}