C++ Builder“ADOQuery:commandtext does not return a result set”的有关问题
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语句,以作分析。
各位高手,请问写入读取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语句,以作分析。