Главная страница
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.043 c
1-1108625807
Niki
2005-02-17 10:36
2005.03.06
StringGrid


1-1108618021
vlgrig1961
2005-02-17 08:27
2005.03.06
Как в TreeView програмно стать на TreeNode...


14-1108616394
leonidus
2005-02-17 07:59
2005.03.06
Ищется компонентик для записи CD


14-1108691338
vidiv
2005-02-18 04:48
2005.03.06
FTP


1-1108380610
Дельфёнок
2005-02-14 14:30
2005.03.06
Подскажите как добавить у ActiveX Control-а новые свойства?