首页 / 软件开发 / C++ / C++ Buidler 6中需要注意的几个问题
C++ Buidler 6中需要注意的几个问题2011-04-06 comprg.com.cn 高智宇,李春一、引言C++ Buidler和Dephi同为RAD的典范,它使得快速、高效、方便地开 发程序成为可能。但是在使用C++ Buidler的过程中发现,不是仅仅熟悉C++ Buidler的 VCL组件就能顺利地完成程序的编写,还需要注意一些容易忽视的细节。本文列举了一些 遇到的问题,并提供解决办法,以供参考借鉴。二、具体问题及解决办法1.使用SQL语句操作数据库时,如果语句中出现了变量,同一变量不能进行重复使 用如:需访问数据表T1和T2中符合条件T1.T1_F1="01"及 T2.T2_F1="01"的纪录,按照常规思维,只需在SQL语句中设置一个变量p,分 别用来判断T1.T1_F1和T2.T2_F1的值是否为"01",BCB语句如下:if(ADOQuery1->Active)
{ ADOQuery1->Close();
ADOQuery1->SQL->Clear(); }
ADOQuery1->SQL- >Text="SELECT * FROM T1, T2 WHERE T1.T1_F1=:p AND T2.T2_F1=:p";
ADOQuery1->Parameters->ParamValues ["p"]="01";
ADOQuery1->Open();
但是在运行这段代码后,查询的结果为空。(在访问Access2003过程中得到证实)通过追 踪SQL语句中的变量p,发现第二次调用p时,BCB没有对p赋值,即p为NULL;所以得不到期 待的查询结果。正确的参数设置应该为:ADOQuery1->SQL- >Text="SELECT * FROM T1, T2 WHERE T1.T1_F1=:p1 AND T2.T2_F1=:p2";
ADOQuery1->Parameters->ParamValues ["p1"]="01";
ADOQuery1->Parameters- >ParamValues["p2"]="01";
从上面可以看出, BCB对SQL语句中出现的每个赋值变量只使用一次。即使需要在SQL语句中对出现两次的变 量赋予相同的值,也要申请两个变量,分别赋值。2. goto语句的使用在 C++ Builder的goto语句中,如果保留字goto与目标标识之间有本地变量的初始化语句:goto EndMark;// EndMark为目标标识
int a=1;
……
EndMark:;
则运行goto语句时会报错, 这给goto语句的使用带来不便,但如果在goto与目标标识之间加上一对花括弧,则可顺利 运行:goto EndMark;
{ int a=1;
…… }
EndMark:;
C++ Builder将 {……}内的变量初始化理解为局部变量的初始化,局部变量的初始化不会对 { }外面的语句有影响。所以适当地使用花括弧,就可以消除C++ Builder对goto语句使用 的限制。