▲ADOQuery出现:Data type is not supported,请进!!!

牧牛人软件 2008-12-02 07:17:26

注:SQL TOOLS在我的程序。

请耐心读我的问题,谢谢!

void __fastcall TMainForm:: test(String Sql)
{
TADOQuery *ADOQuery=new TADOQuery(NULL);

ADOQuery->ConnectionString=MainForm->ADOConnectionStr;

ADOQuery->SQL->Clear();
ADOQuery->SQL->Add(Sql);

try{
ADOQuery->Open();

if(ADOQuery->Active){
ADOQuery->DisableControls();
while(!ADOQuery->Eof){
ShowMessage(MainForm->ADOQuery1->Fields->Fields[0]->AsString);
ADOQuery->Next();
}
ADOQuery->EnableControls();
}
}

catch(Exception &exception){
ShowMessage("error");
}
ADOQuery->Close();
delete ADOQuery;
}
//-----------------------------------------

void __fastcall TMainForm::Button1Click(TObject *Sender)
{
String Sql1="Select * from a@db1 where rownum<4";
//只用一个DBLINK @db1 以下查询正确
test(Sql1);
}

void __fastcall TMainForm::Button2Click(TObject *Sender)
{
String Sql2="Select a.*,b.* from a@db1, b@db2 where rownum<4";
//用两个DBLINK @db1、@db2 以下查询出错:Data type is not supported!
test(Sql2);
}

===================================================================================
如果test() 中ADOQuery不是动态申请,即将删除“TADOQuery *ADOQuery=new TADOQuery(NULL);”

ADOQuery控制在设计期在FORM上拖一个,那么test(Sql2)也能正确执行。
====================================================================================
我找不出原因,难道是ADOQuery的问题?

有人会说:那就在FORM上拖一个ADOQuery呗?
不行啊,我是多线程并发查询的,所以只能 new TADOQuery。
有什么办法解决?谢谢!!!!






...全文
1213 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
牧牛人软件 2008-12-04
  • 打赏
  • 举报
回复
new TADOQuery(this); new TADOQuery(Application); 都没用。

问题我解决了,但说不出原因。

---------------------------------------------------------
其实“拖入一个ADOQuery”是因为在查询Select a.*,b.* from a@db1, b@db2 where rownum <4之前已经做过别查询多次了,所以不过出现以上问题,原因我不明。
因为我对含有两个(及以上)不同的DBLINK的SQL在查询之前先做其他的查询,并且是两次。代码如下:

TADOQuery *ADOQuery=new TADOQuery(Application);

ADOQuery->Connection=MainForm->ADOConnection1;

if( 含有两个不同DBLINK() || SqlString.Pos("Group by ")>20 && SqlString.Pos("@")>10 ){
String Sql1="select table_name, count(*) from user_tables where rownum<2 group by table_name";
for(int i=0;i<2;i++) ReadData(ADOQuery, Sql1);
}

/*
为什么要加入ReadData();
可能ADOQuery的BUG,当SQL中有DBLINK(就是访问远程数据库)
且有分组函数的时,会出现ORA-00917错误。

含有两个不同DBLINK的SQL也要ReadData()两次,否则会报:Data Type is not Supproted

经过反复推敲和测试,费尽了半个月的宝贵时间,我终于杀出了
一条血路:用 “有分组函数,没有DBLINK的SQL”读2次!!!!
再去运行一切OK!
Borland公司的一个无意的失误,让我痛苦!!
*/

ADOQuery->SQL->Clear();
ADOQuery->SQL->Add(SqlString);
//----------------------------------------
void __fastcall TQueryThread::ReadData(TADOQuery *ADOQuery, String Sql)
{

if(dbExecuteSQL(ADOQuery,Sql, 1) > 0){
}

ADOQuery->Close();
}
Jim@luckeeinc.com 2008-12-03
  • 打赏
  • 举报
回复
Data type is not supported!
數據類型有問題?不過如果在Form上拖一個就可以那可以考慮用TADOQuery *query=new TADOQuery(Application);
yuanreid 2008-12-03
  • 打赏
  • 举报
回复
如果拖入一个ADOQuery可以,那试试改成这样呢:
TADOQuery *ADOQuery=new TADOQuery(this);
牧牛人软件 2008-12-02
  • 打赏
  • 举报
回复
oracle数据库
僵哥 2008-12-02
  • 打赏
  • 举报
回复
连的是什么数据库?

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧