除了你上面的办法,数据库一般经过了排序,序号怕乱了,可考虑用Execute "SQL语句"删除你要的记录。 1.利用Connection对象的Execute方法执行SQL命令 m_pConnection->Execute "SELECT * FROM xxx WHERE ...特征(比如你listconcrol上选定看到的他某项)..." 或者 2.利用Command对象来执行SQL命令m_pCommand->Execute "SELECT * FROM xxx WHERE ...特征..." ... 不早了,回家过年了...
记得给分啊
awperpvip
等 级:
发表于:2008-01-18 16:07:412楼 得分:0
m_listcontrol.DeleteItem(m_listcontrol.GetNextItem(-1,LVNI_SELECTED));
记得给分啊
//你这个只能删除ListControl中记录,那数据库里的数据怎么删除呢
m_pRecordset->Requery(adOptionUnspecified);
m_listcontrol->DeleteAllItems();
重新添加记录的代码
CListCtrl *ctl;
ctl=&GetListCtrl();
//寻找当前选中的记录的位置
POSITION pos=ctl->GetFirstSelectedItemPosition();
if (pos==NULL)
{
//如果没有选择记录,则提示并退出
AfxMessageBox("请先选中一条记录!");
return;
}
//获取当前记录的位置游标
int m_CurUser=ctl->GetNextSelectedItem(pos);
//
//创建一个CUserDlg的实例
CUserDlg m_UserDlg;
//创建一个临时字符串来保存当前用户信息
char chrTemp[21] = {'\0'};
//取得用户ID
ctl->GetItemText(m_CurUser,0,chrTemp,sizeof(char[20]));
//将用户ID转换为整数保存,后面的数据库操作将以此为匹配条件
int m_CurUserID = atoi(chrTemp); //创建CUserRecordSet的实例
CUserRecordSet m_UserRecordSet; try
{
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
//输入匹配条件UserID = m_CuruserID
m_UserRecordSet.m_strFilter.Format(" UserID = %d order by UserID",m_CurUserID);
m_UserRecordSet.Open(CRecordset::snapshot,NULL,CRecordset::none);
//如果用户记录存在,则进行修改操作
if(m_UserRecordSet.IsOpen() && !m_UserRecordSet.IsEOF())
{
//设置编辑当前记录
m_UserRecordSet.Delete();
//更新完毕,关闭数据库
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
//提示用户,修改成功
AfxMessageBox("删除成功!");
}
else //考虑特例,如果操作中用户信息不存在了
{
//关闭数据库
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
//提示用户
AfxMessageBox("该记录不存在,无法删除!");
return;
}
}
catch(CDBException*e)
{
e->ReportError ();
//e->Delete ();
return;
} //在ListCtrl中删除当前用户信息
ctl->DeleteItem(m_CurUser);这里是一个非ado连接的例子,我想参考下,但是我的listcontrol在对话框里,而例子的基类baseclass:ClistView,提示:GetListCtrl()这些函数等都不能用
分开来,数据库和list分别删除
不然如果数据量大,加载一次得花不少时间呢
ps:如何解决加载慢的问题??
为什么可以绑定的控件加载都很快
m_pRecordset-> Requery(adOptionUnspecified);
m_listcontrol-> DeleteAllItems();
重新添加记录的代码//红色部分不行吧,一般是先选中记录,括号里不是删除当前记录的参数adAffectCurrent,现在问题是删除时候提示错误,是不是记录和数据库还要什么地方协调下,新手晕了~
m_pRecordset->Delete(adAffectCurrent);
m_pRecordset->Requery(adOptionUnspecified);
m_listcontrol->DeleteAllItems();
... 重新添加记录到ListCtrl
1.利用Connection对象的Execute方法执行SQL命令
m_pConnection->Execute "SELECT * FROM xxx WHERE ...特征(比如你listconcrol上选定看到的他某项)..."
或者
2.利用Command对象来执行SQL命令m_pCommand->Execute "SELECT * FROM xxx WHERE ...特征..."
...
不早了,回家过年了...
{
m_pRecordset->MoveFirst();
m_pRecordset-> Move(m_ListCtrl.GetNextItem(-1,LVNI_SELECTED));
m_pRecordset->Delete(adAffectCurrent);
// 参数adAffectCurrent为删除当前记录
m_pRecordset->Update();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
//竟然这样就可以了,各位帮着看看,还有什么什么鲁棒性的问题-_-#
//以前就是因为没有加这句,但是不是很明白,为什么加了它就可以了呢,明天希望大哥们给解释下,呵呵,脖子疼了,先吃饭了,呵呵
int a = m_ListCtrl.GetNextItem(-1,LVNI_SELECTED);
if( a != 未查到数据的返回值)
{
m_pRecordset->MoveFirst();
m_pRecordset->Move(a);
m_pRecordset->Delete(adAffectCurrent);
// 参数adAffectCurrent为删除当前记录
m_pRecordset->Update();
}
{
int a=m_ListCtrl.GetNextItem(-1,LVNI_SELECTED);
if(a!=-1)
{
m_pRecordset->MoveFirst();
m_pRecordset-> Move(a);
m_pRecordset->Delete(adAffectCurrent);
// 参数adAffectCurrent为删除当前记录
m_pRecordset->Update();
}
else AfxMessageBox("请选择要删除的记录");
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
按照上边加了判断就可以了,非常感谢:tabby -_-b .. 内存泄漏和 shakaqrj,再有不会的还问你们-_-#