22.04.2002, 19:18 | #1 |
Moderator
|
Тип связи
Подскажите пожалуйста, как в Аксапте можно отобразить в Grid'е информацию из двух таблиц между которыми связь один(или много) к одному (или нулю).
Поясню: Есть таблица: А: id : string name : string Теперь хочется некоторым строкам этой таблицы (но не всем) сопоставить текстовое примечание. Можно просто добавить еще одно поле в эту таблицу, но в силу некоторых причин хочется вынести эту информацию в отдельную таблицу. Делаю так: Создаем тип данных Тип : String. Relation == A.id Создаем таблицу Б: id :Тип txt : String То есть каждой строке из А может соответствовать примечание в Б (на самом деле даже несколько - но это уже нежелательный эффект, на который пока я стараюсь не обращать внимание :-)), а может и не соответствовать ни одного. Теперь необходимо отобразить на форме следующую информацию: А.id A.name Б.id Б.txt Grid.DataSource = Б A.JoinSource = Б А.LinkType = InnerJion Всегда это помогало. А теперь столкнулся с ситуацией, когда некоторым строкам в А нет соответствующих записи (ей) в Б и они соответственно не выводятся. Как поступить в этой ситуации ? а) как задать отношения между таблицами, чтобы все связи из А отображались на Grid'e б) как в Аксапте задается связь между таблицами один к одному (нулю). |
|
22.04.2002, 21:29 | #2 |
Участник
|
стандартно должен работать тип связи OuterJoin.
ЕСЛИ же не работает И ты используешь форму, которую создавал не сам, ТО смотри в код стандартной формы. Там скорее всего в executeQuery query пересоздается и тип связи переустанавливается. |
|
23.04.2002, 11:38 | #3 |
Moderator
|
Цитата:
mazzy
стандартно должен работать тип связи OuterJoin. ЕСЛИ же не работает И ты используешь форму, которую создавал не сам, ТО смотри в код стандартной формы. Там скорее всего в executeQuery query пересоздается и тип связи переустанавливается. Попробую приложить файл проекта. Если это Вас не затруднит, не могли бы Вы его посмотреть и объяснить где и что мне нужно поправить. |
|
24.04.2002, 10:17 | #4 |
Участник
|
хорошо. взял.
если можно, посмотрю вечером. |
|
24.04.2002, 10:55 | #5 |
Moderator
|
Большое спасибо.
|
|
25.04.2002, 13:06 | #6 |
Участник
|
Посмотрел. У меня связывает. Примечания показывает.
Если к одной записи несколько примечаний, то показывает несколько примечаний. Надо только перехватывать редактирование записей и делать refresh формы. А так все нормально. Что можно было бы добавить - это дать тип tbl1.id = dem_t Но и без этого работает. |
|
25.04.2002, 16:45 | #7 |
Moderator
|
Цитата:
Примечания показывает.
Если к одной записи несколько примечаний, то показывает несколько примечаний. У меня: tbl1: 1 one 2 two 3 three tbl2: 1 prim1 2 prim2 в форме на Grid: 1 one prim1 2 two prim2 А МНЕ НАДО: 1 one prim1 2 two prim2 3 Three |
|
25.04.2002, 17:33 | #8 |
Moderator
|
Я решил эту проблему следующим образом:
1. В таблицу tbl2добавил метод: static str cd(str 100 i) { tbl2 tb; select * from tb where tb.id == i; return tb.txt; } 2. В tbl1 добавил следующий метод: display str clr() { return tbl2::cd(this.id); } 3. Добавил в Grid текстовое поле: DataSource = tbl1 DataMethod = clr Это работает, но уж больно все это сложнои неудобно (на мой взгляд). Может есть более простые варианты ? |
|
25.04.2002, 19:10 | #9 |
Участник
|
а.... ты в этом смысле...
дык, у тебя в фоме связь вывернута наизнанку. |
|
25.04.2002, 20:20 | #10 |
Участник
|
Для Кучи.
Смотри: таблицы table1 (id,table2_id), table2 (id,name) table1 (1,NULL) (2,1) (3,NULL) (4,2) (5,3) table2 (1,'Вася') (2,'Петя') (3,'Гога') (4,'Степа') Select table1.id,table2.name from table1 left outer join table2 on table1.table2_id = table2.id получится 1,NULL 2,'Вася' 3,NULL 4,'Петя' 5,'Гога' это левый outer join Select table1.id,table2.name from table1,table2 where table1.table2_id = table2.id 2,'Вася' 4,'Петя' 5,'Гога' типичный пример inner joinа |
|