全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:975
推到 Plurk!
推到 Facebook!

用query時,為何我的要重開才會正確執行?

答題得分者是:Brian77
bcshahuo
一般會員


發表:28
回覆:28
積分:11
註冊:2005-01-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-03 09:30:43 IP:61.219.xxx.xxx 未訂閱
請問一下,一開始我是主程式和資料庫放在一起,執行時都好好的。 後來我把他們放在不同的資料夾。 table 後來多加了databasename的設定(用程式設定,放在form active裡) 後來我的query就沒正常過了。 //取目前最大題號 query1.Close; query1.SQL.Clear; query1.SQL.Add('select max(題號) as 題號 from test2'); query1.Open; table1.FieldByName('題號').AsInteger := query1.FieldByName('題號').AsInteger 1; 這是我要在query先判斷最大,然後加1,一開始主程式和dbf沒分開都是正常的 一分開後就不再正常,不知道為什麼? 現在是1,再來也是1111,query像是讀不到似的。 但我關掉,再開,他第一次讀都是正確的。只有第一次
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-03 09:46:32 IP:202.62.xxx.xxx 未訂閱
您好﹗    SQL的查詢并沒有問題﹐只是對Table1元件中的賦值有些問題﹐從程式碼部分來看﹐當Query1進行SQL查詢之后﹐Table1元件仍處于dsBrowse瀏覽狀態﹐因為并沒有任何的程式碼控制其進入其它的State屬性狀態﹐在Table1為dsBrowse的狀態時就直接指定Table1中題號的值是錯誤的﹒ query1.Close; query1.SQL.Clear; query1.SQL.Add('select max(題號) as 題號 from test2'); query1.Open; table1.Insert; //新增一筆記錄 table1.Edit; //修改當前記錄 table1.FieldByName('題號').AsInteger := query1.FieldByName('題號').AsInteger + 1; ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
bcshahuo
一般會員


發表:28
回覆:28
積分:11
註冊:2005-01-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-03 09:55:16 IP:61.219.xxx.xxx 未訂閱
板主大大,不好意思,我加上了,可是像無窮回圈一樣,一直閃個不停。 我剛有開grid來看,query的資料沒有讀進去,只有第一次有而已,而來 都停在同一個地方,所以新增是都同個數字,不知道是什麼原因?    不好意思,剛不小心多開了兩個,麻煩板主大大幫我刪一下,謝謝^^    
引言: 您好﹗ SQL的查詢并沒有問題﹐只是對Table1元件中的賦值有些問題﹐從程式碼部分來看﹐當Query1進行SQL查詢之后﹐Table1元件仍處于dsBrowse瀏覽狀態﹐因為并沒有任何的程式碼控制其進入其它的State屬性狀態﹐在Table1為dsBrowse的狀態時就直接指定Table1中題號的值是錯誤的﹒ query1.Close; query1.SQL.Clear; query1.SQL.Add('select max(題號) as 題號 from test2'); query1.Open; table1.Insert; //新增一筆記錄 table1.Edit; //修改當前記錄 table1.FieldByName('題號').AsInteger := query1.FieldByName('題號').AsInteger + 1; ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
bcshahuo
一般會員


發表:28
回覆:28
積分:11
註冊:2005-01-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-03 09:59:52 IP:61.219.xxx.xxx 未訂閱
忘了講,我剛那些是放在NewRecord裡,所以才會重覆回圈吧@@,歹勢    
引言: 您好﹗ SQL的查詢并沒有問題﹐只是對Table1元件中的賦值有些問題﹐從程式碼部分來看﹐當Query1進行SQL查詢之后﹐Table1元件仍處于dsBrowse瀏覽狀態﹐因為并沒有任何的程式碼控制其進入其它的State屬性狀態﹐在Table1為dsBrowse的狀態時就直接指定Table1中題號的值是錯誤的﹒ query1.Close; query1.SQL.Clear; query1.SQL.Add('select max(題號) as 題號 from test2'); query1.Open; table1.Insert; //新增一筆記錄 table1.Edit; //修改當前記錄 table1.FieldByName('題號').AsInteger := query1.FieldByName('題號').AsInteger + 1; ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-03 10:07:26 IP:202.62.xxx.xxx 未訂閱
您好﹗    照您的要求來看﹐應是單單新增﹐所以就使用Insert﹐如下﹕ query1.Close; query1.SQL.Clear; query1.SQL.Add('select max(題號) as 題號 from test2'); query1.Open; table1.Insert; //新增一筆記錄 table1.FieldByName('題號').AsInteger := query1.FieldByName('題號').AsInteger + 1; 是否可貼出完成程式碼部分﹐比較容易判斷﹒ P.S 是在Table1的OnNewRecord事件中嗎﹖若是的話﹐以上方法就不能使用﹒ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/03/03 10:13:41
------
忻晟
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-03 12:52:50 IP:61.61.xxx.xxx 未訂閱
會不會是... 依你說的嘛, 原來 dbf 和 ap 放在一起, 那時沒事, 後來分開才有事 So.. 會不會你現在有兩個 dbf, 一個是在新位置上, 另一個仍和 ap 在一起(或者又另一位置) 而 Table1 和 Query1 分別參考到兩個不同的 dbf 以至於 Table1 在新增後, Query1 再次 SELECT 時, 其 MAX 值不變
bcshahuo
一般會員


發表:28
回覆:28
積分:11
註冊:2005-01-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-03 12:57:41 IP:61.219.xxx.xxx 未訂閱
是的大大,就是在OnNewRecord裡。    這段就是我放在OnNewRecord裡所有的程式碼嗎? 請問大大還需要哪個部份的,還請指點一下。    
引言: 您好﹗ 照您的要求來看﹐應是單單新增﹐所以就使用Insert﹐如下﹕ query1.Close; query1.SQL.Clear; query1.SQL.Add('select max(題號) as 題號 from test2'); query1.Open; table1.Insert; //新增一筆記錄 table1.FieldByName('題號').AsInteger := query1.FieldByName('題號').AsInteger + 1; 是否可貼出完成程式碼部分﹐比較容易判斷﹒ P.S 是在Table1的OnNewRecord事件中嗎﹖若是的話﹐以上方法就不能使用﹒ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/03/03 10:13:41
bcshahuo
一般會員


發表:28
回覆:28
積分:11
註冊:2005-01-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-03-03 13:03:35 IP:61.219.xxx.xxx 未訂閱
謝謝這位大大。應該不會耶。因為我關掉執行檔,再開,第一次總是成功 。但就只有第一次,我貼全部出來好了,麻煩再幫我看一下,謝謝。    Procedure TadministerF.Table1NewRecord(DataSet: TDataSet); Begin       //取目前最大題號    query1.Close;    query1.SQL.Clear;    query1.SQL.Add('select max(題號) as 題號 from test2');    query1.Open;    table1.FieldByName('題號').AsInteger := query1.FieldByName('題號').AsInteger + 1;    End;        Procedure TadministerF.FormActivate(Sender: TObject); Var    path: String;    i: integer; Begin    //設定主程式和資料庫的相對路徑    path := extractFilepath(application.exename); //取目前程式的程式路徑    path := reversestring(path); //倒轉字串    i := length(path);    path := midstr(path, 2, i);    path := midstr(path, pos('\', path), i);    path := reversestring(path); //倒轉字串    path := path + 'database';       query1.DatabaseName := path; End;    其實也還有這兩個主要的。和我用的物件只有一個table和一個query,就這樣 而已,但還是一樣"分開前是好的,分開後,一切變了樣@@"        
引言: 會不會是... 依你說的嘛, 原來 dbf 和 ap 放在一起, 那時沒事, 後來分開才有事 So.. 會不會你現在有兩個 dbf, 一個是在新位置上, 另一個仍和 ap 在一起(或者又另一位置) 而 Table1 和 Query1 分別參考到兩個不同的 dbf 以至於 Table1 在新增後, Query1 再次 SELECT 時, 其 MAX 值不變
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-03-03 13:47:57 IP:61.61.xxx.xxx 未訂閱
Table1.CachedUpdates 為 True 或 False ? 另外, 資料路徑是執行檔路徑上一層的 database 內? mPath:=ExtractFilePath(Application.ExeName); mPath:=ExtractFilePath(Copy(mPath,1,Length(mPath)-1)) 'database';
bcshahuo
一般會員


發表:28
回覆:28
積分:11
註冊:2005-01-25

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-03-03 14:04:54 IP:61.219.xxx.xxx 未訂閱
Table1.CachedUpdates 為false. 共兩個資料夾,執行檔在administer資料夾裡,dbf在database資料夾裡。    我是為了永遠可以變成相對路徑而這麼設的。 @@我不知道可以用copy~~    如果照我這情形,用大大的方法和用我的方法應該一樣。 不過我是脫褲子放屁就是了~~~@@    
引言: Table1.CachedUpdates 為 True 或 False ? 另外, 資料路徑是執行檔路徑上一層的 database 內? mPath:=ExtractFilePath(Application.ExeName); mPath:=ExtractFilePath(Copy(mPath,1,Length(mPath)-1)) 'database';
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-03-03 16:43:40 IP:61.61.xxx.xxx 未訂閱
我怎麼測都不會錯誤... @@ 兩個方向: 先另建一支專案來測試, 僅設定 Table1 Query1 的 database 屬性, 和撰寫 Table1 的 onNewRecord 另外拉 TDataSource 和 TDBNavigator TDBGrid 用來顯示及編輯 就這樣測試看看, 應該是沒問題才是. 然後再比對它們和原專案中的 Table1, Query1 有什麼屬性設定不同的地方 另外, 為什麼不使用 TDatabase 元件? Database1.DatabaseName := '取個名字'; // Table1,Query1 的 DatabaseName 也設成這名字 Database1.DriverName := STANDARD; Database1.Params 裡設定三筆 PATH=C:DEFAULT DRIVER=DBASE ENABLE BCD=FALSE 再用程式指定 Database1.Params.Values['PATH']:=mPath;
bcshahuo
一般會員


發表:28
回覆:28
積分:11
註冊:2005-01-25

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-03-03 17:11:49 IP:61.219.xxx.xxx 未訂閱
大大好厲害,真的行了耶@@ 我也不知道原來的為什麼不行,結果我想不通之下,我就 把主程式和dbf又放在一起,結果又行了~~~    不過經大大指點後,我決定重新換過再試試~~    為什麼不用TDatabase 元件啊!! 因為我不大會用,我也是剛剛才知道有這個東西@@ 歹勢,小弟還很淺!! 不知道哪還有更詳細的TDatabase 元件介紹呢? 謝謝大大~~~    
引言: 我怎麼測都不會錯誤... @@ 兩個方向: 先另建一支專案來測試, 僅設定 Table1 Query1 的 database 屬性, 和撰寫 Table1 的 onNewRecord 另外拉 TDataSource 和 TDBNavigator TDBGrid 用來顯示及編輯 就這樣測試看看, 應該是沒問題才是. 然後再比對它們和原專案中的 Table1, Query1 有什麼屬性設定不同的地方 另外, 為什麼不使用 TDatabase 元件? Database1.DatabaseName := '取個名字'; // Table1,Query1 的 DatabaseName 也設成這名字 Database1.DriverName := STANDARD; Database1.Params 裡設定三筆 PATH=C:DEFAULT DRIVER=DBASE ENABLE BCD=FALSE 再用程式指定 Database1.Params.Values['PATH']:=mPath;
系統時間:2024-05-20 2:32:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!