Текущий архив: 2005.03.06;
Скачать: CL | DM;
Вниз
две связанные таблицы и editbox Найти похожие ветки
← →
ronwilson (2005-02-02 12:28) [0]Привет!
Задача такая: есть две таблицы - главная и подчиненная, связанная по полю. подчиненная связана по masterfield и подключена к mastersource главной таблицы. естественно, при выборе записи в главной, в подчиненной показываются записи, относящиеся к записи. проблема вот в чем: на форме есть еще editbox со updown компонентом, а в подчиненной таблице есть поле god, хранящее год. вопрос заключается в следующем: т.к. подчиненной таблице Filter сделать нельзя, насколько я понял, то надо чтобы в подчиненной таблице отображались лишь записи, относящиеся к записи из главной таблицы И с полем god из editbox. Так же нужно чтобы при добавлении новой записи в подчиненную таблицу в поле god автоматически заносилось текущее значение editbox. Все это добро завернуто на компонентах ADO.
Подскажите, плиз, как сделать, жел. поподробнее, а то я вообще-то не на delphi пишу в основном и не знаю как такое сделать :(
← →
Sergey13 © (2005-02-02 12:36) [1]Отказаться от стандартной связки мастер-детайл и нарисовать ее вручную с инициализацией по АфтерСкрол главной таблицы.
← →
ronwilson (2005-02-02 12:53) [2]а есть более человеческий способ?
← →
Sergey13 © (2005-02-02 12:56) [3]Я его тебе описал уже в общих чертах. И он более человеческий чем тандартная связка. ИМХО конечно.
← →
ronwilson (2005-02-02 13:23) [4]а поподробнее можно? а то не сильно понятно суть метода :(
← →
ronwilson (2005-02-02 13:23) [5]а поподробнее можно? а то не сильно понятно суть метода :(
← →
stone © (2005-02-02 13:29) [6]
> т.к. подчиненной таблице Filter сделать нельзя
Можно. Для этого есть событие OnFilterRecord.
← →
Sergey13 © (2005-02-02 13:30) [7]На детальную таблицу строится запрос
Select * from det_table where master_id=:masterid and God=:god
В АфткрСкрол главной таблицы и на изменение твоего едитбокса ставишь
(псевдо код - копирование не пройдет 8-)
Query1.ParamByName("masterid").asInteger:=MasterId.AsInteger;
Query1.ParamByName("god").asInteger:=editbox.Value;
Query1.Close;
Query1.Open;
← →
ronwilson (2005-02-02 14:37) [8]пока ждал уже изобрел как все делать :) один вопрос остался: как получить управление в какой-нить процедуре при смене в мастер таблице рекорда так, чтобы в подчиненной уже был измененные данные в соответствии с мастером?
← →
Sergey13 © (2005-02-02 14:52) [9]2[8] ronwilson (02.02.05 14:37)
Переведи.
Или, если я понял, то после моего кода (или своего аналогичного) и пиши чего хочешь.
← →
ronwilson (2005-02-02 15:06) [10]я по-другому сделал. все отлично работает. сделал через OnFilterRecord (фильтрую) и BeforePost (вставляю дату). при изменении editbox фильтрую (кстати, а как нормально сказать adotable чтобы она вызвала OnFilter? - а то я выключаю и включаю Filtered), а как сделать так, чтобы OnFilterrecord вызывался при изменении активной записи в мастер таблице?
← →
stone © (2005-02-02 15:10) [11]
> кстати, а как нормально сказать adotable чтобы она вызвала
> OnFilter? - а то я выключаю и включаю Filtered
А ты его не выключай
← →
ronwilson (2005-02-02 15:19) [12]сейчас поточнее скажу: onfilter вызывается только если если прямо менять Filtered на True, а почему он не вызывается в включенном состоянии при смене активной записи в мастер таблице? по идее, ведь подчиненная таблица меняется и должен вызваться onfilter :(
← →
msguns © (2005-02-02 15:19) [13]
procedure TfrmDB.adoMasterAfterScroll(DataSet: TDataSet);
begin
with adoqDetail do
begin
Tag := 0;
if RecorCount>0 then Tag := Fields[0].AsInteger; // ID тек.
try
Close;
ParamByName("IDM").AsSinteger := DataSet.Fields[0].AsInteger
ParamByName .. // Доп. условия выборки (год, например)
Open;
if Tag>0 then Locate("ID",Tag,[]) // Активировать текущую
except
ShowMessage("Ошибка переоткрытия детала");
exit;
end;
end;
// Вызов процедуры, реагирующей на смену записи в мастере
end;
← →
msguns © (2005-02-02 15:22) [14]Не рекомендую пользоваться фильтром, т.к. многие фичи начинают "врать". Например, RecNo и RecordCount, Locate в некоторых случаях
← →
ronwilson (2005-02-02 15:55) [15]завязал на запросе (AdoQuery) - а как в запросе узнать активную запись из master таблицы?
← →
Sergey13 © (2005-02-02 16:02) [16]2[15] ronwilson (02.02.05 15:55)
Читай из первой попавшейся. 8-)
Страницы: 1 вся ветка
Текущий архив: 2005.03.06;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.041 c