重複鍵值在dbgrid的問題? |
答題得分者是:Justmade
|
JamesLiang
初階會員 發表:54 回覆:78 積分:31 註冊:2003-02-13 發送簡訊給我 |
各位先進..有兩個問題請教
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 發送簡訊給我 |
引言: 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 發送簡訊給我 |
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 發送簡訊給我 |
引言: 問題一我不知道程式該如何寫,可否寫個範例由於dsedit,dsinsert等是常數名稱,不能直接當作字串,你可用case來做引言: DBGrid_RDInvy.SelectedField := DBGrid_RDInvy.DataSource.DataSet.FieldByName('Field名稱'); [quote] 但我還是想請教下列程式bug為何到下一格用上面的 selectedfield 應可解決,變空白因為你 Close 了 AQ_RDInvy 嘛。 [quote] 另外用何種方式可將當時的 State 顯現在edit1.text?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結束,表單成為空白.. Case DataModule1.AQ_RDInvy.state of dsInsert : edit1.text := "Insert Mode"; dsEdit : edit1.text := "Edit Mode"; ... End |
JamesLiang
初階會員 發表:54 回覆:78 積分:31 註冊:2003-02-13 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
引言: 問題二中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 發送簡訊給我 |
我將程式段落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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |