Форум » Clipper » Как организовать объединение двух таблиц для просмотра » Ответить

Как организовать объединение двух таблиц для просмотра

Softlog86: Имеется 2 таблицы (.DBF) . Обе имеют ключевое поле 'TEMP' C:20 . Остальные поля - различаются . Задача - организовать просмотр этих таблиц как-бы в одной . Поиск и сортировка на экране должна происходить как-будто обе эти таблицы объединены в один файл ...... Таблицы - SHARED и находятся на сервере . Индексные файлы - .CDX

Ответов - 12

Dima: количество записей в них одинаково ?

Haz: Softlog86 пишет: организовать просмотр этих таблиц как-бы в одной три варианта на выбор 1 - временная база ( склейка физическая ) тут полный функционал возможен ( ПОИСК и СОРТИРОВКА ) Если записей не много - то это выход 2 - установить реляцию , по первой таблице бровс в который натыкать колонок из второй таблицы ( с соответствующим блоком выборки ) тут думаю ограничения на сортировку Slave таблицы 3 - Использовать любой RDD поддерживающий SQL ( запрос в одну строчку ). тут полный функционал возможен ( ПОИСК и СОРТИРОВКА )

Sergy: SET RELATION TO table1->temp INTO table2 Далее Browse/DBEDIT с полями: table1->p1, table1->p2, table2->s1, table2->s2 ...


Softlog86: Мне нужно чтоб данные из поля TEMP обоих бах были объединены в один список и этот список индексирован UPPER(TEMP) .....

Haz: так что из Softlog86 пишет: Задача - организовать просмотр этих таблиц как-бы в одной . или чтоб данные из поля TEMP обоих бах были объединены в один список если второе - то во временную базу

Softlog86: Данные из этого строкового поля 'объединить' только для просмотра на экране ...... Но сортировано по UPPER(TEMP) .... Видимо кроме перелива во временную базу никак ....

Haz: Softlog86 пишет: Видимо кроме перелива во временную базу никак .... можно в массив, записей то сколько ?

nick_mi: Sergy пишет: SET RELATION TO table1->temp INTO table2 Если первая база открыта с индексом, данные ведь будут отсортиртиваны по полю ТЕМР, или я чего-то не понял, нужна еще какая-то дополнительная сортировка?

SergKis: Softlog86 Попробуйте так: dbCreate('temp0', ({'TEMP', 'C', ..., 0}}) use temp0 alias TMP0 append from fileTemp1 append from fileTemp2 index on upper(TEMP) to temp0 UNIQUE go top use fileTemp1 alias TMP1 use fileTemp2 alias TMP2 sele TMP0 set relation to TEMP into TMP1 set relation to TEMP into TMP2 go top do while ! eof() ? TEMP, TMP1->FieldName, TMP2->FieldName, ... skip enddo // если надо др. сортировки индексы, делайте локально index on TMP1->FieldName to tmp0_1 index on TMP2->FieldName to tmp0_2

SergKis: PS. если схема подходит, то правильнее отрабатывать ? TEMP, iif(TMP1->(found()), TMP1->FieldName, ""), iif(TMP2->(found()), TMP2->FieldName, "")

petr707: index on upper(TEMP) to temp0 UNIQUE Это же не гарантирует отображение обеих из двух записей , если ключ TEMP есть в обоих таблицах. Будет показан набор полей только одной из таблиц и пустая запись из другой, разве нет ? При совпадении ключа нужен не append , а replace

SergKis: petr707 файл temp0 проиндексирован UNIQUE, т.е. мы имеем одну запись (физически 2-е) и sele TMP0 set relation to TEMP into TMP1 set relation to TEMP into TMP2 связывают ОДНУ запись temp0 с двумя разными таблицами (на сервере) по полю TEMP, т.е. нам доступны как поля TMP1, так и поля TMP2, при условии found() == .T. для каждой из таблиц.



полная версия страницы