如何修改lookup的欄位值?? |
尚未結案
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
tech_state
版主 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
|
cmj
高階會員 發表:15 回覆:242 積分:226 註冊:2002-06-12 發送簡訊給我 |
1.lookup並不是唯讀是可以修改 2.修改時機乃在於一筆Record處於dsInsert or dsEdit狀態中,當該Record post 後,lookup會依DataSet之設定重新改變其內容,所以lookup欄位內容改變是 暫時的. 3.如合修改如 字串 DataSet.FieldByName('xxx').AsString:='xxx'; 整數 DataSet.FieldByName('xxx').AsInteger:=123; 和改變一般欄位方式是一樣. 4.修改場合 CustId 資料欄位 CustName lookup欄位,隨CustId改變而變 所以在編輯CustId後離開,此時CustName還是對應舊CustId,因此 NewCustId -> NewCustName ,以NewCustName 來設定CustName 欄位, 當Post後DataSet會重新設定CustName,所以其改變只是暫時的.發表人 - cmj 於 2003/05/28 18:13:44 |
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
引言:cmj 前輩 第4點看不懂耶,可不可以用個範例來看看??1.lookup並不是唯讀是可以修改 2.修改時機乃在於一筆Record處於dsInsert or dsEdit狀態中,當該Record post 後,lookup會依DataSet之設定重新改變其內容,所以lookup欄位內容改變是 暫時的. 3.如合修改如 字串 DataSet.FieldByName('xxx').AsString:='xxx'; 整數 DataSet.FieldByName('xxx').AsInteger:=123; 和改變一般欄位方式是一樣. 4.修改場合 CustId 資料欄位 CustName lookup欄位,隨CustId改變而變 所以在編輯CustId後離開,此時CustName還是對應舊CustId,因此 NewCustId -> NewCustName ,以NewCustName 來設定CustName 欄位, 當Post後DataSet會重新設定CustName,所以其改變只是暫時的.發表人 - cmj 於 2003/05/28 18:13:44
------
ivankuo |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
你是可以在 Lookup Filed 時修改 Lookup Field 的顯示值沒錯,但這一般沒甚麼意義,因為這些修改不會存進數據庫,反而容易誤導了使用者。 而且,
"所以在編輯CustId後離開,此時CustName還是對應舊CustId"
這句是錯的
當 CustID 變後不用 post Lookup Field 已是指向新的 CustID 對應的CustName 的了。 所以,說 Lookup Field 不能異動還是沒錯的,雖然可以暫時修改值但這在一般的應用上沒甚麼用處,真的要異動還使用上面提出的方法較容易。
|
cmj
高階會員 發表:15 回覆:242 積分:226 註冊:2002-06-12 發送簡訊給我 |
TbCust客戶資料欄 CUSTID CUSTNAME ------ -------- 001 NAME1 002 NAME2 003 NAME3 TbOrd訂單檔: ORDNO,CUSTID為DATA , CUSTNAME為Lookup Field TbOrdCUSTNAME 對應CUSTNAME 設定如下 TbOrdCUSTNAME.FieldKind -> fkLookup TbOrdCUSTNAME.KeyFields -> CUSTID TbOrdCUSTNAME.LookDataSet -> TbCust TbOrdCUSTNAME.LookupKeyFields -> CUSTID TbOrdCUSTNAME.LookupResultField -> CUSTNAME ORDNO CUSTID CUSTNAME ----- ------ -------- A001 001 NAME1 A002 002 NAME2 A003 003 NAME3 假設螢幕顯示訂單資料如上 DBEDITCustID.DataField -> CUSTID欄位 DBTEXTCUSTNAME 為 DbText對應TbOrdCUSTNAME之內容 當在編輯DBEDITCustID後去改custname之內容 CUSTID: 001 改 003 CUSTNAME: NAME1 改 NAME3 所以可在DBEDITCustID的 OnExit事件中 var CustId,CustName:String; begin if TbOrd.State in [dsInsert,dsEdit] then begin CustId:=TbOrd.FieldByName('CUSTID').AsString; CustName:=TbCust.Lookup('CUSTID',CustId,'CUSTNAME'); TbOrd.FieldByName('CUSTNAME').AsString:=CustName; end; end;程式用法可以查help說明 |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
引言:cmj 兄, 跟據我的經驗及剛剛再做的實驗所得,當DBEDITCustID後,即使不加入你的程式碼 CustName 還是會自動改變為新的對應值的。 那加上你那段程式碼有甚麼好處嗎 ? 還是在甚麼情況下 CustID 改了 CustName 的 Lookup 是不會自動改的 ? 謝謝指教。當在編輯DBEDITCustID後去改custname之內容 CUSTID: 001 改 003 CUSTNAME: NAME1 改 NAME3 所以可在DBEDITCustID的 OnExit事件中 var CustId,CustName:String; begin if TbOrd.State in [dsInsert,dsEdit] then begin CustId:=TbOrd.FieldByName('CUSTID').AsString; CustName:=TbCust.Lookup('CUSTID',CustId,'CUSTNAME'); TbOrd.FieldByName('CUSTNAME').AsString:=CustName; end; end; |
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
ivankuo, 訂單 : 1234
CustID : CustX
Lookup 後的 CustName : 台X電 到底你是想
1. 將這張訂單的客戶設成另一客戶 (CustID : CustA; CustName : 台A電)
還是
2. 將客戶 CustX 的 名稱改為 台A電 (所有客戶是 CustX 的 CustName 都會變 台A電) 第一篇回文已說過,情況一用 TDBLookupComboBox,情況二要另開 Table/Query 來異動 Customer Table Lookup 欄位不可異動,就是這麼簡單的一回事。
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |