用query時,為何我的要重開才會正確執行? |
答題得分者是:Brian77
|
bcshahuo
一般會員 發表:28 回覆:28 積分:11 註冊:2005-01-25 發送簡訊給我 |
請問一下,一開始我是主程式和資料庫放在一起,執行時都好好的。
後來我把他們放在不同的資料夾。
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 發送簡訊給我 |
您好﹗ 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 發送簡訊給我 |
板主大大,不好意思,我加上了,可是像無窮回圈一樣,一直閃個不停。
我剛有開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 發送簡訊給我 |
忘了講,我剛那些是放在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 發送簡訊給我 |
您好﹗ 照您的要求來看﹐應是單單新增﹐所以就使用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 發送簡訊給我 |
|
bcshahuo
一般會員 發表:28 回覆:28 積分:11 註冊:2005-01-25 發送簡訊給我 |
是的大大,就是在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 發送簡訊給我 |
謝謝這位大大。應該不會耶。因為我關掉執行檔,再開,第一次總是成功
。但就只有第一次,我貼全部出來好了,麻煩再幫我看一下,謝謝。 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 發送簡訊給我 |
|
bcshahuo
一般會員 發表:28 回覆:28 積分:11 註冊:2005-01-25 發送簡訊給我 |
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 發送簡訊給我 |
我怎麼測都不會錯誤... @@
兩個方向:
先另建一支專案來測試, 僅設定 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 發送簡訊給我 |
大大好厲害,真的行了耶@@
我也不知道原來的為什麼不行,結果我想不通之下,我就
把主程式和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; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |