在我的Delphi應用程序中,我使用查找字段,但以不尋常的方式。實際上,我想更新底層數據集中的字段,就像它在同一個表中一樣。在DBGrid中獲取當前單元格的值
現有的指南告訴我們沒有問題,只需加入表格即可......我很羨慕他們是否真的用這樣簡單的解決方案成功完成了這項任務。我不。順便說一句,我想我正在接近實現我的目標。我還有一個問題:我怎麼能得到價值我只是進入DBGrid單元格?
我試圖DBGrid[FieldName].EditValue
和.DisplayText
,但他們表現出相同的值Field.Value
,該柱排出後不會改變,因爲它是查詢字段。 Sender.NewValue
爲空。我使用這個功能來更新查詢表:我結束了查找字段之前我用
procedure TKDGridForm.LookupFieldChange(Sender: TField);
begin
if not Assigned(Sender) then
Exit;
Sender.OnChange := nil;
if not Assigned(Sender.LookupDataSet) then
Exit;
if Sender.LookupDataSet.Locate(Sender.LookupKeyFields, Sender.DataSet[Sender.KeyFields], []) then
Sender.LookupDataSet.Edit
else
Sender.LookupDataSet.Append;
// how do I get the value I just entered?
Sender.Value := KDGrid3[Sender.FieldName].DisplayText;
Sender.LookupDataSet.FieldValues[Sender.LookupResultField] := Sender.Value;
Sender.LookupDataSet.Post;
Sender.OnChange := LookupFieldChange;
end;
這裏是SQL:
select det.*,
od1.T_EQ T_SHABLON_EQ,
od1.T_NV T_SHABLON_NV,
od1.T_PRIM T_SHABLON_PRIM,
od2.T_EQ T_PRAVKA_EQ,
od2.T_NV T_PRAVKA_NV,
od2.T_PRIM T_PRAVKA_PRIM,
od3.T_EQ T_VALCOV_EQ,
od3.T_NV T_VALCOV_NV,
od3.T_PRIM T_VALCOV_PRIM,
od4.T_EQ T_REZKA2_EQ,
od4.T_NV T_REZKA2_NV,
od4.T_PRIM T_REZKA2_PRIM
from CMKNEW.details det
left join CMKNEW.OperDetails od1
ON det.nrec = od1.cdetail
and 81 = od1.coper
left join CMKNEW.OperDetails od2
ON det.nrec = od2.cdetail
and 82 = od2.coper
left join CMKNEW.OperDetails od3
ON det.nrec = od3.cdetail
and 83 = od3.coper
left join CMKNEW.OperDetails od4
ON det.nrec = od4.cdetail
and 84 = od4.coper
where det.ckd=:CKD order by det.NREC
希望它會解釋我的任務更加清晰。如果你想要mcve,我可以擴展它,但我認爲它不是必需的。
我的數據庫是Oracle,通過ADO連接。我希望解決方案儘可能簡單。
其實它的工作原理。而實際上並沒有幫助我解決X問題,因爲OnFieldChange事件以不可預知的方式被調用:(我接受,因爲它是我詢問的答案。 – Danatela
謝謝。爲什麼不嘗試解釋你仍然存在的問題新q? – MartynA
這是非常善良,慷慨和深思熟慮的提名這個答案的賞金,我很感激。 – MartynA