В моем приложении Delphi я использую поля поиска, но необычным образом. На самом деле, я хочу обновить поле в базовом наборе данных, точно так же, как если бы оно было в одной таблице.Получить текущее значение ячейки в DBGrid
Существующие руководства говорят, что нет проблем, просто присоединитесь к столу и вуаля ... Я завидую, если они действительно преуспели в этой задаче с таким простым решением. Я не. Кстати, я думаю, что приближаюсь к своей цели. У меня остался один вопрос: как, черт возьми, я могу получить значение? только зашел в DBGrid Cell?
Я пробовал DBGrid[FieldName].EditValue
и .DisplayText
, но они показывают то же значение, что и Field.Value
, которое не изменяется после выхода из столбца, потому что это поле поиска. Sender.NewValue
есть null. Я использую эту функцию для обновления таблицы поиска:
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 я использовал, прежде чем я закончил с Lookup полями:
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
Спасибо. Почему бы не попробовать и объяснить проблему, которую вы все еще имеете в new q? – MartynA
Было очень любезно, щедро и задумано, чтобы вы назначили этот ответ за щедрость. Я это ценю. – MartynA