最近一个程序需要记录一些操作记录到access数据库中,并且数据库表中的记录总数保持为100条。这就要求在保存操作记录时坚持表中的记录数,如果超过100条就将最前面的删除。
使用循环,逐条删除表中的记录,删除一条后使用MoveNext移动到下一条:
theApp.m_pRecordset->Delete(adAffectCurrent);//删除当前记录
要注意的是在打开数据库是加入这句话:
m_pConnection->CursorLocation=adUseClient;
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CS.mdb","","",adModeUnknown);
开始的时候我在数据库中手工加入了一些记录,发现可以正确删除,以为万事大吉了。可是运行了一段时间后,发现在删除一些记录时总是出错,不能正确删除当前记录。觉得代码应该没有错,于是检查了数据库,发现表中有些相邻的记录是完全一样的,就是说每个字段的值都是相同的,原因就在这边了。于是在表中新加了一个字段,类型为“自动编号”,这样可以保证每条记录都是不同的了。然后再运行,果然没问题了。
(后来想,有的人在加入多条新记录时也会经常出问题,也许原因是一样的,即加入了完全一样的记录。仅仅是猜测,没有试验过)

, , ,

本文内容参考了资料1和三变公子的博客资料2.
本文使用的方法在VC++.net 2003上调试通过。
今天下午要做个东西,在对话框上显示一个滚动视图,并在视图中绘制一些图像。
查了一些资料后觉得下述方法是可行的。
第一步,使用MFC向导建立了一个单文档的工程。新建一个对话框CMydlg,在头文件中定义CFrameWnd * m_pFrame。新建一个滚动视图CMyview,这时视图类的virtual void  OnInitialUpdate()函数是protected的,将其改为public,因为我们要在对话框中调用该函数。
第二步,在CMydlg::OnInitDialog()中加入下面的代码。
CCreateContext pContext;
CRect rectWndClient;
//得到对话框客户区大小
GetClientRect(&rectWndClient);
//下面是为了使视图框架比对话框小一些
rectWndClient.right-=45;
rectWndClient.top+=20;
rectWndClient.left+=45;
rectWndClient.bottom-=20;
m_pFrame= new CFrameWnd();
m_pFrame->Create(NULL,NULL,WS_VISIBLE|WS_CHILD,rectWndClient,this);
pContext.m_pCurrentDoc =NULL;//我们没有建立文档
pContext.m_pNewViewClass = RUNTIME_CLASS(CMyview);
CMyview *pView =(CMyview *) ((CFrameWnd*)m_pFrame)->CreateView&pContext);
ASSERT(pView);
pView->ShowWindow(SW_NORMAL);
//视图从框架左上角到右下角
rectWndClient.left-=45;//使得rectWndClient.left等于0
rectWndClient.top-=20;//使得rectWndClient.top等于0
rectWndClient.right-=45;
rectWndClient.bottom-=20;
pView->MoveWindow(rectWndClient);
pView->OnInitialUpdate();//不加这一句在鼠标点击视图时会报错的,原因请看资料2
好了,到这里就可以在对话框上看到你的视图了,你可以像平常一样在OnDraw里画图看看效果。

, ,