读书人

C++ Builder“ADOQuery:commandtext d

发布时间: 2012-02-06 15:52:45 作者: rapoo

C++ Builder“ADOQuery:commandtext does not return a result set”的问题
各位高手,请问写入读取ACCESS时,会弹出“ADOQuery1:commandtext does not return a result set”的问题;
目前,程序添加了一个线程用来采集和更新数据库,主界面会实时刷新查询数据库内容,线程和主界面分别用不同的ADOQuery连接同一张表,主界面显示数据库内容是用timer触发的,计时到时,会判断是否有记录更新,如有,则更新,但程序有时会弹出“ADOQuery1:commandtext does not return a result set”,有时不会,请问是否是因为同时读取同一个表冲突引起的,请问如何解决?请各位给个建议或思路,谢谢啦!

代码大致如下:
线程中:
void __fastcall TRecordThread::Execute()
{
cs->Acquire();

while(Terminated==false)
{
//采集数据
……
//更新数据库
this->Synchronize(Record);

if(finished)
break;

}//while(Terminated==false)

cs->Release();
}

void __fastcall TRecordThread::Record()
{
SQLlanguage="insert into RecordTable ……";

ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Add(SQLlanguage);
ADOQuery2->ExecSQL();
}

主界面:

void __fastcall TForm_Main::Show()
{

SQLlanguage="select count(*) as RecordCount from RecordTable where 条件";

ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(SQLlanguage);

ADOQuery1->ExecSQL();


ADOQuery1->Open();

RecordCount=ADOQuery1->FieldByName("RecordCount")->AsInteger;


if(RecordCount>BeforeCount)
{
SQLlanguage="select * from RecordTable where 条件";

ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(SQLlanguage);

ADOQuery1->ExecSQL();

ADOQuery1->Open();

ADOQuery1->Last();

}

}

弹出“ADOQuery1:commandtext does not return a result set”是在执行查询满足条件的记录总数时出现的,请问是什么问题?谢谢啦!

[解决办法]
出错的时候,看一下
ADOQuery1->SQL->Text的值是什么

这个错一般是执行ADOQuery->Open时报错,并且SQL是非select语句。
[解决办法]
另外,
ADOQuery1->ExecSQL();//用于执行非select语句
ADOQuery1->Open();//执行select 语句,查询结果集
不需要同时调用这2个函数
[解决办法]
如果需要返回数据集,就用Open方法,否则用ExecSQL方法。

至于"不正常地定义参数对象,提供了不一致或不完整的信息"的提示,你需要检查每一次构造的SQL语句。建议用OutputDebugString输出SQL语句,以作分析。

读书人网 >C++ Builder

热点推荐