MI6UGRU
.pdfГлава 23: Доступ к удаленным базам данных
ствующие записи в этой базе данных уже после того, как таблица была загружена в MapInfo. В результате могут возникнуть конфликты между данными, находящимися в удаленной базе данных, и новыми данными, которые Вы хотите выгрузить в эту базу данных.
В процессе сохранения связанной таблицы, если MapInfo обнаруживает конфликты между данными в удаленной базе данных и любыми записями связанной таблицы, возникшие с момента ее загрузки из базы данных, то автоматически появляется диалог “Разрешение конфликтов”, в котором эти конфликты устраняются по правилам, описанным ниже.
Этот процесс автоматически срабатывает, если при попытке сохранения связанной таблицы обнаруживается конфликт при обновлении записи в базе данных. Диалог “Разрешение конфликтов” позволяет пользователю выбрать, какие поля конфликтующих записей будут использоваться для обновления базы данных. При этом рассматриваются три экземпляра обновляемой записи:
∙Начальное состояние записи на сервере (запись в момент извлечения из базы данных и загрузки в таблицу MapInfo).
∙Текущее локальное состояние записи (запись, предлагаемая для сохранения в сессии MapInfo, возможно, после редактирования пользователем).
∙Текущее состояние записи на сервере (запись в базе данных к моменту предлагаемого обновления).
Конфликт возникает, когда начальное состояние записи не соответствует текущему ее состоянию на сервере данных, что предполагает обновление базы данных другим пользователем в период с момента загрузки записи в связанную таблицу MapInfo.
Диалог “Разрешение конфликтов” появляется для каждой конфликтующей записи. В любой момент пользователь может выйти из интерактивного режима обработки, задав форсированное разрешение оставшихся конфликтов. При этом в диалоге “Форсировать разрешение конфликтов” пользователь может выбрать использование либо текущих значений MapInfo (локальных), либо текущих значений СУБД (DBMS) (на сервере).
Для каждого конфликта, обнаруженного в процессе фиксации данных, появляется диалоговое окно, предоставляющее пользователю информацию для принятия решения о том, какие значения данных использовать для обновления конфликтной записи.
Тип конфликта |
Стандартное разрешение |
|
|
527
Глава 23: Доступ к удаленным базам данных
Изменилось значение на сервере, |
Значение на сервере |
локальное значение не изменилось |
|
|
|
Изменилось значение на сервере, |
Локальное значение |
локальное значение изменилось |
|
|
|
Колонка |
Показывает имя колонки в записи, которая содержит |
|
данные, породившие требующий разрешения |
|
конфликт. |
|
Если имя колонки не помещается в окошке списка, |
|
показывается усеченное представление. Полное имя |
|
колонки отображается ниже, в строке Колонка. |
|
|
Начальное в DBMS |
Показывает начальное значение в базе данных на |
|
момент загрузки в связанную таблицу MapInfo. |
|
Если начальное значение не помещается в окошке |
|
списка, показывается усеченное представление. Полное |
|
значение отображается ниже в окошке Начальное в |
|
ODBC. |
|
|
Текущее в MapInfo |
Показывает текущее значение в связанной таблице |
|
MapInfo, которую Вы пытаетесь сохранить. |
|
Это окошко будет пустым, если запись была удалена из |
|
базы данных MapInfo. |
528
|
|
Глава 23: Доступ к удаленным базам данных |
|
|
|
Если текущее значение из удаленной базы данных не |
|
|
|
помещается в окошко списка, показывается усеченное |
|
|
|
представление. Полное значение отображается ниже, в |
|
|
|
окошке Текущее в ODBC. |
|
|
|
|
|
|
Текущее в DBMS |
Показывает текущее значение в удаленной базе данных |
|
|
|
на момент обновления. (Эти данные могли быть |
|
|
|
изменены другим пользователем с тех пор, как они |
|
|
|
были загружены в связанную таблицу). |
|
|
|
Это поле будет пустым, если запись была удалена из |
|
|
|
удаленной базы данных после загрузки в связанную |
|
|
|
таблицу MapInfo. |
|
|
|
Если текущее значение из удаленной базы данных не |
|
|
|
помещается в окошко списка, показывается усеченное |
|
|
|
представление. Полное значение отображается ниже, в |
|
|
|
окошке “Текущее в ODBC”. |
|
|
|
|
|
|
Текущее в MapInfo |
Установите этот флажок для обновления удаленной |
|
|
|
базы данных значением из связанной таблицы MapInfo. |
|
|
|
Если текущая запись в базе данных или запись в |
|
|
|
MapInfo были удалены, флажок становится |
|
|
|
недоступным. В этом случае нужно использовать |
|
|
|
кнопки “MapInfo” или ”ODBC”. |
|
|
|
|
|
|
Текущее в DBMS |
Установите этот флажок для сохранения текущего |
|
|
|
значения базы данных. |
|
|
|
Если текущая запись в базе данных или запись в |
|
|
|
MapInfo были удалены, флажок становится |
|
|
|
недоступным. В этом случае нужно использовать |
|
|
|
кнопки ”MapInfo” или ” Текущее” |
|
|
|
|
|
|
Кнопка MapInfo |
Эта кнопка выбирает для обновления все значения |
|
|
|
MapInfo. Если обрабатываемая запись была удалена из |
|
|
|
таблицы MapInfo, нажатие на кнопку “MapInfo” |
|
|
|
удалит запись в базе данных на сервере. |
|
|
|
Если обрабатываемая запись была удалена из базы |
|
|
|
данных, нажатие на кнопку “MapInfo” вставит новую |
|
|
|
запись в удаленную базу данных. |
|
|
|
|
|
|
Кнопка Текущее |
Эта кнопка выбирает для обновления все текущие |
|
|
|
значения в удаленной базе данных. Если |
|
529
Глава 23: Доступ к удаленным базам данных
|
обрабатываемая запись была удалена из таблицы |
|
MapInfo, нажатие на кнопку ODBC игнорирует |
|
удаление и сохраняет текущую запись в удаленной базе |
|
данных. |
|
Если обрабатываемая запись была удалена из базы |
|
данных, нажатие на кнопку MAPINFO вставит новую |
|
запись в удаленную базу данных. |
|
|
Колонка |
Показывает полное имя колонки, выбранной в списке |
|
Колонка. |
|
|
Начальное в DBMS |
Показывает полное значение начальных данных ODBC |
|
для колонки, выбранной в списке Колонка. |
|
|
Текущее в MapInfo |
Показывает полное значение текущих данных MapInfo |
|
для колонки, выбранной в списке Колонка. |
|
|
Текущее в ODBC |
Показывает полное значение текущих данных ODBC |
|
для колонки, выбранной в списке Колонка. |
|
|
OK |
Принимает выбранные значения для обновления |
|
конфликтной записи в удаленной базе данных. |
|
|
Прервать фиксацию |
Прерывает процедуру разрешения конфликтов и, как |
|
следствие, отменяет обновление удаленной базы |
|
данных. При этом открывается диалог “Прервать |
|
разрешение конфликтов”, запрашивающий у Вас |
|
подтверждение на прекращение фиксации транзакции. |
|
|
Справка |
Вызывает Справочную систему. |
|
|
Форсировать |
Завершает интерактивную обработку конфликтов, |
|
открывая диалог “Форсировать разрешение |
|
конфликтов”, позволяющий Вам выбрать один из двух |
|
режимов форсированной обработки, который будет |
|
использоваться для разрешения конфликтов при |
|
обновлении оставшихся записей в удаленной базе |
|
данных. Вы можете выбрать использование для |
|
обновления либо значений MapInfo, либо текущих |
|
значений удаленной базы данных. |
|
|
Обновление связанной таблицы
Вы можете обновить связанную таблицу MapInfo наиболее поздними данными из
соответствующей таблицы удаленной базы данных.
530
Глава 23: Доступ к удаленным базам данных
Обновить удаленную таблицу можно двумя способами, а именно – либо нажмите
кнопку ОБНОВИТЬ СОДЕРЖИМОЕ ТАБЛИЦЫ DBMS в панели инструментов DBMS, либо
проделайте следующее:
1.Выберите ТАБЛИЦА > ÈЗМЕНИТЬ > ÎБНОВИТЬ ТАБЛИЦУ DBMS. Появляется диалог “Обновление таблицы”.
2.Выберите имя обновляемой таблицы из предлагаемого списка таблиц.
3.При нажатии кнопки OK выбранная связанная таблица синхронизируется с соответствующей таблицей ODBC удаленной базы данных.
Как разорвать связь с удаленной базой данных
Вы можете разорвать связь таблицы MapInfo с таблицей ODBC удаленной базы данных, выполнив команду РАЗОРВАТЬ СВЯЗЬ. Эта команда недоступна, если в связанной таблице MapInfo произведены изменения, ожидающие сохранения; в этом случае необходимо сначала выполнить команду СОХРАНИТЬ ТАБЛИЦУ. В результате разъединения таблиц поля, для которых была запрещена запись, становятся доступными, и конечным продуктом разъединения является нормальная базовая таблица MapInfo.
Для разъединения таблиц:
1.Выполните команду ТАБЛИЦА > ÈЗМЕНИТЬ > ÐАЗОРВАТЬ СВЯЗЬ. Появляется диалог “Разорвать связь с таблицей ODBC”.
2.Выберите имя разъединяемой таблицы из предлагаемого списка таблиц.
3.При нажатии на кнопку OK связь выбранной таблицы MapInfo с таблицей ODBC удаленной базы данных разрывается, и эта таблица становится нормальной базовой таблицей MapInfo.
531
Глава 23: Доступ к удаленным базам данных
Как закрыть подключение к удаленной базе данных
Закрыть подключение к удаленной базе данных теперь очень просто. Можно
использовать два варианта действий:
∙Нажать кнопку ОТСОЕДИНИТЬ DBMS ТАБЛИЦУ.
∙Выбрать пункты меню ФÀÉË>ÇАКРЫТЬ DBMS СОЕДИНЕНИЕ.
Âобоих случаях появляется диалог “Закрыть DBMS соединение”. В этом диалоге нужно выбрать из списка подключение к СУБД и нажать кнопку РАЗОРВАТЬ СВЯЗЬ. Выбранное подключение будет закрыто.
532
Использование окна MapBasic
Глава
Обзор
Эта глава поможет опытным пользователям MapInfo научиться применять функции языка MapBasic в специальном окне, чтобы усовершенствовать работу с MapInfo. MapBasic - это язык программирования для MapInfo, позволяющий настраивать и автоматизировать функции MapInfo. Когда создавался MapBasic, то было добавлено окно MapBasic к сеансу работы MapInfo, в котором можно тестировать и налаживать программный код. Информация из окна MapBasic также полезна там, что помогает разобраться в сложных запросах MapInfo.
Окно MapBasic имеет ограничение по набору команд MapBasic. Окно MapBasic воспринимает команды построчно, нет возможности использовать циклы, связи с другими приложениями и более сложными командами.
∙Доступ к окну MapBasic
∙Функция Buffer( )
∙Функция FrontWindow( )
∙Функция CreateCircle( )
∙Функция CreateLine( )
∙Функция CreatePoint( )
∙Функция CreateText( )
∙Оператор Insert
∙Оператор Note
∙Функция ObjectGeography( )
∙Функция ObjectInfo( )
∙Оператор Print
∙Оператор Select
∙Оператор Set Area Units
∙Оператор Set CoordSys
∙Оператор Set Distance Units
∙Оператор Set Map
∙Оператор Set Resolution
∙Оператор Set Window
∙Функция StyleAttr( )
∙Оператор Update
∙Примеры
Глава 24: Использование окна MapBasic
Доступ к окну MapBasic
Для получения доступа к окну MapBasic выполните команду НАСТРОЙКИ > ÏОКАЗАТЬ ОКНО MAPBASIC. Окно MapBasic отобразится у Вас на экране. В этом окне Вы можете вводить команды MapBasic или видеть коды MapBasic, генерируемые MapInfo. Например, посмотрим, какие коды MapBasic создает MapInfo вовремя открытия таблицы и выполнения запроса . В меню Настройки выберите команду ПОКАЗАТЬ ОКНО
MAPBASIC и откройте таблицу World. Выполните следующий запрос: “выбрать все, где Pop_1994 > 1000000, и показать результат запроса”. Когда запрос будет выполнен, в окне MapBasic Вы увидите следующее :
Open Table ”C:\MAPINFO\DATA\WORLD\World.tab” Interactive
Map From World
select * from World where Pop_1994 > 1000000 into Selection
browse * from Selection
Первая строка - открытие таблицы с именем World. Вторая строка создается автоматически и обозначает отображение таблицы World в виде карты. Третья строка отображает выполняемый Вами запрос. В четвертой строке - требование показать результат запроса в виде списка.
Вы можете вводить команды MapBasic в окне MapBasic. Наберите в окне MapBasic следующую команду:
Map from Selection
Нажмите Enter в конце строки, и команда выполнится. Все выбранные объекты отобразятся в окне Карты.
Основная цель создания окна MapBasic – помощь разработчикам приложений на языке MapBаsic. Команда ПОКАЗАТЬ ОКНО MAPBASIC в основном ориентирована на инструкции и примеры использования команд MapBasic, которые могут быть полезны простому пользователю MapInfo.
534
Глава 24: Использование окна MapBasic
Функция Buffer( )
Назначение:
Возвращает объект типа "область", представляющий собой буферную зону вокруг выбранного объекта (область, граница которой отстоит от границы объекта на заданное расстояние).
Синтаксис:
Buffer(inputobject, resolution, width, unit_name)
ãäå
inputobject – объектное выражение (выражение, результат которого есть величина типа Object);
resolution – число узлов многоугольника, принимаемого как окружность (число типа SmallInt);
width – радиус буфера, число типа Float;
unit_name – имя единицы измерения расстояний (например, "mi" – миля, "km" – километр).
Величина, полученная в результате:
Область. Величина типа Object.
Описание:
Функция Buffer( ) возвращает буферную зону (объект типа "полигон") вокруг объекта, заданного параметром inputobject.
Функция Buffer( ) может создавать буферные зоны только вокруг одного объекта. Если Вам необходимо создать буфер вокруг группы объектов, используйте оператор Create Object As Buffer.
Если значение параметра width отрицательно, и объект inputobject является замкнутым, то буфер будет меньшим по площади по сравнению с inputobject.
Функция FrontWindow( )
Назначение:
Возвращает идентификатор активного окна.
Синтаксис:
FrontWindow( )
Величина, полученная в результате:
Целое число. Величина типа Integer.
Описание:
Функция FrontWindow( ) возвращает целочисленный идентификатор самого верхнего открытого окна в MapInfo. Этот оператор полезно применять сразу после создания нового окна (Карты, Графика, Списка или Отчета), чтобы запомнить значение идентификатора самого верхнего окна.
535
Глава 24: Использование окна MapBasic
Пример:
Print ”The window id is ” + str$(FrontWindow())
Функция CreateCircle( )
Назначение:
Возвращает объект "окружность".
Синтаксис:
CreateCircle(x, y, radius)
ãäå
x – X-координата центра окружности (или широта), действительное число; y – Y-координата центра окружности (или долгота), действительное число; radius – действительное число, назначающее радиус окружности.
Величина, полученная в результате:
Величина типа Object.
Описание:
Функция CreateCircle( ) возвращает графический объект типа "окружность".
Параметры x и y задают координаты центра окружности в той координатной системе, которая была объявлена MapBasic ранее. (Смотрите описание оператора Set CoordSys). Если система не объявлялась, то координаты будут принимать значения широты и долготы. При этом надо учесть, что MapBasic игнорирует координатную систему самого окна Карты.
Параметр radius назначается в тех единицах измерения, которые были назначены MapBasic до выполнения этой функции. (Смотрите описание оператора Set Distance Units). Если единицы не были объявлены, то радиус будет измеряться в милях.
Линия и заливка создаваемой окружности будут создаваться в соответствии с выбором стилей линии и штриховки в операторе Set Style, который выполняется до функции CreateCircle( ). Вы можете также воспользоваться для создания объекта типа "окружность" оператором Create Ellipse, в котором могут быть предложения Pen и Brush для определения стилей линии и штриховки.
Графический объект, созданный функцией CreateCircle( ), может быть присвоен объектной переменной, которая задает значение для уже существующей строки таблицы (оператор Update) или вновь созданной (оператор Insert).
Замечание: Перед созданием объекта в окне Отчета не забудьте выполнить оператор Set CoordSys Layout.
Функция CreateLine( )
Назначение:
Возвращает объект типа "прямая линия".
536