1. 连接数据源,能够Edit,能够AddNew,但是不能Delete,为什么?
相关代码:
m_pset = new CExset(&m_dbVA);
m_dbVA.Open(NULL, FALSE ,FALSE ,_T("ODBC;DSN=Exll") ,TRUE);
CString strSQL = "select * from VR";
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); m_pset->Edit();
m_pset->m_Flag=FALSE; //此句正确执行
m_pset->AddNew(); //此句也正确执行
m_pset->Delete(); //此处出错!!对话框显示“更新或删除的企图失败了”
m_pset->Update();
m_pset->MoveNext();2. 查询数据库,如果查找到,再次调用数据库正确;如果没有找到,再次调用就出错
相关代码:
int CMyClass::Allot(CString sRequest)
{
if m_pset->IsOpen()) {
m_pset->Close();
}
m_pset->Open();
CRecordsetStatus rStatus;
m_pset->MoveFirst(); // 就是这儿
m_pset->m_strFilter.Format("[RequestID]='%s' \
AND [Flag]=FALSE ",sRequest);
if(!m_pset->Requery()){
m_pset->m_strFilter="";
m_pset->Requery();
} //判断是否存在纪录
m_pset->GetStatus(rStatus);
if(rStatus.m_lCurrentRecord<0){
AfxMessageBox("不存在!");
}
else{
m_pset->Edit();
m_pset->m_Flag=TRUE;
m_pset->Update();
} return 0;
} void CFirstClass::MyFunc()
{
CString strRRR1="abcd";
CString strRRR2="efgh";
m_pMyClass->Allot(strRRR1); //第一次查询
m_pMyClass->Allot(strRRR2); //第二次查询
}
如果第一次查询查找到,第二此查询正确执行;如果第一次没查到,第二此执行到m_pset->MoveFirst();处出错,对话框显示“试图越过数据的有效存贮区间”3. 定义的access数据库,有自动编号一项字段,假如写入10行记录,将此10行删除,再次写入时自动编号变成11。因为我一直在数据库中操作,现在已经到2000多了,怎么让它清零并每次从1开始?
相关代码:
m_pset = new CExset(&m_dbVA);
m_dbVA.Open(NULL, FALSE ,FALSE ,_T("ODBC;DSN=Exll") ,TRUE);
CString strSQL = "select * from VR";
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); m_pset->Edit();
m_pset->m_Flag=FALSE; //此句正确执行
m_pset->AddNew(); //此句也正确执行
m_pset->Delete(); //此处出错!!对话框显示“更新或删除的企图失败了”
m_pset->Update();
m_pset->MoveNext();2. 查询数据库,如果查找到,再次调用数据库正确;如果没有找到,再次调用就出错
相关代码:
int CMyClass::Allot(CString sRequest)
{
if m_pset->IsOpen()) {
m_pset->Close();
}
m_pset->Open();
CRecordsetStatus rStatus;
m_pset->MoveFirst(); // 就是这儿
m_pset->m_strFilter.Format("[RequestID]='%s' \
AND [Flag]=FALSE ",sRequest);
if(!m_pset->Requery()){
m_pset->m_strFilter="";
m_pset->Requery();
} //判断是否存在纪录
m_pset->GetStatus(rStatus);
if(rStatus.m_lCurrentRecord<0){
AfxMessageBox("不存在!");
}
else{
m_pset->Edit();
m_pset->m_Flag=TRUE;
m_pset->Update();
} return 0;
} void CFirstClass::MyFunc()
{
CString strRRR1="abcd";
CString strRRR2="efgh";
m_pMyClass->Allot(strRRR1); //第一次查询
m_pMyClass->Allot(strRRR2); //第二次查询
}
如果第一次查询查找到,第二此查询正确执行;如果第一次没查到,第二此执行到m_pset->MoveFirst();处出错,对话框显示“试图越过数据的有效存贮区间”3. 定义的access数据库,有自动编号一项字段,假如写入10行记录,将此10行删除,再次写入时自动编号变成11。因为我一直在数据库中操作,现在已经到2000多了,怎么让它清零并每次从1开始?
m_pset->Edit();
m_pset->m_Flag=FALSE;
m_pset->Update(); m_pset->AddNew();
m_pset->m_Flag=FALSE;
m_pset->Update(); m_pset->Delete();
2 m_pset->MoveFirst();之前现判断一下是否有记录。if (m_pset->GetRecordCount() > 0)3 好像不行。除非全部删除后,压缩数据库
2。没有记录的话,就不能MoveFirst了。应该先判断有没有记录。
3。没有办法。不知道在数据库中能否手工修改。
1. 改成 m_pset->Edit();
m_pset->Delete();
m_pset->Update(); 后也同样出错,但是把delete改成AddNew或m_pset->m_Flag=FALSE;就对
2. m_pset->GetRecordCount() 确实为0,好奇怪,数据库里明明有很多记录呀
3. 不行就算了。
if(rStatus.m_lCurrentRecord<0){
AfxMessageBox("不存在!");
}
m_pset->Delete();
m_pset->Update();
------------------------
不能这样用的,每当调用Edit的时候,必须用Update才能使Edit生效。AddNew也使这样。
你在中间插入个Delete是什么意思呢?
是添加一个空记录!
m_pset->Edit();
m_pset->Delete();
m_pset->Update(); 不行,把Edit一句去掉也不行!!
----------------------------
执行SQL语句CDatabase *pDatabase;
//打开数据库后执行
pDatabase->ExecuteSQL("delete from TableName");