软件课程设计 中期报告
- 格式:doc
- 大小:83.50 KB
- 文档页数:20
SetItemState()
设置列表一行的状态(是否被选中)
InsertItem()
在列表中插入一行
由于在任务中使用的ADO访问数据库,所以具体的查询排序添加等等函数都不需要自己写,只需要直接调用系统的函数就可以了。主要的函数包括OnAddclass()(添加班级记录该函数还未实现),OnAddcourse()(添加课程),OnFindname()(按姓名查找),OnFindnumber()(按学号查找),OnAddstudent()(添加学生信息),OnAll()(显示全部记录),OnDelete()(删除一个记录),OnModify()(修改学生信息),OnSortage()(按年龄排序)。中间所有的操作均采用ADO提供的方法来实现。
strText.Format(_T("%s"), strName);
pListCtrl->SetItemText(n, 1, strText);//设置一行的第一个子项的值
n++;
m_pRecordset->MoveNext();
}
return TRUE;
对程序中可能出现的算法的介绍,以及算法的实现方法。注意格式,要活用格式刷。
return;
}
(5)执行SQL命令
m_pCommand->put_ActiveConnection(_variant_t((IDispatch*)m_pConnection));
m_pCommand->ActiveConnection=m_pConnection;
CString strCommand= L"CREATE TABLE Persons(Id_P int,LastName varchar(255), FirstNamevarchar(255),Address varchar(255),City varchar(255))";//使用sql命令创建新表
return FALSE;
}
/打开数据库
CString strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= MY.mdb");
if (!OpenDatabase(strConnect))
{
AfxMessageBox(_T("数据库打开失败。"));
return;
}
//打开记录集
CString strSource = _T("SELECT * FROM MyTable");
if (!OpenRecordset(strSource))
{
AfxMessageBox(_T("记录集打开失败。"));
if (pos == NULL)
{
return;
}
int nItem = pListCtrl->GetNextSelectedItem(pos);//获取当前选中的位置
CModifyDlg dlg; //实例化修改对话框的对象
dlg.m_Name = pListCtrl->GetItemText(nItem, 1); //获取修改前的内容
ASSERT(m_pRecordset != NULL);
ASSERT(lpszSource != NULL);
ASSERT(AfxIsValidString(lpszSource));
//打开记录集
try
{
return (SUCCEEDED(m_pRecordset->Open(_variant_t(lpszSource),
GetDlgItem()
得到一个指向控件的指针
GetFirstSelectedItemPosition()
列表视图控件中获取第一个选择项的位置
GetNextSelectedItem()
返回列表视图控件中被选择的下一项的索引值
DeleteAllItems()
删除控件内的所有内容
SetItemText()
由于之前我们对MFC也不太了解,所以花了一些时间学习了如何新建MFC工程,如何添加消息响应函数,如何添加对话框资源,如何添加事件处理函数,如何在控件里添加内容等等。其中最关键的是登录对话框的设计,使用ADO技术访问数据库。
3.
3.1
在对话框中主要采用了列表框控件其中主要用到的函数为GetDlgItem(),GetFirstSelectedItemPosition(),GetNextSelectedItem(),DeleteAllItems(),InsertItem(),SetItemText(),SetItemState(),具体作用见下表
{
strName = varValue.bstrVal;
}
else
{
strName = _T("");
}
//刷新ListCtrl
CString strText = _T("");
strText.Format(_T("%d"), n + 1);
pListCtrl->InsertItem(n, strText);//插入一行
函数名
作用
关键的ADO方法
OnAddstudent
添加学生信息
AddNew
OnModify
修改学生信息
PutCollect
OnFindName
按姓名查找
Find
OnFindNumber
按学号查找
Find
OnSortage
按年龄排序
Open
OnDelete
删除一个记录
Delete
OnAll
显示全部记录
if (dlg.DoModal() != IDOK)
{
return;
}
//在响应IDOK时候文本控件的值已经被更新
m_pRecordset->MoveFirst(); //移动到第一条记录
m_pRecordset->Move((long)nItem); //移动到选中记录的位置
m_pRecordset->PutCollect(_variant_t(_T("SNAME")), //修改记录的值
}
(4)打开记录集和数据库连接
为了方便打开数据库和记录集构造了两个函数
BOOL CMYDlg::OpenRecordset(LPCTSTR lpszSource,long nCursorType, long nLockType, long nOptions)
{
ASSERT(m_pConnection != NULL);
{
m_pConnection = NULL;
TRACE(_T("Database CreateInstance failed"));
}
if (!SUCCEEDED(m_pRecordset.CreateInstance(__uuidof(Recordset))))
{
m_pRecordset = NULL;
m_pConnection.GetInterfacePtr(),
(CursorTypeEnum)nCursorType,
(LockTypeEnum)nLockType,
nOptions)));
}
catch(_com_error e)
{
TRACE(_T("%s\n"), e.ErrorMessage());
使用AfxOleInit()来初始化COM库,通常在CWinApp::InitInstance()的重载函数中完成。在InitInstance()函数中添加
if(!AfxOleInit()) //这就是初始化COM库
{
AfxMessageBox(L"OLE初始化出错!");
return FALSE;
3.1.1
ADO简介
微软公司的ADO(ActiveX Data Objects)是一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。
使用ADO操作数据库的步骤:
(1)COM库的初始化
_variant_t(dlg.m_Name));
m_pRecordset->Update();//更新记录集中的内容
while (!m_pRecordset->adoEOF)
{
varValue = m_pRecordset->GetCollect(_variant_t(_T("SNAME")));
if (varValue.vt != VT_NULL)
{
AfxMessageBox((_T("记录集未打开。")));
return;
}
获取记录集的当前位置
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST);
POSITION pos = pListCtrl->GetFirstSelectedItemPosition();
//打开数据库连接
try
{
return SUCCEEDED(m_pConnection->Open(_bstr_t(lpszConnect),
_T(""), _T(""), nOptions));
}
catch (_com_error& e)