Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Внизкак сделать чтоб поле calculated один раз расчиталось запомнило Найти похожие ветки
← →
AVP_opck (2004-05-18 08:31) [0]использую fibplus,ehlib.
дело в следующем. есть таблица cards - в ней ID и Name1
вторая таблица strukt - ID и Name2
третья таблица - id, cardsid, struktid соответственно из первой и второй таблице.
есть 2 грида - gridcards
и gridstrukt
они через датасет показывают записи своих таблиц.
делаю чтоб нажав на запись в cards в strukt показывало какие записи strukt.id сопоставленны cards.id в третьей таблице.
для этого долбавил в datasetstrukt поле IN_ST calcukated типа булево.
и процедурку
procedure TForm1.DataSourceCARDSDataChange(Sender: TObject; Field: TField);
VAR
STRUKTBOOK:TBOOKMARKSTR; //закладка
begin
if datasetstrukt.Active=true and datasetcardstrukt.Active=true then
BEGIN
if datasetcardstrukt.Active=true then
begin
STRUKTBOOK:=DATASETSTRUKT.Bookmark;
DATASETSTRUKT.First;
WHILE NOT DATASETSTRUKT.Eof DO
BEGIN
datasetSTRUKT["in_st"]:=false;
if datasetcardstrukt.Locate("cardid;struktid",VarArrayOf([datasetcards["id"],datasetSTRUKT["id"]]),[]) then
begin
datasetSTRUKT["in_st"]:=true;
end;
DATASETSTRUKT.Next
END;
DATASETSTRUKT.Bookmark:=STRUKTBOOK;
end;
ЕСЛИ DATASETSTRUKT.Bookmark:=STRUKTBOOK; закоментировать то все нормально показывает, но если это исполнять то все in_st становятся серыми и ниче не показывают. в чем дело???
как сделать чтоб они оставались такими какими я их сделал и после перехода на закладку
← →
AVP_opck (2004-05-18 08:45) [1]вобщем наверно все можно свести к одному.
как сделать чтоб поле калькулятед один рас посчиталось и больше не пересчитывалось. сохраняя и показывая свои значения.
← →
Виталий Панасенко (2004-05-18 08:55) [2]Почитай о Master-Detail связи.. Все на-а-а-амного проще окажется...:-)))... См. статьи на сайте FIBPlus... Там как раз то, что тебе нужно... Правда, только для двух таблиц... Но серое вещество не только ж для навара используется ?.. :-)))
← →
AVP_opck (2004-05-18 09:11) [3]все с этими связями понятно.
только не подходит чуть чуть.. или скажи как сделать
чтоб было:
всего два грида в одном записи кардс в другом структ. и в этом гриде структ надо как то отметить что соответствует записям кардс
но показывать и там и там надо все записи.
← →
AVP_opck (2004-05-18 09:20) [4]и чтоб при переходе в cards на другу запись
в strukt менялся этот Checkbox
← →
Anatoly Podgoretsky © (2004-05-18 09:25) [5]AVP_opck (18.05.04 09:11) [3]
Чем же не подходит
Ну тогда делай фильтрами, запросами
← →
Sergey13 © (2004-05-18 09:42) [6]2AVP_opck (18.05.04 09:11) [3]
Если и можно так сделать, то ИМХО шибко геморойно. Тем более на "много-много" отношении.
>но показывать и там и там надо все записи.
А зачем?
← →
AVP_opck (2004-05-18 09:52) [7]Sergey13
>>но показывать и там и там надо все записи.
>А зачем?
чтоб пользователь кликал на те записи которые не отмечены и они отмечались(обрабатываю cellClick по гриду)
← →
ЮЮ © (2004-05-18 09:55) [8]В Gride структ. показываить не Table, а запрос
SELECT
Strukt.*,
(SELECT Count(Id) AS Cnt
FROM третья
WHERE (Struct.Id = третья.StruktId) AND (третья.CardId = :ID))
) AS Cnt
FROM Strukt
который сделай Детайл по отночению к таблице CARDS, в результате и получишь то самое поле Сnt, которое считается один раз при перемещении по первому гриду
← →
AVP_opck (2004-05-18 09:56) [9]вобще то что я сделал в начале вполне работает без закладки.
просто каждый раз при выборе в cards другой записи в strukt курсор становица на последнюю запись из за цикла.
хм. а может добавить этот чекбокс в гриде ехлиб вроде позволяет)
надо попробовать
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c