Форум: "Базы";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
ВнизMaster-Detail и запрос с параметрами Найти похожие ветки
← →
Sigetta © (2005-09-13 11:35) [0]Таблицы Rasx и PRasx находятся в связи Master-Detail. Если открывать PRasx с параметром, то связь теряется, если без параметра связь есть.
DM.Rasx.Close;
DM.Rasx.CommandText:="SELECT * FROM RASX WHERE SKLAD=:SKLAD AND KODM=:KODM AND DATA BETWEEN :Dat1 and :Dat2";
DM.Rasx.Parameters.ParamByName("Dat1").Value:=StrToDateTime(FMain.Dat1);
DM.Rasx.Parameters.ParamByName("Dat2").Value:=StrToDateTime(FMain.Dat2);
DM.Rasx.Parameters.ParamByName("KODM").Value:=0;
DM.Rasx.Parameters.ParamByName("SKLAD").Value:=FMain.VSklad;
DM.Rasx.Open;
//связь теряется
DM.PRasx.CommandText:="SELECT PRasx.* FROM PRasx INNER JOIN RASX ON PRasx.NVN=Rasx.NVN AND Rasx.SKLAD=:S";
DM.pRasx.Parameters.ParamByName("S").Value:=FMain.VSklad;
DM.PRasx.Open;
//связь сохраняется
DM.PRasx.CommandText:="SELECT PRasx.* FROM PRasx INNER JOIN RASX ON PRasx.NVN=Rasx.NVN AND Rasx.SKLAD="+IntToStr(FMain.VSklad);
DM.PRasx.Open;
Почему так может происходить?
P.S. Rasx - primary key table, PRasx - Foreign Key table
P.S.S. Rasx, PRasx - ADODatatSet
← →
Val © (2005-09-13 11:46) [1]1. как реализована эта связь(я не вижу параметра для связи в тексте запроса) и что значит "теряется", при какой последовательности действий?
2. Почему DM.pRasx.Parameters.ParamByName("S").Value а не .AsString, раз уж известно, что это строка?
← →
Sergey13 © (2005-09-13 11:53) [2]
DM.PRasx.CommandText:="SELECT PRasx.* FROM PRasx PRasx.NVN=:NVN";
В афтерскрол Rasx вставитьDM.PRasx.Close;
DM.Rasx.FieldByName("NVN").Value
DM.pRasx.Parameters.ParamByName("NVN").Value:=DM.Rasx.FieldByName("NVN").Value;
DM.PRasx.Open;
← →
Val © (2005-09-13 12:05) [3]>Sergey13 © (13.09.05 11:53)
> В афтерскрол Rasx вставить...
Зачем? Разве в TADODatatSet нет свойства DataSource? Есть же. Думаю, достаточно его установить в соотв. значение.
← →
Lexer © (2005-09-13 12:06) [4]>Val © (13.09.05 11:46) [1]
>1. как реализована эта связь(я не вижу параметра для связи в тексте запроса) и что значит "теряется", при какой последовательности действий?
согласен, связь не может теряться
>Почему DM.pRasx.Parameters.ParamByName("S").Value а не .AsString, раз уж известно, что это строка?
Откуда известно что это строка, в [1] про это ничего не сказано.
>[2] Sergey13 © (13.09.05 11:53)
>В афтерскрол Rasx вставить
В афтерскролл при нормальной связи вставлять здесь ничего не надо.
← →
Sergey13 © (2005-09-13 12:11) [5]2[3] Val © (13.09.05 12:05)
2[4] Lexer © (13.09.05 12:06)
Привычка. 8-)
← →
Val © (2005-09-13 12:13) [6]>[4] Lexer © (13.09.05 12:06)
> Откуда известно что это строка, в [1] про это ничего не
> сказано.
Согласен - невнимателен. Перефразирую: заменить Value на соотв. As..., поскольку тип известен по типу поля в БД.
← →
Sigetta © (2005-09-13 12:46) [7]> заменить Value на соотв. As..., поскольку тип известен по типу поля в БД
так ведь TADODatatSet. нет никакого As.., только Value
>[3]
там все установлено
При перемещении в гриде связанном с Rasx не происходит "фильтрации" в PRasx, т.е. показан весь выбранный набор. Это при потери связи.
Если связь не теряется, то при перемещении в гриде связанном с Rasx я вижу соотвественные данные PRasx.
← →
Lexer © (2005-09-13 12:57) [8]Я так понимаю, что используются Query, с установленным у DetailDataSet свойством DataSource на MasterDataSet.
Но тогда здесь вообще связь отсутствует, т.к. параметры детайла не указывают не на одно поле мастера, попробуй так:SELECT PRasx.*
FROM PRasx
INNER JOIN RASX
ON PRasx.NVN=Rasx.NVN
AND Rasx.SKLAD=:SKLAD
AND Rasx.NVN = :NVN
← →
Val © (2005-09-13 13:11) [9]>[7] Sigetta © (13.09.05 12:46)
угу, посмотрел, сорри - просто адо не пользуюсь.
← →
Sigetta © (2005-09-13 14:26) [10]>[8]
Это выполнять каждый раз при перемещении по Rasx? Медленно. Не устраивает. Или я не так понял.
В двух случаях я получаю одинаковый набор данных. Только в первом он "фильтруется", а во втором нет.
← →
ANB © (2005-09-13 15:37) [11]
> Sigetta © (13.09.05 14:26) [10]
- зачем в детайл запросе джойн с мастер-таблицей ?
← →
Sigetta © (2005-09-13 16:19) [12]Сразу было просто PRasx.Open, но потом мне пришло в голову что я тащу весь набор с сервера. Я и решил, что нужно получать только те данные PRasx, которые ... нужны.
DM.PRasx.CommandText:="SELECT * FROM PRASX INER JOIN Rasx ON PRasx.NVN=Rasx.NVN WHERE Rasx.SKLAD=:SKLAD AND Rasx.KODM=:KODM AND Rasx.DATA BETWEEN :Dat1 and :Dat2";
← →
Sigetta © (2005-09-13 16:25) [13]Мне тут говорят, что при
PRasx.CommandType=Table и PRasx.Open с сервера танутся только те данные, которые связаны с Rasx, а не вся таблица.
Но что-то слабо верится...
← →
Val © (2005-09-13 16:27) [14]>Sigetta © (13.09.05 16:19)
те данные, которые нужны, вы получаете, организуя связь - мастер-дитейл, вводя параметр, отсекающих лишее. вам привели уже нужный запрос для дитейла.
← →
ANB © (2005-09-13 16:40) [15]DM.PRasx.CommandText:="SELECT * FROM PRASX INER JOIN Rasx ON PRasx.NVN=Rasx.NVN WHERE Rasx.SKLAD=:SKLAD AND Rasx.KODM=:KODM AND Rasx.DATA BETWEEN :Dat1 and :Dat2"; - сей запрос никакого отношения к мастер-детайл не имеет
Вот этого будет достаточно, если все настроить
DM.PRasx.CommandText:="SELECT * FROM PRASX where PRasx.NVN=:NVN";
Прочие условия по выборке из Rasx нужно в мастер запрос и пихать.
← →
Sigetta © (2005-09-13 18:10) [16]>[15]
Каждый раз вызыватьDM.PRasx.CommandText:="SELECT * FROM PRASX where PRasx.NVN=:NVN";
DM.PRasx.Parameters.ParamByName("NVN").Value:=DM.Rasx.FieldByName("NVN").AsInteger;
DM.PRasx.Open;
при перемещении по гриду соответствующему Rasx???
Если делать так то не нужен никакой master-detail настраивать.
Я так пробовал - ~1 сек на отображение инфы в гриде PRasx.
P.S.
Rasx - это шапка накладной
PRasx - содержимое накладной
← →
Val © (2005-09-13 19:04) [17]>Sigetta © (13.09.05 18:10)
чего-то вы недопонимаете в сути связки мастер-дитейл, похоже. попробуйте почитать что-нибудь по этому поводу. потом - перечитать данную ветку.
← →
ANB © (2005-09-14 09:55) [18]
> Sigetta © (13.09.05 18:10) [16]
NVN - ключ связи PRASX с Rasx ? Является ли NVN первичным ключом в Rasx ? Есть ли индекс по NVN в PRasx ?
Запости структуру таблиц.
ЗЫ. Странные имена таблиц для такого контекста.
ЗЫЫ. Если правильно настроить, то постоянно запихивать в кверю запрос, присваивать параметр и открывать его не надо, связка это сама сделает.
ЗЫЫЫ. Если квери сосзданы в дизайн-тайме, зачем динамически туда запросы запихивать ?
← →
Sigetta © (2005-09-14 12:14) [19]
> NVN - ключ связи PRASX с Rasx ? Является ли NVN первичным
> ключом в Rasx ? Есть ли индекс по NVN в PRasx ?
Да. Да. Составной (ID,NVN) уникально-кластерный.
Rasx
NVN int
Nom varchar(10)
Data smalldatetime
....
PRasx
ID int IDENTITY(1,1)
NVN int
Kol float
...
> ЗЫ. Странные имена таблиц для такого контекста.
Такие были еще до меня. И в чем странность?
> ЗЫЫ. Если правильно настроить, то постоянно запихивать в
> кверю запрос, присваивать параметр и открывать его не надо,
> связка это сама сделает.
правильно настроить - это выбрать detaildatasource и masterfields для PRasx?
> >ЗЫЫЫ. Если квери сосзданы в дизайн-тайме, зачем динамически
> туда запросы запихивать ?
Динамически они не пихаются.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.039 c