線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:919
推到 Plurk!
推到 Facebook!

不知这样写对不对?

尚未結案
xxxxzxx
一般會員


發表:21
回覆:49
積分:24
註冊:2004-11-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-12 22:11:33 IP:220.163.xxx.xxx 未訂閱
procedure xx; var s1,s2:string; begin adoquery1.close; adoquery1.sql.Clear; adoquery1.SQL.Add(mysql_01); adoquery1.ExecSQL; ////adoquery1执行完了吗?怎么判断? adoquery2.close; adoquery2.sql.Clear; adoquery2.SQL.Add(mysql_02); adoquery2.open; adoquery2.First; s1:=ADOQuery2.fields.Fields[2].AsDateTime; s2:=ADOQuery2.fields.Fields[3].AsDateTime; ////adoquery2执行完了吗?怎么判断?adoquery2.open&adoquery2.First后不需要关闭吗? adoquery3.close; adoquery3.sql.Clear; adoquery3.SQL.Add(mysql_03); adoquery3.ExecSQL; end; ____________________________________________________________ 小弟的问题是,在一个过程里写多个query怎么知道上一个执行完了?还是不能这样写? 我想做到让adoquery1执行完了才让adoquery2执行adoquery2完了又才让adoquery3执行.
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-12 22:21:38 IP:203.204.xxx.xxx 未訂閱
執行完了就執行完了,不知道您要判斷什麼呢? adoquery1.ExecSQL; 把SQL送至Server去處理. adoquery2.open; 這樣執行會傳回資料集DataSet First后不需要关闭吗? 看你還用不用的到那各資料集,如果用不到就Close掉他 我想做到让adoquery1执行完了才让adoquery2执行adoquery2完了又才让adoquery3执行. 一個一個程序下來,當然是adoquery1執行完會執行adoquery2...etc 發表人 - supman 於 2005/04/12 22:28:03
xxxxzxx
一般會員


發表:21
回覆:49
積分:24
註冊:2004-11-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-12 23:29:24 IP:220.165.xxx.xxx 未訂閱
supman您的说法没错. 可是adoquery1&adoquery2&adoquery3对同一张数据表的同一条记录进行操作,那是不是需要判断一下是不是adoquery1执行完了,才能让adoquery2执行然后是adoquery3... 小弟先谢过.
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-12 23:45:12 IP:203.204.xxx.xxx 未訂閱
還是不需要判斷阿,你一個Query動作完程式才會繼續往下面的程序跑,不然他會停在那裡的,你可以去Select一個1萬筆的資料,然後用F8單步追蹤去看,你就會知道了. 除非您是在不同程序中才需要做這樣的控制,如Button1按下去做編輯,Button2按下去也是做編輯這樣需要去控管.
xxxxzxx
一般會員


發表:21
回覆:49
積分:24
註冊:2004-11-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-12 23:52:27 IP:220.165.xxx.xxx 未訂閱
引言: 除非您是在不同程序中才需要做這樣的控制,如Button1按下去做編輯,Button2按下去也是做編輯這樣需要去控管.
小弟有点明白了按您所讲我想改成这样行吗?还想知道如何控管?谢谢 procedure xx; var s1,s2:string; begin adoquery1.close; adoquery1.sql.Clear; adoquery1.SQL.Add(mysql_01); adoquery1.ExecSQL; adoquery1.close; adoquery1.sql.Clear; adoquery1.SQL.Add(mysql_02); adoquery1.open; adoquery1.First; s1:=ADOQuery1.fields.Fields[2].AsDateTime; s2:=ADOQuery1.fields.Fields[3].AsDateTime; adoquery1.close; adoquery1.sql.Clear; adoquery1.SQL.Add(mysql_03); adoquery1.ExecSQL; end;
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-13 00:26:50 IP:203.204.xxx.xxx 未訂閱
procedure xx; var s1,s2:string; begin    adoquery1.close; adoquery1.sql.Clear; adoquery1.SQL.Add(mysql_01); adoquery1.ExecSQL;    adoquery1.close; adoquery1.sql.Clear; adoquery1.SQL.Add(mysql_02); adoquery1.open; adoquery1.First;//不需要這行,Query完,指標會在第一筆 AdoQuery.Edit; s1:=ADOQuery1.fields.Fields[2].AsDateTime; s2:=ADOQuery1.fields.Fields[3].AsDateTime; //建議寫成AdoQuery1.FieldByName(欄位名).AsDateTiem比較直覺 AdoQuery.Post; adoquery1.close; adoquery1.sql.Clear; adoquery1.SQL.Add(mysql_03); adoquery1.ExecSQL; end; //基本上這樣的程序都用同一各Query就可以了 控管就是說當您同時對同一筆資料進行修改時,如果兩各Query都已經把資料抓回來,而您Query1修改Post回去,這樣子Query2修改要儲存時會產生找不到更新的列的問題,因為原來的值已經被改掉了. 控管的方式就是當Query1或Query2修改時,就先去檢查是否正在編輯中. 如何判斷正在編輯中,就是當可以編輯時就將該筆資料的鍵值紀錄在一各資料表中,當您檢查到表中有這筆資料時,就表示這筆資料有人在使用,而不得編輯,並告知使用者.當然若編輯完畢,就必須將表中的值給刪除掉,以讓下一位使用繼續使用.
xxxxzxx
一般會員


發表:21
回覆:49
積分:24
註冊:2004-11-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-13 19:02:52 IP:218.63.xxx.xxx 未訂閱
supman谢谢您...
系統時間:2024-07-04 1:31:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!