龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++ Buidler 6中需要注意的几个问题

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
一、引言 C++ Buidler和Dephi同为RAD的典范,它使得快速、高效、方便地开发程序成为可能。但是在使用C++ Buidler的过程中发现,不是仅仅熟悉C++ Buidler的VCL组件就能顺利地完成程序的编写,

  一、引言

   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:;

精彩图集

赞助商链接