Итак, всем здрасте.
Присоединюсь к теме моего коллеги. Работаем вместе, топик писался сообща, но взгляды наши чуть-чуть различны. Суть не в этом. Вот мой вариант поста.
Уважаемые
"члены клуба любителей MapBasic", есть проблема.
Я в этот клуб не вхож (мы тут всё больше по экологии

), потому обращаюсь за помощью к вам.
Исходные данные:
MapInfo Proff 10.5 ru
Windows XP SP3
MapBasic 8.0 ru, MapBasic 10.5 eng
Объясню суть.
1. В рабочем наборе имеется N-ое количество однотипных по структуре таблиц (где N - количество от 3 до 10)
Для примера и отработки методики созданы таблицы:
one.tab, two.tab, tree.tab
2. Структура таблиц ПОЛНОСТЬЮ идентична, т.е. совпадает вплоть до размера символьных полей.
Для примера - структура таблиц:
id - символьное (обозначает "год съемки")
Описание - символьное, поле геолинка, указывающее на растр.
Как Вы понимаете, таких растров может быть много, друг-друга могут перекрывать, да и MI со всеми ними еле ворочается/умирает. Т.е. изначально в рабочем наборе сами растры НЕ открыты, а могут быть открыты необходимые из них в результате запроса.
3. По условию задачи при сохранении на диске таблицы (one two tree) в принципе
НЕ МОГУТ быть объединены в одну.
4. Стоит следующая задача: По запросу выделить во всех таблицах объекты, удовлетворяющие условию (например, год съемки - id)
5. По результату запроса сформировать временную таблицу (например,
common.tab), где, естесствено, будут объекты, удовлетворяющие вышезаданному условию ("год съемки = 2014"). Таблица common является временной, на диске может и не сохраняться, только на время сеанса. Таблица common видна в списке слоёв, но не активна, дабы не мешать дальнейшей работе. (Последнее, впрочем, не проблема сделать и ручками)
6. Ну, а дальше все просто: открываем по geolink'ам необходимые объекты из "первичных" таблиц (которых N-ое количество - см. выше), т.е. открываем не все растры, а только те, что нужны. Решаем проблему с загрузкой памяти, MI - живёт
Видимые пути реализации:
1. Пробовали сию процедуру осуществить посредством SQL-запросов - не прокатывает. (ИМХО, в силу нехватки знаний, ну или ветра с Севера...

)
2. Есть возможность "слияния" таблиц по-одиночке (создали таблицу common.tab и туда сливаем все N таблиц).
В окне MapBasic'а: (для таблицы
one ->
common)
Create Object As Union From one Into Table common Group by id Data id=id,Описание=Описание
Вариант на "айс", слишком много ручных операций, для специалиста может и подойдет, но муторно и долго с учётом не одного запроса, а нескольких. Для конечного пользователя - однозначно нет.
3. Пробовали через операцию "Добавить записи в таблицу"
В окне MapBasic'а: (для таблицы
tree ->
common)
Insert Into common ( COL1, COL2) Select COL1, COL2 From three
Та же "ручная" проблема.
Думается, что вариант решения лежит где-то в развитии пути №2, т.е. составлении
некой программки на MB,
автоматизирующей все операции и с передачей необходимого параметра запроса (например, год съёмки - в данном примере - поле id)
Возможно выделение таблиц для запроса в "списке открытых таблиц".
Возможно выделение "первичных" таблиц в окне "управления слоями". Но здесь следующая "засада": у КАЖДОЙ из первичных таблиц существует тематика, т.е. количество слоёв в окне "управления слоями" возросло как минимум в 2 раза.
Естественно, сами исходные таблицы (которые типа one-two-tree) содержат не 2 поля (там их всего 14 - в основном, символьные, и поле Дата_съемки), но, ИМХО, суть от этого не меняется.
Кстати, пока писал вопрос, родилась ещё одна мысль.
Сделать временную таблицу (в данном случае - common) при открытии набора. Т.е. слить в нее (пока пустую) все открываемые "первичные" таблицы. Естессно, такая временная таблица в конце сеанса не сохраняется. "Засада": в наборе открываются и другие таблицы, не участвующие в запросе/выборке и имеющие другую структуру (например, дорожная сеть, гидрография и т.д. и т.п.). Соответсвенно, эта временная таблица должна быть сформирована ТОЛЬКО из этих "первичных" (которые могут открываться в наборе первыми, до открытия остальных). Ну вот как-то так... Вариант вроде как реализовали тупым слиянием таблиц 1-3 в common еще до открытия в карте, но в самом рабочем наборе такая структура не сохраняется. Да и по отсутствию какого-либо внятного интерфейса - НЕ ПОДХОДИТ.
Самый "айшный" вариант с
MBX-прожкой. Нам он нравится больше. Тем более, есть перспектива развития соответствующего интерфейса с выбором запросов по разным полям...
Ну вот, в принципе и всё. Кто поможет - тому
ВЕЧНЫЙ РЕСПЕКТ И УВАЖУХА!!!
Да, и очень бы хотелось иметь исходник на MB, уж его от-mbx-овать мы как-нибудь сможем...
P.S. Не пинайте за столь пространную "речь", я понимаю, что надо приступать к изучению MB, но (см. выше) "мы тут всё больше по экологии"... да и старый я уже...
P.P.S. Варианты с БД (MS SQL, MS Access, Oracle и т.д.) могут быть рассмотрены, но НАМНОГО позже. В данный момент - есть конкретная маленькая такая задачка, ИМХО, которую вполне решить средствами MapBasic'а. Да и в целях ликвидации нашей mapвасиковой безграммотности...