QUERY中CLOSE和OPEN的用法 |
尚未結案
|
charse
一般會員 ![]() ![]() 發表:5 回覆:9 積分:7 註冊:2004-06-07 發送簡訊給我 |
對不起~小弟之前在
同一個帖子
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=51445
問了兩個問題
現在開一個新的問題帖 感謝stillalive:
ERRORMESSAGE終於改變了
==========出現找不到性別欄位的錯誤============= with Adoquery1 do
begin
SQL.Clear;
tmp1:=DBEdit1.Text;
tmp2:=DBEdit2.Text;
tmp3:=DBCombobox1.Text;
tmp4:=DBEdit3.Text;
tmp5:=DBEdit4.Text; sql.Text:= 'select max(客戶編號) as num_column from 客戶';
OPEN ;
num_column:= FieldbyName('num_column').AsInteger 1; SQL.Clear;
SQL.Add('Insert into 客戶(客戶編號,客戶名稱,聯絡人,性別,地址,電
話) Values(:客戶編號,:客戶名稱,:聯絡人,:性別,:地址,:電話) ');
parameters.ParamByName('客戶編號').value:=num_column;
parameters.ParamByName('客戶名稱').value:=tmp1;
parameters.ParamByName('聯絡人').value:=tmp2;
parameters.ParamByName('性別').value:=tmp3;
//我曾經把有關性別的欄位全拿掉但是竟出現一樣的錯誤
parameters.ParamByName('地址').value:=tmp4;
parameters.ParamByName('電話').value:=tmp5;
execSQL;
refresh_data;//自己寫的更新TABLE的方法
end;
=================================
可以順便請教一下
OPEN,CLOSE跟execSQL真正的功能嗎?
越搞越糊塗
感覺老天爺在懲罰我....
我做了什麼錯事嗎....要是寫出來明天就吃素....... 發表人 - charse 於 2004/06/09 00:05:09
|
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
bigdogchina
版主 ![]() ![]() ![]() ![]() ![]() 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
Hi,charse,您好!
我試著解釋一下您的第2個問題:
要在運行時執行查詢,可以使用Open或者ExecSQL方法:
----Open方法:執行返回結果集的查詢,如帶有Select語句
----ExecSQL方法:執行不需要返回結果集的查詢,如帶有Insert,Update或Delete語句 注意:如果在設計時不知道一個查詢是否在運行時要返回結果集,應該在try...catch程式塊中包含兩種查詢執行方式。 看看下面的code(這是C++代碼,和Delphi原理是相通的):
try { Query1->Open(); } catch(Exception &E) { if(!dynamic_casttry子句中調用Open方法,這就允許禁止錯誤消息的發生,因爲一個可用的方法沒有應用到合適的SQL語句上。檢查所産生異常的類型,如果不是ENoResult異常,那麽一定是其他原因引起的異常,必須進行處理。這就是因爲當查詢使用Open方法啟動時將要執行查詢,但除了那個之外會産生一個異常. 1 執行返回結果集的查詢 ①調用Close方法以確保查詢還沒有被打開。如果查詢已經打開,就不能在關閉它之前再次打開它。關閉查詢後並重新打開它,將從Server提取新的資料. ②調用Open方法進行查詢 例如: Query1->Close(); ..... Query1->Open(); //返回一個設置結果 如果需要瀏覽結果集的資訊,那沒就要考慮使用'關閉雙向cursors' 2 執行沒有結果集的查詢 要執行不返回結果集的查詢的SQL語句,調用ExecSQL進行查詢: Query1->ExecSQL(); hagar 版大,不好意思,我當時打開該帖時,沒有看見您的回帖,Sorry,不好意思,請原諒我的無知 =============== 人生在勤,不索何獲? ===============發表人 - bigdogchina 於 2004/06/09 09:47:45
------
人生在勤,不索何获? |
charse
一般會員 ![]() ![]() 發表:5 回覆:9 積分:7 註冊:2004-06-07 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 ![]() ![]() ![]() ![]() 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
引言: Hi,charse,您好! 我試著解釋一下您的第2個問題: 要在運行時執行查詢,可以使用Open或者ExecSQL方法: ----Open方法:執行返回結果集的查詢,如帶有Select語句 ----ExecSQL方法:執行不需要返回結果集的查詢,如帶有Insert,Update或Delete語句 注意:如果在設計時不知道一個查詢是否在運行時要返回結果集,應該在try...catch程式塊中包含兩種查詢執行方式。 看看下面的code(這是C 代碼,和Delphi原理是相通的):哇咧! 沒規定小弟回覆以後, 大家都不能再回了吧! 這裡可是沒有白色恐怖的哦!try { Query1->Open(); } catch(Exception &E) { if(!dynamic_casttry子句中調用Open方法,這就允許禁止錯誤消息的發生,因爲一個可用的方法沒有應用到合適的SQL語句上。檢查所産生異常的類型,如果不是ENoResult異常,那麽一定是其他原因引起的異常,必須進行處理。這就是因爲當查詢使用Open方法啟動時將要執行查詢,但除了那個之外會産生一個異常. 1 執行返回結果集的查詢 ①調用Close方法以確保查詢還沒有被打開。如果查詢已經打開,就不能在關閉它之前再次打開它。關閉查詢後並重新打開它,將從Server提取新的資料. ②調用Open方法進行查詢 例如: Query1->Close(); ..... Query1->Open(); //返回一個設置結果 如果需要瀏覽結果集的資訊,那沒就要考慮使用'關閉雙向cursors' 2 執行沒有結果集的查詢 要執行不返回結果集的查詢的SQL語句,調用ExecSQL進行查詢: Query1->ExecSQL(); hagar 版大,不好意思,我當時打開該帖時,沒有看見您的回帖,Sorry,不好意思,請原諒我的無知 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |