Научите делать JOIN таблиц в MAVBrowse
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Научите делать JOIN таблиц в MAVBrowse
Люди! Подскажите как нужно делать соединение таблиц?
У меня в словаре есть 2 таблицы Factory и Area, никакие связи между таблицами в словаре не указаны.
Нужно в Browse показать Area.Name из Area по Factory.KodArea
Необходимо ли в таком случае в словаре прописывать связи и создавать соответствующие индексы?
В File Shematic я просто добавил к Factory таблицу Area и в настройке JOIN написал: Fac:Kodarea = Are:Kod
Однако при загрузке Browse получаю сообщение об ошибке и в трассе не вижу своего JOIN вообще:
9772064 Open cursor
9772064 Read all rows for cursor
Binding field 1 A."flag" = 1
9772064 Parsing Cursor : SELECT A."prizn",A."kod",A."name",A."okved",A."adres",A."kodarea",A."phone",A."phone2",A."kodgor",B."name" FROM FACTORY A,AREA B WHERE A."flag"=? Return Code : SQL_ERROR
Time Taken: 17.42 sec.
Error : Out of memory while reading tuples.;
Error while executing the query [HY000]
9772064 Close cursor
Time Taken: 2.27 sec.
9772064 Free cursor
Disconnect [Connection 'PostgreSQL UNICODE'] Return Code : 0
Возможно ли что-то сделать подобное такому:
SELECT A."prizn",A."kod",A."name",A."okved",A."adres",A."kodarea",A."phone",A."phone2",A."kodgor",B."name"
FROM FACTORY A LEFT OUTER JOIN AREA B ON A."kodarea" = B."kod" WHERE A."flag"=?
У меня в словаре есть 2 таблицы Factory и Area, никакие связи между таблицами в словаре не указаны.
Нужно в Browse показать Area.Name из Area по Factory.KodArea
Необходимо ли в таком случае в словаре прописывать связи и создавать соответствующие индексы?
В File Shematic я просто добавил к Factory таблицу Area и в настройке JOIN написал: Fac:Kodarea = Are:Kod
Однако при загрузке Browse получаю сообщение об ошибке и в трассе не вижу своего JOIN вообще:
9772064 Open cursor
9772064 Read all rows for cursor
Binding field 1 A."flag" = 1
9772064 Parsing Cursor : SELECT A."prizn",A."kod",A."name",A."okved",A."adres",A."kodarea",A."phone",A."phone2",A."kodgor",B."name" FROM FACTORY A,AREA B WHERE A."flag"=? Return Code : SQL_ERROR
Time Taken: 17.42 sec.
Error : Out of memory while reading tuples.;
Error while executing the query [HY000]
9772064 Close cursor
Time Taken: 2.27 sec.
9772064 Free cursor
Disconnect [Connection 'PostgreSQL UNICODE'] Return Code : 0
Возможно ли что-то сделать подобное такому:
SELECT A."prizn",A."kod",A."name",A."okved",A."adres",A."kodarea",A."phone",A."phone2",A."kodgor",B."name"
FROM FACTORY A LEFT OUTER JOIN AREA B ON A."kodarea" = B."kod" WHERE A."flag"=?
- StillZero
- Ветеран
- Сообщения: 454
- Зарегистрирован: 06 Июль 2005, 2:17
- Откуда: Хабаровск
- Контактная информация:
Re: Научите делать JOIN таблиц в MAVBrowse
связи в словаре я не делаю
в индексах особой необходимости нет, кроме primary
последний параметр TRUE/FALSE - как соединять по JOIN или по LEFT JOIN
в индексах особой необходимости нет, кроме primary
последний параметр TRUE/FALSE - как соединять по JOIN или по LEFT JOIN
Все сайты закрыты...
Re: Научите делать JOIN таблиц в MAVBrowse
для такой связи ключи в DCT не требуются, да если бы и потребовался, всё равно в проге они не генерятся и дополнительной нагрузки на код нет, так что два варианта:samo_let писал(а): Возможно ли что-то сделать подобное такому:
SELECT A."prizn",A."kod",A."name",A."okved",A."adres",A."kodarea",A."phone",A."phone2",A."kodgor",B."name"
FROM FACTORY A LEFT OUTER JOIN AREA B ON A."kodarea" = B."kod" WHERE A."flag"=?
1. с использованием связей из DCT, всё генерится штатно
2. ручками, сконструируй Browse по эти двум файлам, второй прицепить можно без связи, в BRWX:Browse.Where методе сам пропиши требуемую связь:
Код: Выделить всё
SELF.Select.Relation(FACTORY:kodarea,AREA:kod,0) ! третий параметр либо TRUE либо FALSE, в зависимоси какая связь нужна LEFT или нет
Код: Выделить всё
SELF.Select.BindParameter(File2:Field2,10)
SELF.Select.Relation(File2,SELF.Select.Field(File2:Field) & '=' & SELF.Select.Field(File1.Field) & ' and ' & SELF.Select.Field(File2:Field2) & '=?',0) ! третий параметр аналогично.
Re: Научите делать JOIN таблиц в MAVBrowse
Еще вопрос:
Возможно ли делать соединение с "временными" таблицами?
Например, мне бы хотелось отметить в браузе предприятия, с которыми заключены договора иконкой или цветом.
Что-то вроде такого:
SELECT A."kod",A."name",A."adres",B."fcount"
FROM FACTORY A
left outer join (Select kodfac as kodfac, count(*) as fcount from Contract group by kodfac) as B
on A."kod" = B."kodfac"
Как что-то подобное реализовать в MAV Browse?
Возможно ли делать соединение с "временными" таблицами?
Например, мне бы хотелось отметить в браузе предприятия, с которыми заключены договора иконкой или цветом.
Что-то вроде такого:
SELECT A."kod",A."name",A."adres",B."fcount"
FROM FACTORY A
left outer join (Select kodfac as kodfac, count(*) as fcount from Contract group by kodfac) as B
on A."kod" = B."kodfac"
Как что-то подобное реализовать в MAV Browse?
- StillZero
- Ветеран
- Сообщения: 454
- Зарегистрирован: 06 Июль 2005, 2:17
- Откуда: Хабаровск
- Контактная информация:
Re: Научите делать JOIN таблиц в MAVBrowse
вот эту часть
выноси в вьюху, вьюху в словарь как обычную таблицу и далее join по накатанной
если кста не нужно считать количество, а просто знать наличие, то лучше юзать exist
Код: Выделить всё
Select kodfac as kodfac, count(*) as fcount from Contract group by kodfac
если кста не нужно считать количество, а просто знать наличие, то лучше юзать exist
Все сайты закрыты...
Re: Научите делать JOIN таблиц в MAVBrowse
да так же как и с обычными, в качестве имени таблицы закрепляй !глобальную переменную и перед использованием такой табилицы инициализируй правильно эту переменную, если её значение всегда неизменно, то можно и без неё, этот волшебный SELECT прописать в DCT в Full path name, но надо не забывать про префиксы, такая таблица в File Schematic должна быть второйsamo_let писал(а):Еще вопрос:
Возможно ли делать соединение с "временными" таблицами?
Например, мне бы хотелось отметить в браузе предприятия, с которыми заключены договора иконкой или цветом.
Что-то вроде такого:
SELECT A."kod",A."name",A."adres",B."fcount"
FROM FACTORY A
left outer join (Select kodfac as kodfac, count(*) as fcount from Contract group by kodfac) as B
on A."kod" = B."kodfac"
Как что-то подобное реализовать в MAV Browse?
Re: Научите делать JOIN таблиц в MAVBrowse
Спасибо.
Про вьюху - это я догадывался, только не хотелось бы на каждый "чих" заводить в словаре таблицы. Решение с записью селекта в имени таблицы мне кажется более привлекательным, т.к. такую таблицу можно потом еще как-нибудь использовать "в мирных целях".
Только в инициализации окна-брауза пришлось написать селект с алиасом
GLO:SQL_Table = '(SELECT KODFAC AS FKOD, COUNT(*) AS FVALUE FROM CONTRACT GROUP BY KODFAC) AS T '
А уже позже - перед соединеним таблиц - без алиаса, т.к. там свой алиас назначается
GLO:SQL_Table = '(SELECT KODFAC AS FKOD, COUNT(*) AS FVALUE FROM CONTRACT GROUP BY KODFAC) '
SELF.Select.Relation(FACTORY:KOD, T_DUMMY:FKOD, 0)
Но это уже детали
Про вьюху - это я догадывался, только не хотелось бы на каждый "чих" заводить в словаре таблицы. Решение с записью селекта в имени таблицы мне кажется более привлекательным, т.к. такую таблицу можно потом еще как-нибудь использовать "в мирных целях".
Только в инициализации окна-брауза пришлось написать селект с алиасом
GLO:SQL_Table = '(SELECT KODFAC AS FKOD, COUNT(*) AS FVALUE FROM CONTRACT GROUP BY KODFAC) AS T '
А уже позже - перед соединеним таблиц - без алиаса, т.к. там свой алиас назначается
GLO:SQL_Table = '(SELECT KODFAC AS FKOD, COUNT(*) AS FVALUE FROM CONTRACT GROUP BY KODFAC) '
SELF.Select.Relation(FACTORY:KOD, T_DUMMY:FKOD, 0)
Но это уже детали