用ADOQuery带参数查询时,遇到奇怪的问题,请教大家

cnphw 2003-10-20 10:29:58
怪了,用ADOQuery带参数查询,因为总要用ADOQuery1->SQL->Add来更新句子
再上带参数,有时只能按第一种写法才会通过,有时又只能按第二种写法才会通过,
是怎么回事帮我看看。
我用bcb5。ado没有升级过

第一种写法
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
String sql_text=
"select guest_name from shipment_main where order_id1 =:out_id";
ADOQuery1->SQL->Add(sql_text);
ADOQuery1->Parameters->ParamByName("out_id")->Value=out_id;
ADOQuery1->Open();

第二种写法
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->Parameters->Clear();
String sql_text=
"select guest_name from shipment_main where order_id1 =:out_id1 and order_id2=:out_id2 ";
ADOQuery1->SQL->Add(sql_text);
ADOQuery1->Parameters->CreateParameter("out_id1",ftInteger,pdInput,1,NULL);
ADOQuery1->Parameters->CreateParameter("out_id2",ftInteger,pdInput,1,NULL);
ADOQuery1->Parameters->ParamValues["out_id1"]=out_id1;
ADOQuery1->Parameters->ParamValues["out_id2"]=out_id2;
ADOQuery1->Open();
...全文
65 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcq8303 2003-11-02
  • 打赏
  • 举报
回复
第一种方法和第二种方法的区别在于:
第一种方法修改SQL后,ADOQUERY1的参数列表属性并没有改变,需要重新刷新一下
而第二种方法,ADOQuery1->Parameters->CreateParameter方法改变了ADOQUERY的参数列数
ljb198102 2003-11-01
  • 打赏
  • 举报
回复
ADOQuery 带参数查询是很不明智的做法!!!
最好的办法是自动生成 SQL语句将参数值直接嵌入到语句中
例子:
TADOQuery ADOQuery1;

............
AnsiString SQL;
AnsiString varField
AnsiString varTable,varFilter1;


//生成查询语句
SQL = " SELECT field1,field2,field3... "+varField....;
SQL+= " FROM table1,table2..."+varTable;
SQL+= " WHERE 条件1,条件2,条件3,条件4...."+varFilter1+...;
....
if (ADOQuery1->Active)
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(SQL);
ADOQuery1->Open()/Excute();
....

这样岂不是减少很多麻烦





fancy05 2003-11-01
  • 打赏
  • 举报
回复
关注,学习
87607047 2003-11-01
  • 打赏
  • 举报
回复
实际上用SQL语句多简单呀!

根本没有必要这用来!

像这一句
String sql_text=
"select guest_name from shipment_main where order_id1 =:out_id";
完全可以改为:(假设out_id为整型)
String sql_text=
"select guest_name from shipment_main where order_id1 ="+IntToStr(out_id);

如果out_id为字符串的话,则可以这样写:

String sql_text=
"select guest_name from shipment_main where order_id1 ='"+out_id+"'";

下面再add,open就好了!
多简单!




chifengwatch 2003-11-01
  • 打赏
  • 举报
回复
gz
freshman2003 2003-11-01
  • 打赏
  • 举报
回复
"bcb5。ado没有升级过",出错错得你挠破头皮。赶快升级吧。
cnphw 2003-11-01
  • 打赏
  • 举报
回复
自己Up是不是C5的原因

13,825

社区成员

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

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