Страница 1 из 1

MapBasic cвязка нескольких таблиц

Добавлено: 13 мар 2015, 09:28
Dartix
У меня задача написать на MapBasic программку, решающую следующую задачу.
Есть таблицы без графических объектов q1, q2, q3, q4 в каждой из которых имеется по две колонки (kod, name)
Есть таблица q в которой колонки (kodq1, nameq1, kodq2, nameq2, kodq3, nameq3, kodq4, nameq4)
Необходимо занести значения в таблицу q из колонок kod и name таблицы q1 в колонки kodq1 и nameq1, из колонок kod и name таблицы q2 в колонки kodq2 и nameq2,из колонок kod и name таблицы q3 в колонки kodq3 и nameq3,из колонок kod и name таблицы q4 в колонки kodq4 и nameq4. Таким образом чтобы все значения находились рядом, т.е. количество строк таблицы q должно равняться количеству строк самой большой таблицы (q1, q2, q3 или q4), а не сумме строк этих таблиц.
Подскажите как это можно сделать

Re: MapBasic cвязка нескольких таблиц

Добавлено: 13 мар 2015, 18:59
ginpetr
1. Добавить записи самой большой таблицы в q с помещением содержимого в соответствующие колонки.
2. Ей и трём оставшимся добавить целочисленные колонки num и через "обновить таблицу" заполнить их выражением rowid.
3. Через "обновить таблицу" заполнить колонки q соответствующим содержимым трёх таблиц с объединением по колонкам num.

Почему-то мапинфо не объединяет сразу по rowid, поэтому нужно её значения сперва записать в " обычную" колонку.

Re: MapBasic cвязка нескольких таблиц

Добавлено: 14 мар 2015, 02:34
Boris
Я вот только после ответа заинтересовался - а что мелкие таблицы никак между собой не связаны?
Я все равно спрошу перед ответом - а какой смысл в такой таблице?
А теперь собственно ответ: в заголовке указан MapBasic, если речь идет о языке программирования, то видимо, такое заполнение делается стандартными командами:
1) мелкие таблицы перебираются через FETCH;
2) а данные в большую таблицу вносятся стандартным INSERT с 8-ь значениями - по 2 от каждой таблицы.
Структуру большой таблицы проще создать заранее, но можно и ее создать через MB.

Re: MapBasic cвязка нескольких таблиц

Добавлено: 15 мар 2015, 08:13
Dartix
Смысл таблиц и маленьких и составной прост - это справочники для другой MB программы, они все уже созданы и имеют определенную структуру.
Мне нужно сначала определить какая из таблиц самая большая, чтобы добавлять её через "добавить запись". Как это сделать в MB? Таблиц огромное множеств и составных и маленьких.
Boris, >а данные в большую таблицу вносятся стандартным INSERT с 8-ь значениями - по 2 от каждой таблицы.
Так INSERT будет добавлять записи от каждой таблицы?!?
ginpetr, Спасибо

Re: MapBasic cвязка нескольких таблиц

Добавлено: 15 мар 2015, 12:28
ginpetr
Найти самую большую таблицу можно перебором в цикле номеров таблиц с 1 до numtables() - могу ошибаться с написанием. Количество строк tabeleinfo(tablename,8).
Если на мапбейсике, то, действительно, придется через цикл и insert.
Уж не классификатор для территориального планирования делаете, случайно? А то у меня есть готовые таблицы...

Re: MapBasic cвязка нескольких таблиц

Добавлено: 15 мар 2015, 13:05
nikomuro
Классификатор для территориального планирования... уж не по 19 -му ли приказу?

Re: MapBasic cвязка нескольких таблиц

Добавлено: 18 мар 2015, 21:19
Dartix
Спасибо, всё получилось.
Нет делаю программу для лесной сферы)