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当然没有了