一、引言
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語句中對出現兩次的變量賦予相同的值,也要申請兩個變量,分別賦值。