Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
3-1107855118
Sava
2005-02-08 12:31
2005.03.06
Хранения изображений в БД


3-1107363486
frEE)stylEr
2005-02-02 19:58
2005.03.06
Добавить индекс таблицы.


1-1108834889
Aldor
2005-02-19 20:41
2005.03.06
Многомерные open array parameters


1-1108995207
red_imp
2005-02-21 17:13
2005.03.06
Как запустить досовую программу с ключами из другой директории


1-1108743397
ПроНыРа
2005-02-18 19:16
2005.03.06
компиляция содержимого RichEdit