求教MFC用ADO连接Access实现MFC列表和数据库的同步删除某一行信息

bulestone123 2017-05-23 10:37:05
正在学习MFC,做了一个简易的库存信息系统,用ADO连接Access后,其中的增加和修改功能都实现了列表和数据库的同步更新的功能。但是实现删除的时候试了好几种方法都不行。我的界面有一个“保存”按钮,希望点击保存按钮时,把列表控件中的增删改操作实时更新到数据库中。求当删除列表某一行然后再同时更新到数据库中的方法(在list列表中删除某行的操作我会),希望各位高手们指点一二。代码如下
void CUserInfoDlg::OnBnClickedSave()
{
int nCount = m_list.GetItemCount();
CString sNumb,sName,sSex,sAge,sDept,sLevel,sPhone,sEmail,sFlag, sID;
CString sSql;
for(int i=0; i<nCount; i++ )
{
sNumb = m_list.GetItemText(i,0);
sName = m_list.GetItemText(i,1);
sSex = m_list.GetItemText(i,2);
sAge = m_list.GetItemText(i,3);
sDept = m_list.GetItemText(i,4);
sLevel = m_list.GetItemText(i,5);
sPhone = m_list.GetItemText(i,6);
sEmail = m_list.GetItemText(i,7);
sFlag = m_list.GetItemText(i,8);
sID = m_list.GetItemText(i,9);


if( sFlag == "N" ) //new user
{
sSql.Format("Insert into UserInfo (Code, UserName, \
Sex, Age, Branch, RightLevel, Phone, EMail)\
values ('%s', '%s', '%s', %d, '%s', %d, '%s', '%s')",
sNumb,sName,sSex,atoi(sAge),sDept,atoi(sLevel),sPhone,sEmail);
AfxMessageBox(sSql);
try
{
theApp.m_pConn->Execute(_bstr_t(sSql),NULL,adCmdText);
}
catch (_com_error& e)
{
AfxMessageBox(e.Description());
}
}
else if( sFlag == "M" ) //Modify user
{
AfxMessageBox(sID);

sSql.Format("Update UserInfo Set Code = '%s', UserName = '%s',\
Sex = '%s', Age = %d, Branch = '%s', RightLevel = %d,\
Phone = '%s', EMail = '%s' where id = %d",\
sNumb,sName,sSex,atoi(sAge),sDept,atoi(sLevel),sPhone,sEmail,atoi(sID));
AfxMessageBox(sSql);
try
{
theApp.m_pConn->Execute(_bstr_t(sSql),NULL,adCmdText);
}
catch (_com_error& e)
{
AfxMessageBox(e.Description());
}
}
}
}
...全文
1216 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bulestone123 2017-05-23
  • 打赏
  • 举报
回复
引用 2 楼 swwllx 的回复:
用个sql语句去删除数据库里对应的那条么,出错了就看看你的sql语句是否正确
是的。我1楼贴出来的那个方法我试了下编译运行没问题,但是没有删除作用。m_pConnection->Execute((_bstr_t)str, &RecordsAffected, adCmdText); 请问这句里面的 &RecordsAffected这个参数在我的程序里应该改成什么?
三岁、就很帅 2017-05-23
  • 打赏
  • 举报
回复
用个sql语句去删除数据库里对应的那条么,出错了就看看你的sql语句是否正确
bulestone123 2017-05-23
  • 打赏
  • 举报
回复
我在网上找的方法,不行啊,如下 else if(sFlag == "D") { try { sSql.Format(_T("DELETE from UserInfo where id=%d")); _variant_t RecordsAffected; theApp.m_pConn->Execute(_bstr_t(sSql), &RecordsAffected, adCmdText); AfxMessageBox(_T("删除成功!")); } catch (_com_error*e) { AfxMessageBox(e->ErrorMessage()); } &RecordsAffected这个参数应该是代表要删除的行数吧,不是太理解这个参数哦
三岁、就很帅 2017-05-23
  • 打赏
  • 举报
回复
sSql.Format(_T("DELETE * from UserInfo where id=%d"), 你的id啊);
三岁、就很帅 2017-05-23
  • 打赏
  • 举报
回复
sSql.Format(_T("DELETE from UserInfo where id = %d"), 你的id啊);
三岁、就很帅 2017-05-23
  • 打赏
  • 举报
回复
sSql.Format(_T("DELETE * from UserInfo where id=%d"));

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧