Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

65SUPRU

.pdf
Скачиваний:
13
Добавлен:
13.02.2015
Размер:
6.17 Mб
Скачать

Границы объектов в пространственных запросах к SpatialWare

Для прямого доступа (Live Access) к SpatialWare 4.5 существуют некоторые

ограничения:

Команда SELECT FROM TABLE WHERE OBJECT WITHIN SELECTION исполняется не полностью.

Существуют проблемы при загрузке таблицы прямого доступа без кýширования (LIVE NO CACHE):

Производительность низкая.

При удалении записей структура таблицы не упаковывается, чем вызываются сложности при далüнейшем выборе объектов и их подписывании.

При выводе в отдельном окне Карты результатов выбора появляется пустое окно.

Границы объектов в пространственных запросах к SpatialWare

Для обоих типов таблиц удаленной базы данных – (связанных и в прямом доступе) пространственные объекты из баз данных SpatialWare и Oracle Spatial по пространственному запросу передаются в двоичном виде как границы. Это изменение касается всех реализаций SpatialWare – для Oracle, Informix, DB2 и для Oracle Spatial. Раньше передавалось строковое представление. Из(за ограничений на длину строки сложность графического объекта могла иметь ограничения. Передача пространственных объектов из баз данных в виде границ снимает эти ограничения.

Строка, описывающая пространственный объект, будет храниться в файле

.tab и восстановление в представление в виде границ произойдет при последующем открытии этой таблицы. Здесь используется библиотека SpatialWare SPW.lib.

Создание первичного индекса для удаленной таблицы

Существует три способа создания уникального (первичного) индекса для

удаленной таблицы, используя MapInfo.

Примените программу BUILDSQL.MBX с помощью команд ФАЙЛ > ЗАПУСТИТЬ ПРОГРАММУ MAPBASIC, которую можно найти в подкаталоге TOOLS из каталога MAPINFO.

127

Создание первичного индекса для удаленной таблицы

Используя режим Вручную в диалоге “Открыть таблицу ODBC”, введите запрос: CREATE UNIQUE INDEX новое_имя_индекса ON имя_таблицы (колонка_индекса)

Откройте окно MapBasic и введите следующие команды MapBasic:

DIM hdbc as integer (enter) DIM stmt as integer (enter)

hdbc=Server_Connect(”QELIB”,”DBMS=remote database name”,”DLG=1”)

128

Производительность при прямом доступе к большим таблицам СУБД

stmt=Server_Execute(hdbc,”CREATE UNIQUE INDEX new–index– name ON table–name(index–column)”)

Производительность при прямом доступе к большим таблицам СУБД

Отêрытие большой таблицы (более четâерти милиона записей) в режиме прямого доступа к СУБД требует много времени. Даже если Вы показываете в окне

карты небольшое количество записей, вся процедура может занять несколько минут.

Большая часть времени тратится на подсчет числа записей в таблице и их сортировку по первичному ключу. MapInfo использует внутренний явный счетчик. Для того чтобы запретить MapInfo производить избыточный пересчет записей на статичных таблицах, была разработана новая программа Счетчик записей таблицы СУБД, использование которой практически убирает начальную задержку открытия таблицы. Эта программа высчитывает полное количество записей в таблице и полученное число сохраняет в каталоге карт MapCatalog.

Для того чтобы можно было использовать эту программу, структура существующего каталога карт MapCatalog должна быть изменена. Каталог карт MapCatalog должен иметь колонку целочисленных значений с именем NUMBER_ROWS. Такую колонку можно создать, используя средство SQL Вашей базы данных, с помощью которого необходимо выполнить следующее предложение, добавлющее колонку:

ALTER TABLE MAPINO.MAPINFO_MAPCATALOG

ADD NUMBER_ROWS NUMBER

При установке MapInfo Professional 6.5, программа Easy Loader добавит колонку с именем NUMBER_ROWS при создании каталога карт MapCatalog.

129

Производительность при прямом доступе к большим таблицам СУБД

Для того чтобы выполнить эту программу из MapInfo Professional 6.5, используйте пункт меню ПРОГРАММЫАТАЛОГ ПРОГРАММ. Установите флажок ЗАГРУЗИТЬ напротив программы Счетчик записей таблицы СУБД, и нажмите OK. Эта программа появится в меню ПРОГРАММЫ. Чтобы использовать Счетчик записей таблицы СУБД :

1.Выберите ПРОГРАММЫ>CÓÁÄ MIROWCNT. Появится диалог "CУБД Cчетчик записей".

2.Укажите подключение к базе данных, имя владельца и имя таблицы.

3.Нажмите OK. Записи в таблице будут пересчитаны, и значение будет сохранено в каталоге карт MapCatalog.

Ограничения

Этот метод определения числа записей в таблице не применим ко всем таблицам. Он работает на больших таблицах, в которых число записей обычно остается стабильным, то есть уничтожение записей и создание новых не происходит регулярно.

Большая таблица ( это таблица имеющая не менее четверти миллиона записей или любая таблица, открытие которой методом прямого доступа занимает много времени.

Если число записей, хранящееся в каталоге карт MapCatalog, отличается от действительного количества записей в таблице, возникнут проблемы. На карте будут показаны все объекты этой карты, но другие представления могут обрабатываться неверным образом. Например,:

Число записей в окне списка будет ошибочным.

Предложение MapBasic для перехода к нужной записи по счетчику приведет к неправильной записи.

130

Ввод SQL]запросов вручную

Тематические карты, особенно построенные по индивидуальным зíачениям будут не корректными.

Ввод SQL]запросов вручную

При открытии таблицы СУБД можно использовать режим ввода SQL(запроса

Вручную с помощью следующего диалога:

Этот диалог позволяет пользователю составлять намного более сложные, чем стандартные, запросы. Вызов этого диалога завершает составление и обработку стандартной процедуры генерации запроса (нет возможности сохранить для дальнейшего использования полученный стандартный запрос). Нажатие кнопки OK приводит пользователя к последнему шагу диалога “Открыть таблицу СУБД”.

Для того, чтобы набрать многострочный отформатированный запрос, примените следующее:

Для перехода к новой строке нажмите ENTER.

Нажмите CTRL+ TAB для того, чтобы вставить символ табуляции.

Используйте буфер обмена: CTRL+ X для команды ВЫРЕЗАТЬ, CTRL+ C для команды КОПИРОВАТЬ и CTRL+ V для команды ВСТАВИТЬ.

131

Запросы к таблицам удаленных БД с помощью BUILDSQL.mbx и их создание

OK

Переход к последнему шагу диалога.

Отмена

Отмена запроса. Возвращает к тому шагу диалога, из которого

 

был вызван режим ввода запроса Вручную.

Открыть

Нажатие этой кнопки позволяет загрузить запрос, который был

 

сохранен в файле. Открывает отдельный диалог,

 

обеспечивающий доступ к существующим файлам,

 

содержащим предложения SQL (*.sql файлы). Форматирование

 

файлов сохраняется.

Сохранить

Нажмите эту кнопку для того, чтобы сохранить предложение

 

SQL в файле для использования позже. Запускает диалог

 

“Сохранить файл SQL(запроса”. Таким образом можно

 

сохранять составленные запросы или изменения в

 

существующих предложениях. После сохранения

 

форматирование остается неизменным.

 

После сохранения SQL(предложение появляется в списке

 

доступных для диалога “Загрузить файл SQL(запроса” *.sql

 

файлов.

Предыдущиé Позволяет загрузить последний выполненный в текущем сеансе

 

MapInfo запрос.

Справка

Выводит справку.

Запросы к таблицам удаленных БД с помощью BUILDSQL.mbx и их создание

Программа MapBasic BUILDSQL.mbx может быть использована для

генерации запроса к таблицам удаленных баз данных.

1.Для запуска программы используйте команды ФАЙЛ> ЗАПУСТИТЬ ПРОГРАММУ MAPBASIC . В каталоге MAPINFO/TOOLS выберите buildsql.mbx

2.Нажмите OK. Программа будет добавлена к меню ПРОГРАММЫ.

Для запуска программы Генератор SQL:

1.В меню программы выберите команду ГЕНЕРАТОР SQL > CÓÁÄ ГЕНЕРАТОР SQL, появится следующий диалог:

132

Запросы к таблицам удаленных БД с помощью BUILDSQL.mbx и их создание

2. Нажмите кнопку СОЗДАТЬ ЗАПРОС. Появится еще один диалог:

3.Установите курсор в поле справа от заголовка Из таблиц и с помощью кнопки ТАБЛИЦЫ выберите таблицу, к которой будет сделан запрос.

4.Установите курсор в поле справа от заголовка Выбрать колонки и с помощью кнопки КОЛОНКИ выберите колонки для просмотра. Звездочка (*) означает ( все колонки.

5.Установите курсор в поле справа от заголовка с условием: создайте условия для запроса.

133

Запросы к таблицам удаленных БД с помощью BUILDSQL.mbx и их создание

6.После того как предложение запроса создано, нажмите кнопку ВЫПОЛНИТЬ. Восстановится диалог “MapInfo СУБД SQL Обработчик”. Созданный запрос будет помещен в окошко SQL предложение.

7.Нажмите кнопку ВЫПОЛНИТЬ для исполнения запроса: выберите способ выборки в следующем диалоге:

Режим Просмотр… позволяет проверить таблицу без загрузки в

MapInfo.

Режим Загрузить… возвращает результат запроса в MapInfo.

134

Сохранение связанной таблицы

Сохранение связанной таблицы

Вы сохраняете изменения в связанной таблице MapInfo так же, как Вы сохраняете обычные таблицы MapInfo, т.е. командой ФАЙЛ > СОХРАНИТЬ.

Сохранение связанной таблицы приводит к обновлению записей в удаленной базе данных. Но перед тем, как MapInfo разрешит обновление этих записей, производится оценка записей в процедуре, называемой разрешение конфликтов.

Разрешение конфликтов

Поскольку источником записей в связанной таблице является удаленная база данных, возможна ситуация, в которой другие пользователи изменили или удалили соответствующие записи в этой базе данных уже после того, как таблица была загружена в MapInfo. В результате могут возникнуть конфликты между данными, находящимися в удаленной базе данных, и новыми данными, которые Вы хотите выгрузить в эту базу данных.

В процессе сохранения связанной таблицы, если MapInfo обнаруживает конфликты между данными в удаленной базе данных и любыми записями связанной таблицы, возникшие с момента ее загрузки из базы данных, то автоматически появляется диалог “Разрешение конфликтов”, в котором эти конфликты устраняются по правилам, описанным ниже.

Этот процесс автоматически срабатывает, если при попытке сохранения связанной таблицы обнаруживается конфликт при обновлении записи в базе данных. Диалог “Разрешение конфликтов” позволяет пользователю выбрать, какие поля конфликтующих записей будут использоваться для обновления базы данных. При этом рассматриваются три экземпляра обновляемой записи:

Начальное состояние записи на сервере (запись в момент извлечения из базы данных и загрузки в таблицу MapInfo).

Текущее локальное состояние записи (запись, предлагаемая для сохранения в сессии MapInfo, возможно, после редактирования пользователем).

Текущее состояние записи на сервере (запись в базе данных к моменту предлагаемого обновления).

135

Сохранение связанной таблицы

Конфликт возникает, когда начальное состояние записи не соответствует текущему ее состоянию на сервере данных, что предполагает обновление базы данных другим пользователем в период с момента загрузки записи в связанную таблицу MapInfo.

Диалог “Разрешение конфликтов” появляется для каждой конфликтующей записи. В любой момент пользователь может выйти из интерактивного режима обработки, задав форсированное разрешение оставшихся конфликтов. При этом в диалоге “Форсировать разрешение конфликтов” пользователь может выбрать использование либо текущих значений MapInfo (локальных), либо текущих значений СУБД (на сервере).

Для каждого конфликта, обнаруженного в процессе фиксации данных, появляется диалоговое окно, предоставляющее пользователю информацию для принятия решения о том, какие значения данных использовать для обновления конфликтной записи.

Тип конфликта

Стандартное разрешение

 

 

Изменилось

Значение на сервере

значение на

 

сервере, локальное

 

значение не

 

изменилось

 

Изменилось

Локальное значение

значение на

 

сервере, локальное

 

значение

 

изменилось

 

 

 

136

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]