首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

ADO查找并修改数据后为什么列表显示的只有当前一个记录?该如何处理

2014-07-02 
ADO查找并修改数据后为什么列表显示的只有当前一个记录?我在ListControl中显示数据编写了一个查找并修改的

ADO查找并修改数据后为什么列表显示的只有当前一个记录?
我在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();//刷新函数

[解决办法]
你试试在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当然没有了

热点排行