Data bend
Есть дата бенд, там необходимо поместить несколько ячеек с результатами запросов, но дата бенд можно подключить только к одному дата сорсу, а там должны быть результаты нескольких запросов. Как сдлать не пойму. Кто знает подскажите!
Комментарии
Memo1.Text := '[IBXQuery1."NAME"]';
Memo2.Text := '[IBXQuery2."Phone"]';
и т.д.
А лучше соединить этот запрос Left join - ом
в params прописываешь IDNAME=ADOQuery."ID"
например:
В первом запросе пишешь: SELECT KOD,NAME FROM TABLENAME
Во втором запросе выставляешь мастером 1 запрос
а в селекте прописывваешь примерно так
SELECT PHONE FROM TABLEPHONE WHERE KODNAME=:KOD
А в params второго запроса, параметру KOD напротив пропишешь ADOQuery1."KOD"
примерно так.
Далее обрабатываем событие и заполняем данными из ворого запроса (ADOQuery2).
Можно написать запрос таким образом
SELECT T1.NAME, T2.PHONE
FROM TABLE1 T1
LEFT JOIN TABLE2 T2 ON T1.KOD=T2.KODNAME
тогда получиться 1 запрос и данные привязанны друг к другу.
но если конечно тебе не важно связанны они или нет то предидущий вариант тебе подойдет...
Для дрегих запростов (где первый запрос ADOQuery1 выставлен мастером) в селектк пишу свой запрос и в конце просто добавляю WHERE KODNAME=:KOD? А в Params этого (подчененного) запроса пишу для KOD его тип и ADOQuery1."KOD" в этом случае вылазиет ошибка того что параметр не определен. Может я что то не так делаю?
В первом запосе все таки KOD, NAME(если ты написал в первом запросе KODENAME, то тогда в подчиненых запросах в params полю KOD присваивай ADOQuery1."KODENAME"), под полем код подразумеваеться поле по которому связаны две разные таблицы. Тип можешь не выставлять Fast Report сам определит какой тип.
Я делаю так(Правда я работаю с IBXQuery)
Мой запроc IBXQueryZAK
в селекте у него написал SELECT F_ID FROM ZAK WHERE KOD=100
второй запрос IBXQueryZAK_
в селекте у него пишу
Select NAME FROM ZAK_ WHERE PARENT=:ID
в params я ID присваиваю IBXQueryZAK."F_ID" мастером выставляю IBXQueryZAK и все у меня работает нормально!
в ADOQuery1 в SQl пишу
SELECT top 10 LF
FROM A INNER JOIN
RAD ON A.ID = RAD.ID_A INNER JOIN
P_RAD ON RAD.ID = P_RAD.ID_RAD
В ADOQuery2 делаю мастером ADOQuery1 и в SQL пишу:
SELECT LTRIM(RIGHT(A.Z, 4)) + '\' + LTRIM(STR(A.D) + '\' + A.I) AS Expr1
FROM A INNER JOIN
RAD ON A.ID = RAD.ID_A INNER JOIN
P_RAD ON RAD.ID = P_RAD.ID_RAD
WHERE LF=:COD
И там же (в ADOQuery2) в Params: COD <data type> ADOQuery1."LF"
Сам Master Data прикрплен к ADOQuery1.
В итоге Expr1 выводится везде но только его первре значение.
Может что то не так? Подскажите в чем моя ошибка пожалуйста
А почему нельзя сделать так... Написать один запрос...
Пробуй написать:
ADOQuery1.SQL
SELECT top 10 A.LF, (LTRIM(RIGHT(A.Z, 4)) + '\' + LTRIM(STR(A.D) + '\' + A.I)) AS Expr1
FROM A
INNER JOIN RAD ON A.ID = RAD.ID_A
INNER JOIN P_RAD ON RAD.ID = P_RAD.ID_RAD
Две-три строчки кода.
У меня так получилось:
Есть запрос m_pDataQuery, на нем висит MasterData1.
В MasterData1 2 MEMO. Первое (Memo1) заполняется из m_pDataQuery (поставил значнеие в дизайнере отчета). А второе (Memo2) из дополнительного запроса ADOQuery1 через событие OnBeforePrint того самого MasterData вот так: И все работает четко.
Я вам советую попробовать создать простенький отчет с нуля. И не играться особо настройками. Тогда поймете, где ошибка.
Очень интересно!
Надо только постоянно формировать запрос (я про второй select) и его вызывать на событии OnBeforePrint.
Тогда каждый раз запрос будет возвращать нужные значения.
Но этот вариант мне кажется немного сложнее.