Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1128270415
sam07
2005-10-02 20:26
2005.10.23
Общие вопросы


9-1117807991
D-Man
2005-06-03 18:13
2005.10.23
глюк с TGA в OpenGL


3-1126680925
erika
2005-09-14 10:55
2005.10.23
Обработка матрицы (матрица представлена в виде расчетной View)


14-1128025797
Mixer
2005-09-30 00:29
2005.10.23
HELPPPPP!!!


1-1127899053
UnDISCOvery
2005-09-28 13:17
2005.10.23
Менеджер проектов - список модулей по алфавиту. Как?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский