我在List Control中显示数据 编写了一个查找并修改的BUTTON
每次修改完 List里面就只有我修改的数据了,
我用重新打开数据库能解决 但重新打开后 List里面以前排序的操作都没了
代码如下
Seek Search;//一个查询的窗口
if(Search.DoModal()==IDOK)
{
try
{
m_pRecordset->Filter =_bstr_t("no = '"+Search.m_Seek2+"'");//查找记录
m_pRecordset->MoveFirst();
}
catch(_com_error e)
{
MessageBox("没找到!");
return ;


AddDlg dlg; //记录显示窗口
_variant_t var;
CString s1,s2,s3,s4;

var=m_pRecordset->GetCollect("no");
if(var.vt != VT_NULL)
s1 = (LPCSTR)_bstr_t(var);
dlg.m_no=s1; var=m_pRecordset->GetCollect("class");
if(var.vt != VT_NULL)
s2 = (LPCSTR)_bstr_t(var);
dlg.m_class=s2; var=m_pRecordset->GetCollect("name");
if(var.vt != VT_NULL)
s3 = (LPCSTR)_bstr_t(var);
dlg.m_name=s3; var=m_pRecordset->GetCollect("sex");
if(var.vt != VT_NULL)
s4 = (LPCSTR)_bstr_t(var);
dlg.m_sex=s4;

if(dlg.DoModal()==IDOK) 
{
if(dlg.m_no==_T(""))
{
MessageBox("学号不能为空");
return;
}
else
{
//把对话框中的记录传递到记录集中
m_pRecordset->PutCollect("no",_variant_t(dlg.m_no));
m_pRecordset->PutCollect("class",_variant_t(dlg.m_class));
m_pRecordset->PutCollect("name",_variant_t(dlg.m_name));
m_pRecordset->PutCollect("sex",_variant_t(dlg.m_sex));

m_pRecordset->Update();//把新的记录存在数据源里
m_pRecordset->MoveLast(); //指定当前记录为最后一条记录    
}
} }
//下面是重新打开数据库了
  
m_pRecordset->Close();
m_pConnection->Close();
m_pConnection.CreateInstance(__uuidof(Connection));
try                 
{
// 打开本地Access库Demo.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=student.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
MessageBox("数据库连接失败,确认数据库student.mdb是否在当前路径下!");
return ;

m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->CursorLocation = adUseClient;//为了排序必须要加上的
try
{
m_pRecordset->Open("SELECT * FROM std",// 查询std表中所有字段
m_pConnection.GetInterfacePtr(),  // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
} catch(_com_error e)
{
MessageBox("失败");
return ;
}
   this->OnRef();//刷新函数

解决方案 »

  1.   

    你试试在update之前,
    设置成AdFilterNone 
    AdFilterNone 删除当前筛选条件并恢复查看的所有记录。 m_pRecordset->Filter = (long) adFilterNone;http://support.microsoft.com/kb/231351/zh-cn里面有段代码和你的有些类似
    另外
    我用重新打开数据库能解决 但重新打开后 List里面以前排序的操作都没了
    m_pRecordset->CursorLocation = adUseClient;//为了排序必须要加上的
    try
    {
    m_pRecordset->Open("SELECT * FROM std",// 查询std表中所有字段
    m_pConnection.GetInterfacePtr(),  // 获取库接库的IDispatch指针
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);
    }
    你这里本来就没有做排序阿你的记录集都关了重开了,以前的sort当然没有了
      

  2.   

    谢谢handsomerun(毛毛) 问题解决~~

    m_pRecordset->Filter = (long) adFilterNone;
    就可以了~~