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

重複鍵值在dbgrid的問題?

答題得分者是:Justmade
JamesLiang
初階會員


發表:54
回覆:78
積分:31
註冊:2003-02-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-15 01:39:29 IP:206.204.xxx.xxx 未訂閱
各位先進..有兩個問題請教 1. 我在 DBGRID 寫了一段程式來判定輸入是否為重複鍵值,若是則游標回到原欄位(onColExit),但是可判定卻無法回原欄位 DBGrid_RDInvy.SelectedIndex := DBGrid_RDInvy.SelectedIndex - 1 是否可告知應當如何 2. 我採用updatebatch 如下 if (DataModule1.AQ_RDInvy.State = dsInsert) or (DataModule1.AQ_RDInvy.State = dsEdit) then begin {DataModule1.AQ_RDInvy.UpdateBatch(arAll);} end; ps.(AQ_RDInvy :TADOQuery) 但compiler 時系統告知arall未宣告,請教原因何在 祝好 James
Justmade
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-15 08:46:25 IP:218.16.xxx.xxx 未訂閱
引言: 1. 我在 DBGRID 寫了一段程式來判定輸入是否為重複鍵值,若是則游標回到原欄位(onColExit),但是可判定卻無法回原欄位 DBGrid_RDInvy.SelectedIndex := DBGrid_RDInvy.SelectedIndex - 1 是否可告知應當如何
在 onColExit 時 SelectedIndex 還是原先的欄位,你再減一便會回之前一個欄位。試試用 SelectedField 直接指定要回到的欄位罷。
引言: 2. 我採用updatebatch 如下 if (DataModule1.AQ_RDInvy.State = dsInsert) or (DataModule1.AQ_RDInvy.State = dsEdit) then begin {DataModule1.AQ_RDInvy.UpdateBatch(arAll);} end; ps.(AQ_RDInvy :TADOQuery) 但compiler 時系統告知arall未宣告,請教原因何在
在你該 Form 內 Uses 加上 ADODB
JamesLiang
初階會員


發表:54
回覆:78
積分:31
註冊:2003-02-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-15 09:19:16 IP:206.204.xxx.xxx 未訂閱
Justmade先進.. 問題一我不知道程式該如何寫,可否寫個範例 問題二我已解決,多謝!!但我還是想請教下列程式bug為何 procedure TQForm_RDInvy.DBGrid_RDInvyCellClick(Column: TColumn); begin with DataModule1.AQ_RDInvy do begin if not ((state = dsInsert) or (State = dsEdit)) then begin R_ItemNo := Column.Field.Value; Close; end; end; end; 因為當showmessage出現結束後欄位還是到下一格,此時我click原格時connection結束,表單成為空白..另外用何種方式可將當時的 State 顯現在 edit1.text? 多謝
Justmade
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-15 10:36:20 IP:218.16.xxx.xxx 未訂閱
引言: 問題一我不知道程式該如何寫,可否寫個範例
引言: DBGrid_RDInvy.SelectedField := DBGrid_RDInvy.DataSource.DataSet.FieldByName('Field名稱'); [quote] 但我還是想請教下列程式bug為何
procedure TQForm_RDInvy.DBGrid_RDInvyCellClick(Column: TColumn);
begin
  with DataModule1.AQ_RDInvy do
    begin
      if not ((state = dsInsert) or (State = dsEdit)) then
        begin
          R_ItemNo := Column.Field.Value;
          Close;
        end;
    end;
end;
因為當showmessage出現結束後欄位還是到下一格,此時我click原格時connection結束,表單成為空白..
到下一格用上面的 selectedfield 應可解決,變空白因為你 Close 了 AQ_RDInvy 嘛。 [quote] 另外用何種方式可將當時的 State 顯現在edit1.text?
由於dsedit,dsinsert等是常數名稱,不能直接當作字串,你可用case來做
Case DataModule1.AQ_RDInvy.state of
  dsInsert : edit1.text := "Insert Mode";
  dsEdit : edit1.text := "Edit Mode";
  ...
End
JamesLiang
初階會員


發表:54
回覆:78
積分:31
註冊:2003-02-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-15 11:14:29 IP:63.201.xxx.xxx 未訂閱
Justmade 先進..多謝指教,問題二中close的條件是state <> dsinsert&dsedit 照理當時應該還在 dsinsert 的狀態,close並不會被執行才是,請再指教 多謝 James
Justmade
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-15 11:27:53 IP:218.16.xxx.xxx 未訂閱
引言: 問題二中close的條件是state <> dsinsert&dsedit 照理當時應該還在 dsinsert 的狀態,close並不會被執行才是,請再指教
對丫,但它既被執行了,即在你的Code的某處已將該 dataset post/cancel 了。由於沒有你 onColExit 的 code 所以不能肯定在那,但最可能就是你直接使用了Locate,因Locate需要移動 Dataset cursor,便會自動Post,解決辦法是另開一個Dataset 專門Locate 用 若不是這個原因請 post onColExit 的 Code
JamesLiang
初階會員


發表:54
回覆:78
積分:31
註冊:2003-02-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-15 12:03:15 IP:63.201.xxx.xxx 未訂閱
我將程式段落post請參考,再次感謝你的幫忙 procedure TQForm_RDInvy.DBGrid_RDInvyColExit(Sender: TObject); var T_ItemNO : String; FindResult : Variant; begin with DataModule1.AQ_RDInvy do begin if state = dsInsert then begin statusbar1.Panels[0].Text := 'Insert'; T_ItemNo := TTmpGrid(DBGrid_RDInvy).InplaceEditor.Text; FindResult := DataModule1.AQ_RDInvy.Lookup('ItemNo',T_ItemNo,'ItemNo'); if varisnull(FindResult) then showmessage('New Key') else begin showmessage('Duplicate Key, Once Again'); end; end; end; end; 多謝
Justmade
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-15 13:45:13 IP:218.16.xxx.xxx 未訂閱
就是我剛才我說的,Lookup 與 Locate 一樣會自動Post的。 解決辦法是另開一個Dataset,同樣連結到同一個 Table (或同一sql),專門作 Lookup 用。    FindResult := DataModule1.AQ_RDInvy2.Lookup('ItemNo',T_ItemNo,'ItemNo'); 這樣就不會影響 AD_RDInvy 了。
系統時間:2024-06-19 0:27:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!