用errormessage.Format(e.Description()) 显示错误:row handle referred to a deleted row marked for deletion.
代码如下:
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
CString cs_sql,cs_subject,cs_body;
cs_sql.Format(_T("select convert(char(19),testtime,120) testtime,jobno,deviceid ,station,description,inputqty,outputqty,yield*100 yield,yieldredline*100 yieldredline,sendto from MSGJobStationAlarm(nolock)"));
//AfxMessageBox(cs_sql);
m_pRecordset->Open(_bstr_t(cs_sql.AllocSysString()),_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
while(!(m_pRecordset->adoEOF))
{
vTesttime = m_pRecordset->GetCollect("testtime");
。。。
m_pRecordset->MoveNext();
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format(e.Description());
AfxMessageBox(errormessage);///显示错误信息
}
}
如果我的sql 使用的是 select count(*) from ..... 能得到正确的结果,这是为什么啊? 望高手解惑,万分感谢
24 个解决方案
#1
m_pRecordset->Open(_bstr_t(cs_sql.AllocSysString()),_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
if (!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox(_T("查询到的数据为空"));
return;
}
while(!(m_pRecordset->adoEOF))
if (!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox(_T("查询到的数据为空"));
return;
}
while(!(m_pRecordset->adoEOF))
#2
fandh : 你说的啥? 我不明白啊? 好像和我的问题无关吧,我的是根本就查询不到数据集,但换个SQL 就能得到数据,而且我的这个sql 在数据库中是能查询出数据的
#3
if(!(m_pRecordset->adoEOF) && !(m_pRecordset->BOF)) // 结果集非空
{
m_pRecordset->MoveFirst(); // 移动到第一条记录处
while(!(m_pRecordset->adoEOF))
{
vTesttime = m_pRecordset->GetCollect("testtime");
//。。。
m_pRecordset->MoveNext();
}
#4
那说明你的SQL出错了!检查你的SQL语句,不行的话,打印出来,然后直接到数据库中执行,看看是否有结果
看样子不是我理解问题,是你没有说清楚,你看楼上的,与我开始理解的一样!
看样子不是我理解问题,是你没有说清楚,你看楼上的,与我开始理解的一样!
#5
lfchen 谢谢
不过问题依旧
不过问题依旧
#6
fandh 谢谢
sql 语句检查过了,在SQL SERVER 里能得到结果集的
sql 语句检查过了,在SQL SERVER 里能得到结果集的
#7
这个好像不是SQL 语句的问题, 这个语句我在sql server 中运行能得到数据集,且是不为空的,但如果我用另外的sql : 查询这个表的总的数据记录条数能得到17 这个正确的结果
#8
呀,那你在while 循环内设置断点,可以跟踪到么?
#9
MoveFirst();还是要的!
#10
// 是catch到错误了吗?catch到的错误信息是什么?
#11
// 挂个断点,看看具体是哪一句出错的。
#12
根本就没有结果集,直接就CATCH 错误了啊,错误: row handle referred to a deleted row or a row marked for deletion
#13
m_pRecordset->MoveFirst(); 加上了?
#14
加上了
#15
我还是怀疑cs_sql里面的不对!
你确定在数据库里面执行的,就是这里面的值?你要不直接用字符串试试?
你确定在数据库里面执行的,就是这里面的值?你要不直接用字符串试试?
#16
直接从代码里拷贝的字符串到SQL SERVER 中执行的,没有问题
#17
会不会是因为在定时器里,ADO 会有什么问题吗? 我是用再定时器里的
#18
你多长时间执行一次?
#19
10秒
#20
数据多么?要不,时间再长一点,10秒应该挺长的了!
#21
打开记录集的CursorTypeEnum的adOpenStatic换成adOpenDynamic。
#22
zyq5945 谢谢
问题解决,但为什么静态就不行啊? 难道是因为我查询的是数据视图的原因?
问题解决,但为什么静态就不行啊? 难道是因为我查询的是数据视图的原因?
#23
不知道啊,反正我记得有次我也是修改ACCESS的记录,换了游标才可以。
估计是ADO的bug吧。
估计是ADO的bug吧。
#24
恩,谢谢大家,结帖
#1
m_pRecordset->Open(_bstr_t(cs_sql.AllocSysString()),_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
if (!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox(_T("查询到的数据为空"));
return;
}
while(!(m_pRecordset->adoEOF))
if (!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox(_T("查询到的数据为空"));
return;
}
while(!(m_pRecordset->adoEOF))
#2
fandh : 你说的啥? 我不明白啊? 好像和我的问题无关吧,我的是根本就查询不到数据集,但换个SQL 就能得到数据,而且我的这个sql 在数据库中是能查询出数据的
#3
if(!(m_pRecordset->adoEOF) && !(m_pRecordset->BOF)) // 结果集非空
{
m_pRecordset->MoveFirst(); // 移动到第一条记录处
while(!(m_pRecordset->adoEOF))
{
vTesttime = m_pRecordset->GetCollect("testtime");
//。。。
m_pRecordset->MoveNext();
}
#4
那说明你的SQL出错了!检查你的SQL语句,不行的话,打印出来,然后直接到数据库中执行,看看是否有结果
看样子不是我理解问题,是你没有说清楚,你看楼上的,与我开始理解的一样!
看样子不是我理解问题,是你没有说清楚,你看楼上的,与我开始理解的一样!
#5
lfchen 谢谢
不过问题依旧
不过问题依旧
#6
fandh 谢谢
sql 语句检查过了,在SQL SERVER 里能得到结果集的
sql 语句检查过了,在SQL SERVER 里能得到结果集的
#7
这个好像不是SQL 语句的问题, 这个语句我在sql server 中运行能得到数据集,且是不为空的,但如果我用另外的sql : 查询这个表的总的数据记录条数能得到17 这个正确的结果
#8
呀,那你在while 循环内设置断点,可以跟踪到么?
#9
MoveFirst();还是要的!
#10
// 是catch到错误了吗?catch到的错误信息是什么?
#11
// 挂个断点,看看具体是哪一句出错的。
#12
根本就没有结果集,直接就CATCH 错误了啊,错误: row handle referred to a deleted row or a row marked for deletion
#13
m_pRecordset->MoveFirst(); 加上了?
#14
加上了
#15
我还是怀疑cs_sql里面的不对!
你确定在数据库里面执行的,就是这里面的值?你要不直接用字符串试试?
你确定在数据库里面执行的,就是这里面的值?你要不直接用字符串试试?
#16
直接从代码里拷贝的字符串到SQL SERVER 中执行的,没有问题
#17
会不会是因为在定时器里,ADO 会有什么问题吗? 我是用再定时器里的
#18
你多长时间执行一次?
#19
10秒
#20
数据多么?要不,时间再长一点,10秒应该挺长的了!
#21
打开记录集的CursorTypeEnum的adOpenStatic换成adOpenDynamic。
#22
zyq5945 谢谢
问题解决,但为什么静态就不行啊? 难道是因为我查询的是数据视图的原因?
问题解决,但为什么静态就不行啊? 难道是因为我查询的是数据视图的原因?
#23
不知道啊,反正我记得有次我也是修改ACCESS的记录,换了游标才可以。
估计是ADO的bug吧。
估计是ADO的bug吧。
#24
恩,谢谢大家,结帖