|
|
|
Отчёт из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, уважаемые форумцы! Вопрос к вам вот какой: Существуют таблицы - Equipment (оборудование), Stocks (склады), People (сотрудники). В каждой из них присутствуют поля по типу: ID, Name, ... . Кроме того, есть таблица Deliveries с полями: delivID, deliv_data, equipID, stockID, giv_pe_ID, take_pe_ID. При приходе оборудования на объект в неё заполняются записи с указанием ID прихода, даты прихода, а остальные поля получают значения ID из соответствующих вышеуказанных таблиц. Например: delivID deliv_data equipID kolvo stockID giv_pe_ID take_pe_ID 1 12.12.2006 1 2 1 2 3 1 12.12.2006 2 2 1 2 3 1 12.12.2006 3 2 2 1 3 1 12.12.2006 4 2 2 1 3 1 12.12.2006 5 1 1 2 3 Где значение equipID берётся из таблицы Equipment и соответствует к примеру: ID Name 1 Стойка 2 Антенна 3 Монитор 4 Свитч 5 Шкаф То же самое с полями - stockID (обозначают наименования складов), giv_pe_ID (соответствует сотруднику, отпустившему оборудование со склада), take_pe_ID (соответствует сотруднику, получившему оборудование со склада). Каким образом можно создать отчёт по таблице Deliveries, чтобы в нём вместо цифр указывалось соответствующее идентификатору название из разных таблиц? То есть, получилось нечто вроде: Номер поставки: 1 Дата поставки: 12.12.2006 Наименование Кол-во Склад Отгрузил Принял Стойка 2 Склад №1 Петров Сидоров Антенна 2 Склад №1 Петров Сидоров Монитор 2 Склад №2 Иванов Сидоров Свитч 2 Склад №2 Иванов Сидоров Шкаф 1 Склад №1 Иванов Сидоров Есть мысль, что это можно осуществить SQL-запросом из нескольких таблиц во временную таблицу с последующим составлением на её основе отчёта... А может будут и другие более резонные мысли. Одним словом, прошу подсказать, как это можно осуществить? Нужно ли связывать таблицы по индексам? Ещё один вопрос, который никак не могу для себя решить - как правильно указывать в форме использование таблицы из базы данных? 1 вариант: в событии формы LOAD пишу код: OPEN DATABASE ... USE table1 IN 1 SELECT 1 USE table2 IN 1 SELECT 2 ... 2-ой вариант: В Data Enviroment формы добавляю все нужные таблицы. 3-ий вариант: Объединённых два выше варианта, т.е. одновременно указываю и там, и там. Сразу скажу, что пробовал использовать все эти варианты. Но например в третьем варианте иногда (подчеркиваю - не всегда) система выдаёт ошибку "File is in use" для какой-либо таблицы. Как правильнее? Заранее спасибо за подсказки и помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 09:04 |
|
||
|
Отчёт из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
1) Делаешь Селектом выборку по условию в ТАБЛИЦУ. 2) В Окружении отчета Relation`ом привязываешь к ней справочники. 3) стряпаешь форму отчета 4) В Программе из которой вызываешь отчет, Делаешь Селектом выборку по условию в КУРСОР с тем же именем, что и ранее созданная таблица. Запускаешь и радуешься ... :-)) Если в окружении отчета используется таблица с алиасом, который уже есть, то фокса подхватывает существующий источник. Заново таблицу не открывает. Плюсы: На этапе разработки отчета, можно "пощупать результаты" не надо каждый раз прогонять алгоритм запроса параметров. Минусы: в дальнейшем, при корректировки отчета фокса требует временную ТАБЛИЦУ. Что бы этого избежать я ее обычно натравливаю на источник для временной таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 09:59 |
|
||
|
Отчёт из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Вопрос по пункту 2: не могу найти, как установить Relations (версия Visual FoxPro 9). В Report Data Enviroment такого вроде нет. Справочники - это, как я понял, таблицы, из которых исходя из ID в сам отчёт берётся значение поля Name? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 10:14 |
|
||
|
Отчёт из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Попробовал сделать отчёт по одной таблице Orders с полями: ordersID (номер требования) ordersDate (дата требования) equipID (ИД оборудования (N4) - в отчёте должно отображаться название оборудования из другой таблицы Equipments) stockID (ИД склада (N4) - в отчёте должно отображаться название склада из другой таблицы Stocks) give_pe_ID (ИД сотрудника (N4) - в отчёте должно отображаться ФИО из другой таблицы People) take_pe_ID (ИД сотрудника (N4) - в отчёте должно отображаться ФИО из другой таблицы People) Ничего не получилось... Появляются один цифры. Делал вот как: в Data Enviroment добавил все нужные таблицы, между ними перетянул нужный ID с главной таблицы на ID таблицы-справочника. Что я сделал неправильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 10:43 |
|
||
|
Отчёт из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Создавать Relations надо только по индексам или можно просто по полям? И ещё можно ли установить одновременное отношение нескольких полей (имена сотрудников - выдавшего оборудование и принявшего оборудование) на одну и ту же таблицу "Сотрудники". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 10:52 |
|
||
|
Отчёт из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Так, со всем вроде разобрался :) Отчёт получается. Не получается только одно - предыдущий топик: Полям - give_pe_ID и take_pe_ID главной таблицы, по которой строю отчёт, должны соответствовать ФИО из таблицы справочника People (с полями peID, Name, ...). Если задаю только одно отношение - к примеру give_pe_ID на индекс peID - ФИО отображается вместо цифр, как и должно быть. Но если добавляю второе отношение take_pe_ID к этому же индексу - облом. Получается отношение "многое - к одному". Как разрешить эту проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 11:17 |
|
||
|
Отчёт из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Ладно ... Попробую поподробней. 1) Делаешь Селектом выборку по условию в ТАБЛИЦУ. Например: Код: plaintext 2) В Окружении отчета Relation`ом привязываешь к ней справочники. Не знаю как в Базе, но на свободных таблицах Relation (связь) цепляется только к индексу. При чем справочник (дочерняя таблица) может цепляться только к одному полю. Это из-за того, что при переходе по строкам в Родительской таблице Указатель записи в автоматически перемещается дочерних таблах на соответствующую строку. А если у тебя справочник прицеплен к двум полям, то на какую строку Фокса должна встать ?!? По Этому я надо добавлять этот справочник еще раз. 3) стряпаешь форму отчета В TextBox` ах указываешь поля из СПРАВОЧНИКОВ. 4) В Программе из которой вызываешь отчет, Делаешь Селектом выборку по условию в КУРСОР с тем же именем, что и ранее созданная таблица. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 11:20 |
|
||
|
Отчёт из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
ОГРОМЕННОЕ СПАСИБО!!! Всё получилось! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 11:25 |
|
||
|
Отчёт из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Эээ... чуть не забыл - мой второй вопрос из первого топика :) Как правильно указывать в форме использование таблицы из базы данных? 1 вариант: в событии формы LOAD пишу код: OPEN DATABASE ... USE table1 IN 1 SELECT 1 USE table2 IN 1 SELECT 2 ... 2-ой вариант: В Data Enviroment формы добавляю все нужные таблицы. 3-ий вариант: Объединённых два выше варианта, т.е. одновременно указываю и там, и там. В третьем варианте иногда система выдаёт ошибку "File is in use" для какой-либо таблицы. Как правильнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 11:29 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34192134&tid=1590192]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
167ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 510ms |

| 0 / 0 |
