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

有關Mysql中key的運用

尚未結案
miga
初階會員


發表:61
回覆:92
積分:30
註冊:2002-08-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-18 10:39:00 IP:211.74.xxx.xxx 未訂閱
我程式裡面,有一個table,裡面只有四個欄位, 而這四個欄位是一個key 當我要進行修改時, 原是用locate,但locate好像只能用在一個欄位, 請告訴我是否還有其它的指令可用?    另外,我想到的一點,就是當我比對到這筆資料時,就進行修改, 由於四個欄位是一個key, 當我修改完要存入table時,因為主key的值變了, 所以會存到別筆資料去, 請問我該如何克服?    謝謝大家…
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-18 10:50:37 IP:211.21.xxx.xxx 未訂閱
引言: 我程式裡面,有一個table,裡面只有四個欄位, 而這四個欄位是一個key 當我要進行修改時, 原是用locate,但locate好像只能用在一個欄位, 請告訴我是否還有其它的指令可用?
locate可以比對多欄位,語法如下: Table1.Locate('FieldName1;FieldName2;FieldName3;FieldName4', VarArrayOf(['FieldValue1', 'FieldValue2', 'FieldValue3','FieldValue4']), [loPartialKey]);
引言: 另外,我想到的一點,就是當我比對到這筆資料時,就進行修改, 由於四個欄位是一個key, 當我修改完要存入table時,因為主key的值變了, 所以會存到別筆資料去, 請問我該如何克服?
進行修改,若主key的值變了,若其主key存在時,應該無法存入,因為主Key會重複,所以應該不會存到別筆資料去吧! ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-18 11:54:44 IP:211.76.xxx.xxx 未訂閱
引言: 另外,我想到的一點,就是當我比對到這筆資料時,就進行修改, 由於四個欄位是一個key, 當我修改完要存入table時,因為主key的值變了, 所以會存到別筆資料去, 請問我該如何克服?
locate 部分如 channel 兄的作法一般.. 另外存檔的部分, 要看你使用的方法了, 但應該都不會出錯才是. 可能是因為除了你選出來的四個欄位都是 PRIMARY KEY 以外, 尚有其 他的欄位也是 PRIMARY KEY 吧. 這樣的話, 建議你將所有的 PRIMARY KEY 都 SELECT 出來, 只是將其他不要顯示的欄位設定為不顯示在 DBGrid 上即可, 如此一來, 在異動資料時, 會依照你的原始主鍵值為 條件來進行異動, 就不會發生問題了!
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-18 12:49:32 IP:218.16.xxx.xxx 未訂閱
只稍作補充 : 不用擔心 修改 update 的問題, Delphi 會用一個很安全的方法來為你update table 的。 比方說,你的 table test 有 A, B, C, D 欄,原本的資料是 1,2,3,4 現改為 5,6,7,8 Delphi 自建的 SQL 為 update test ('A','B','C','D') VALUES (5,6,7,8) where 'A' = 1 and 'B' = 2 and 'C' = 3 and 'D' = 4; 所以,不會寫到別筆資料啦放心。
miga
初階會員


發表:61
回覆:92
積分:30
註冊:2002-08-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-22 00:32:15 IP:211.74.xxx.xxx 未訂閱
引言: 只稍作補充 : 不用擔心 修改 update 的問題, Delphi 會用一個很安全的方法來為你update table 的。 比方說,你的 table test 有 A, B, C, D 欄,原本的資料是 1,2,3,4 現改為 5,6,7,8 Delphi 自建的 SQL 為 update test ('A','B','C','D') VALUES (5,6,7,8) where 'A' = 1 and 'B' = 2 and 'C' = 3 and 'D' = 4; 所以,不會寫到別筆資料啦放心。 嗯…那我想再請問一下, 因為我是用dbgrid,當dbgrid點到某筆資料, 就將資料show在另一個視窗進行修改 假設現在table1中crs_id和dep_id 那麼我該如何來寫呢… 我不曉得如何把dbgrid點到的那筆資料,運用在sql上… 謝啦…^_^
< >< >< >< >< >< >
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-22 10:42:19 IP:61.216.xxx.xxx 未訂閱
procedure TForm1.DBGrid1DblClick(Sender: TObject); begin showmessage(table1.FieldByName('crs_id').Value); showmessage(table1.FieldByName(dep_id).Value); //這樣你就可以取得crs_id和dep_id的值在下sql語法了 end; TRY TRY SEE < >< >< >< >< >< >
引言: [嗯…那我想再請問一下, 因為我是用dbgrid,當dbgrid點到某筆資料, 就將資料show在另一個視窗進行修改 假設現在table1中crs_id和dep_id 那麼我該如何來寫呢… 我不曉得如何把dbgrid點到的那筆資料,運用在sql上… 謝啦…^_^
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-22 16:00:33 IP:61.10.xxx.xxx 未訂閱
引言: 因為我是用dbgrid,當dbgrid點到某筆資料, 就將資料show在另一個視窗進行修改 假設現在table1中crs_id和dep_id 那麼我該如何來寫呢… 我不曉得如何把dbgrid點到的那筆資料,運用在sql上… 謝啦…^_^
不大明白耶,是同一個 Table 或是另一個 Table 啊? 若是同一個 Table 直接修改,方法如下 1. 加入兩個 TDBEdit 2. DataSources 選同 DBGrid 一樣的 DataSources 3. DataField 一個選 crs_id, 一個選 dep_id 若是同一個 Table 給另一個 Table 的對應值修改(如列出所有 dep_name 給使用者選,選好後自動將 dep_id 存入 Table1),可使用 DBLookUpComboBox, 可參看 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27333 若是想要顯示另外的 Table 給 使用者修改那另外的 Table ,可參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27172
系統時間:2024-06-24 19:27:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!