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

資料更新後不能馬上秀出來??

 
schow428
一般會員


發表:2
回覆:11
積分:2
註冊:2006-09-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-25 15:50:53 IP:211.21.xxx.xxx 訂閱
請教一個問題
當我使用Update來更新資料庫時, 資料庫是更新了, 但是秀出來的卻是舊的資料
要多執行幾次才會秀出正確的結果
請問要如何解決這個問題呢? 謝謝!!

//更新的程式
With ADOQuery2 Do Begin
//修改項目小計
SQL.Clear;
SQL.Add('Update 項目表 set ');
SQL.Add('項目小計 = 項目小計 ' Edit4.Text ' where 項目編號 = ''' LeftStr(ComboBox5.Text,4) ''';');
ExecSQL;

end;
blueK
初階會員


發表:19
回覆:62
積分:36
註冊:2004-05-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-25 18:28:43 IP:203.67.xxx.xxx 未訂閱
連結資料的那個元件,有沒有重新將後端資料再讀取到前端呢???
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-25 22:34:38 IP:61.64.xxx.xxx 訂閱
重新再執行一次用來取得呈現資料的那一段程式即可..
------
我也在努力學習中,若有錯謬請見諒。
schow428
一般會員


發表:2
回覆:11
積分:2
註冊:2006-09-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-26 10:22:24 IP:211.21.xxx.xxx 訂閱
不好意思~~ 我並不是很了解您的意思!! 謝謝
===================引 用 文 章===================
連結資料的那個元件,有沒有重新將後端資料再讀取到前端呢???
schow428
一般會員


發表:2
回覆:11
積分:2
註冊:2006-09-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-26 10:23:56 IP:211.21.xxx.xxx 訂閱
請問一下會不會是我更新的地方跟的地方是不同的form所導致的
因為我在同一個form中更新並不會有這個問題
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-01-26 18:35:25 IP:218.168.xxx.xxx 未訂閱
Update與ExecSQL只是將後端的資料庫的資料改了,並不會影響到已抓到前端且已顯出來的資料。你可試者以Delete-sql將現顯示的某筆資料殺掉就知道了。
你要下Query.close再下Query.open﹝SQL的Where迢件不要改﹞,而且要記得要下Locate回原先那筆記錄的命令,即可了。
------
Kevin
schow428
一般會員


發表:2
回覆:11
積分:2
註冊:2006-09-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-29 10:02:57 IP:211.21.xxx.xxx 訂閱
不好意思想請問一下Locate怎麼用??
我看到裡面的說明是要這麼用 Query.Locate(Keyfield) 但是Keyfield是什麼呢?? 謝謝!!

===================引 用 文 章===================
Update與ExecSQL只是將後端的資料庫的資料改了,並不會影響到已抓到前端且已顯出來的資料。你可試者以Delete-sql將現顯示的某筆資料殺掉就知道了。
你要下Query.close再下Query.open﹝SQL的Where迢件不要改﹞,而且要記得要下Locate回原先那筆記錄的命令,即可了。
frankswuyahoo
一般會員


發表:0
回覆:3
積分:0
註冊:2005-05-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-01-29 11:48:43 IP:61.218.xxx.xxx 未訂閱
Locate的用法如下
if Qry.Locate('keyfield',fieldvalue,[]) then ......
keyfield : 資料庫中的table 的 欄位名稱
fieldvalue : 就是你要找的那一個值
若有找到資料, 傳回True
schow428
一般會員


發表:2
回覆:11
積分:2
註冊:2006-09-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-01-29 13:00:41 IP:211.21.xxx.xxx 訂閱
謝謝這位大大的解說!!  非常清楚的說明了locate的用法!! 謝謝!!

===================引 用 文 章===================

Locate的用法如下
if Qry.Locate('keyfield',fieldvalue,[]) then ......
keyfield : 資料庫中的table 的 欄位名稱
fieldvalue : 就是你要找的那一個值
若有找到資料, 傳回True
schow428
一般會員


發表:2
回覆:11
積分:2
註冊:2006-09-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-01-29 13:20:27 IP:211.21.xxx.xxx 訂閱
首先!! 謝謝上面各位大大的詳細說明!!
讓新手小弟我又了解了不少
但是我還是無法更新出新的資料!!!
不知道有沒有其他方法可用呢?? 謝謝!!

我的顯示流程如下:
1. 程式剛開始會執行一個function, 以顯示資料庫的資料到TreeView中
2. 開啟另一個form,並執行 ExecSql 程式來跑我的update語法, 以更新資料庫資料
3. 重跑一次function,再次重秀我的TreeView
(此時TreeView並沒有秀出新的資料, 但資料庫內容已更新了!!)
我的function裡必跑的程式就是Query.close跟Query.open
但還是沒有效果!! 請各位大大再幫幫小弟吧!! 謝謝!!
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-01-29 13:42:48 IP:210.201.xxx.xxx 訂閱
程式上傳上來讓大家幫你看看吧 ~~~
------
我也在努力學習中,若有錯謬請見諒。
schow428
一般會員


發表:2
回覆:11
積分:2
註冊:2006-09-22

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-01-29 14:12:06 IP:211.21.xxx.xxx 訂閱
不好意思請問怎麼在文章中上傳檔呢?? 謝謝!!

===================引 用 文 章===================
程式上傳上來讓大家幫你看看吧 ~~~
schow428
一般會員


發表:2
回覆:11
積分:2
註冊:2006-09-22

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-01-29 14:22:12 IP:211.21.xxx.xxx 訂閱
我先上傳到BDG了!! 下載點如下
http://www.badongo.com/cn/file/2116095
程式已經刪到剩重點部份了,
程式中進入"現金收入" 這個form時會修改資料庫的收入項
跳回主畫面時TreeView卻都沒變,但資料庫已經變了
就請各位大大幫我看看!! 這是給我女朋友用的小程式!! 麻煩了!! ^_^

===================引 用 文 章===================
不好意思請問怎麼在文章中上傳檔呢?? 謝謝!!

===================引 用 文 章===================
程式上傳上來讓大家幫你看看吧 ~~~
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-01-30 17:32:31 IP:210.201.xxx.xxx 訂閱
Sorry, 我公司用的環境是 D5 所以只好直接看你的 Source... 再和您確認一下..
1. 程式剛開始會執行一個function, 以顯示資料庫的資料到TreeView中 ---> 是 "RefreshTree(); 吧"
3. 重跑一次function,再次重秀我的TreeView --->這裡的 function是....
--> 若沒錯.. 我想你那 TreeView 的主Form 一Create 時會去執行 RefreshTree (這是沒問題,沒錯吧,因為此時的對資料庫的連結也準備好了。)
--> 再來 點選 "現金收入" 時會開啟 "Form1" (這段對資料庫的操作,依你說都沒問題是吧)
--> 此時結束 Form1 再回來時,卻發現 Tree View 的 "樣子" 沒變
我想當然是不會改變。因為你的 Tree View 是由你自己長出來的,當 Main Form Create 時你有執行 RefreshTree 所以可以看得到下想看的樣子,但當執行 現金收入 功能回來後,並沒有再去對 Tree View 做任何的異動,你期待它會自動明白在這之前你對資料庫做了什麼操作嗎?當然不可能。
我想最簡單的作法在於執行 現金收入 功能回來後再執行一次 RefreshTree 來異動更新先前的狀態,應該可以解決你的問題才是。
試試吧,畢竟我沒有環境,僅從你的 Source 來看結果,或許有哪忽略了,請不要介意 ~~



===================引 用 文 章===================

我的顯示流程如下:
1. 程式剛開始會執行一個function, 以顯示資料庫的資料到TreeView中
2. 開啟另一個form,並執行 ExecSql 程式來跑我的update語法, 以更新資料庫資料
3. 重跑一次function,再次重秀我的TreeView
(此時TreeView並沒有秀出新的資料, 但資料庫內容已更新了!!)
我的function裡必跑的程式就是Query.close跟Query.open
但還是沒有效果!!? 請各位大大再幫幫小弟吧!! 謝謝!!
------
我也在努力學習中,若有錯謬請見諒。
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#15 引用回覆 回覆 發表時間:2007-01-30 18:01:27 IP:59.124.xxx.xxx 未訂閱
procedure TMainForm.N6Click(Sender: TObject);
begin
if Application.FindComponent('Form1') = nil then
Application.CreateForm(TForm1,Form1);
Form1.ShowModal;
Form1.Free;
RefreshTree(); //加這一行
end;


Fishman
------
Fishman
schow428
一般會員


發表:2
回覆:11
積分:2
註冊:2006-09-22

發送簡訊給我
#16 引用回覆 回覆 發表時間:2007-01-30 18:27:40 IP:211.21.xxx.xxx 訂閱

我所提到的重跑一次function指的就是RefreshTree(); 沒錯
因為我的"現金收入"程式中, 在FormClose裡有指定了當"現金收入"視窗關掉時要執行RefreshTree();
裡面的程式碼是這行: FmMain.MainForm.RefreshTree;
我有試著把上面這行程式放在視窗關掉或是按下確定鍵的時候
都一樣沒有效果!!! 可不可以在麻煩adonis大大再幫我看看呢!! 謝謝!!


===================引 用 文 章===================

Sorry, 我公司用的環境是 D5 所以只好直接看你的 Source... 再和您確認一下..
1. 程式剛開始會執行一個function, 以顯示資料庫的資料到TreeView中 ---> 是 "RefreshTree(); 吧"
3. 重跑一次function,再次重秀我的TreeView --->這裡的 function是....
--> 若沒錯.. 我想你那 TreeView 的主Form 一Create 時會去執行 RefreshTree (這是沒問題,沒錯吧,因為此時的對資料庫的連結也準備好了。)
--> 再來 點選 "現金收入" 時會開啟 "Form1" (這段對資料庫的操作,依你說都沒問題是吧)
--> 此時結束 Form1 再回來時,卻發現 Tree View 的 "樣子" 沒變
我想當然是不會改變。因為你的 Tree View 是由你自己長出來的,當 Main Form Create 時你有執行 RefreshTree所以可以看得到下想看的樣子,但當執行 現金收入 功能回來後,並沒有再去對 Tree View 做任何的異動,你期待它會自動明白在這之前你對資料庫做了什麼操作嗎?當然不可能。
我想最簡單的作法在於執行 現金收入 功能回來後再執行一次 RefreshTree 來異動更新先前的狀態,應該可以解決你的問題才是。
試試吧,畢竟我沒有環境,僅從你的 Source 來看結果,或許有哪忽略了,請不要介意 ~~



===================引 用 文 章===================

我的顯示流程如下:
1. 程式剛開始會執行一個function, 以顯示資料庫的資料到TreeView中
2. 開啟另一個form,並執行 ExecSql 程式來跑我的update語法, 以更新資料庫資料
3. 重跑一次function,再次重秀我的TreeView
(此時TreeView並沒有秀出新的資料, 但資料庫內容已更新了!!)
我的function裡必跑的程式就是Query.close跟Query.open
但還是沒有效果!!? 請各位大大再幫幫小弟吧!! 謝謝!!
schow428
一般會員


發表:2
回覆:11
積分:2
註冊:2006-09-22

發送簡訊給我
#17 引用回覆 回覆 發表時間:2007-01-30 18:35:49 IP:211.21.xxx.xxx 訂閱
謝謝fishman大大熱心的指導, 這個方法是可以的
但是想請教一下如果我把這行程式放到"現金收入"這個視窗來執行
應該要怎麼執行才能有一樣的結果呢??
我是在formclose程序中執行這行程式: FmMain.MainForm.RefreshTree;
失敗了!!!


===================引 用 文 章===================

procedure TMainForm.N6Click(Sender: TObject);
begin
if Application.FindComponent('Form1') = nil then
Application.CreateForm(TForm1,Form1);
Form1.ShowModal;
Form1.Free;
RefreshTree(); //加這一行
end;


Fishman
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#18 引用回覆 回覆 發表時間:2007-01-30 21:49:14 IP:61.62.xxx.xxx 訂閱
嗯??我說的【我想最簡單的作法在於執行 現金收入 功能回來後再執行一次 RefreshTree 來異動更新先前的狀態,應該可以解決你的問題才是。】和 Fishman 所說的有何不同呢? 為何我的不能執行呢?
奇怪...

===================引 用 文 章===================

我所提到的重跑一次function指的就是RefreshTree(); 沒錯
因為我的"現金收入"程式中, 在FormClose裡有指定了當"現金收入"視窗關掉時要執行RefreshTree();
裡面的程式碼是這行:? FmMain.MainForm.RefreshTree;
我有試著把上面這行程式放在視窗關掉或是按下確定鍵的時候
都一樣沒有效果!!! 可不可以在麻煩adonis大大再幫我看看呢!! 謝謝!!

------
我也在努力學習中,若有錯謬請見諒。
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#19 引用回覆 回覆 發表時間:2007-01-30 22:10:17 IP:61.62.xxx.xxx 訂閱
我回頭看了一下您最先發的第一篇文,裡頭提到【當我使用Update來更新資料庫時, 資料庫是更新了, 但是秀出來的卻是舊的資料要多執行幾次才會秀出正確的結果, 請問要如何解決這個問題呢? 謝謝!!
而在【"現金收入"程式中, 在FormClose裡有指定了當"現金收入"視窗關掉時要執行RefreshTree();
裡面的程式碼是這行:? FmMain.MainForm.RefreshTree;
我有試著把上面這行程式放在視窗關掉或是按下確定鍵的時候都一樣沒有效果

我想程式並不是沒有執行到那一段或是沒作用,若真沒作用就不會多執行幾次之後又會秀出正確的結果,我猜原因應該是在ShowModal 時,視窗僅對作用中且可視的原件異動時作重繪(這也是為什麼你寫在同一個 Form 時沒有這個問題),所以當FmMain.MainForm.RefreshTree; 之後回到 Main Form 時畫面沒有刷新吧 ~~ Tree View 好像有個 ReFresh 可以調用,它會順帶去調用 RePaint 的動作,或許可以解決你的問題..
希望對您有幫助 ~~

===================引 用 文 章===================

我所提到的重跑一次function指的就是RefreshTree(); 沒錯
因為我的"現金收入"程式中, 在FormClose裡有指定了當"現金收入"視窗關掉時要執行RefreshTree();
裡面的程式碼是這行:? FmMain.MainForm.RefreshTree;
我有試著把上面這行程式放在視窗關掉或是按下確定鍵的時候
都一樣沒有效果!!! 可不可以在麻煩adonis大大再幫我看看呢!! 謝謝!!

------
我也在努力學習中,若有錯謬請見諒。
schow428
一般會員


發表:2
回覆:11
積分:2
註冊:2006-09-22

發送簡訊給我
#20 引用回覆 回覆 發表時間:2007-01-31 11:20:39 IP:211.21.xxx.xxx 訂閱
謝謝您的指導, 要更新非作用中的視窗真的沒這麼好搞!!
只能折衷一點!! 使用fishman的方法來寫了!!
在次謝謝各位大大的幫忙!! 謝謝!!

===================引 用 文 章===================
我回頭看了一下您最先發的第一篇文,裡頭提到【當我使用Update來更新資料庫時, 資料庫是更新了, 但是秀出來的卻是舊的資料要多執行幾次才會秀出正確的結果, 請問要如何解決這個問題呢? 謝謝!!

而在【"現金收入"程式中, 在FormClose裡有指定了當"現金收入"視窗關掉時要執行RefreshTree();
裡面的程式碼是這行:? FmMain.MainForm.RefreshTree;
我有試著把上面這行程式放在視窗關掉或是按下確定鍵的時候都一樣沒有效果

我想程式並不是沒有執行到那一段或是沒作用,若真沒作用就不會多執行幾次之後又會秀出正確的結果,我猜原因應該是在ShowModal 時,視窗僅對作用中且可視的原件異動時作重繪(這也是為什麼你寫在同一個 Form 時沒有這個問題),所以當FmMain.MainForm.RefreshTree; 之後回到 Main Form 時畫面沒有刷新吧 ~~ Tree View 好像有個 ReFresh 可以調用,它會順帶去調用 RePaint 的動作,或許可以解決你的問題..
希望對您有幫助 ~~
schow428
一般會員


發表:2
回覆:11
積分:2
註冊:2006-09-22

發送簡訊給我
#21 引用回覆 回覆 發表時間:2007-01-31 11:59:02 IP:211.21.xxx.xxx 訂閱
不好意思!!  我剛剛發現fishman大大的這個方法也不是100%會更新
真奇怪!!!!


===================引 用 文 章===================
謝謝fishman大大熱心的指導, 這個方法是可以的
但是想請教一下如果我把這行程式放到"現金收入"這個視窗來執行
應該要怎麼執行才能有一樣的結果呢??
我是在formclose程序中執行這行程式: FmMain.MainForm.RefreshTree;
失敗了!!!


===================引 用 文 章===================

procedure TMainForm.N6Click(Sender: TObject);
begin
if Application.FindComponent('Form1') = nil then
Application.CreateForm(TForm1,Form1);
Form1.ShowModal;
Form1.Free;
RefreshTree(); //加這一行
end;


Fishman
系統時間:2024-05-07 5:19:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!