第八章从DBMS中访问数据
- 格式:pdf
- 大小:1.41 MB
- 文档页数:8
第八章 从 DBMS 中访问数据 概述 MapX 提供有空间服务器访问功能。
这是个强大的功能,它允许开发者连结存储在空间服 务器内的动态实时数据,例如运行在 Oracle、Informix、DB2 数据库,或者 Oracle 8i Spatial 数 据库上的空间服务器 MapInfo SpatialWare。
空间服务器允许各公司在其企业数据库中寄存地图 数据,以便于集中管理和确保安全性。
空间服务器,如 SpatialWare,为组织的空间数据提供了 高级查询处理以及在服务器上增强性能。
第一节 访问远程空间数据 在 MapX 中可以使用不同的 DBMS 服务器访问地图图层数据。
可以使用 Layers.Add 方法用来自 DBMS 的数据来添加图层。
有以下两种方法:Ÿ 当需要在运行状态下动态计算查询时,随 LayerInfo 对象一起使用Layers.Add 方法。
这适合于有新数据输入的情况。
例如,现有一个应用程序, 用来确定已产生用户输入税收量的商店的位置。
通过该应用程序输入的税收 值在程序设计阶段是未知的,因此,只能在运行状态下添加到查询中。
这种 方法用来取代前面的 AddServerLayer 方法。
Ÿ 当查询在设计阶段已知时,和 .tab 文件一起使用 Layers.Add 方法。
例如,如果应用程序要求显示所有在役的火警消防拴,那么就可以设置查询为选择 所有消防拴,同时将在役条件设置为真。
这个设置在程序设计阶段完成。
可 以直接将 .tab 文件放到 geoset 中,只要确保当任何使用 geoset 的程序初始 化时,都装载了该文件。
说明:MapX 4.0 不支持打开 SpatialWare 3.0 的或者更低版本的表。
对 LayerInfo 对象使用 Layers.Add 方法使用 LayerInfo 对象访问 DBMS 的示例Dim lInfo As ObjectDim lStr As StringSet lInfo = CreateObject("yerinfo.4")lInfo.Type = 4' layer type is RDBlInfo.AddParameter "NAME", "city_125"'layer namelInfo.AddParameter "TOOLKIT", "ODBC" ' use "ORAINET" for oracle direct accesslInfo.AddParameter "CONNECTSTRING", "DRIVER={SpatialWare 32 Bit _Driver4.00};HOST=Champagne;UUID=oracle;UPWD=secret;UID=GEORGETOWN;59PWD=secret;OSID=DB1;DLG=0" lInfo.AddParameter "QUERY", "SELECT * FROM CITY_125" lInfo.AddParameter "CACHE", "ON" lInfo.AddParameter "MBRSEARCH", "ON" g_yers.Add lInfo Set lInfo = Nothing 通过 .tab 文件访问远程表 可以通过创建 .tab 文件,以提供对远程地图的访问。
要使用 MapInfo Professional 产生 .tab 文件,请选择文件>打开 命令打开 DBMS 表。
.tab 文件是文本文件,可以使用任何文本编辑器创建 .tab 文件。
创建了 .tab 文件后,就可 以在编程时通过 Layers.Add 方法或通过 Geoset Manager,像访问任何其它 MapInfo .tab 文件一 样访问该文件。
示例(ODBC)这是一个使用 ODBC 为 SpatialWare 图层建立 .tab 文件的示例。
!table !version 500 !charset WindowsLatin1Definition TableType ODBCbegin_metadata"\IsReadOnly" = "FALSE""\DATALINK" = """\DATALINK\Query" = "SELECT * FROM CITY_125""\DATALINK\ConnectionString"=DRIVER={SpatialWare32BitDriver4.00};HOST=Champagne;UUID=oracle;UPWD=secret;UID=GEORGETOWN;PWD=secret;OSID=DB1;DLG=0"\DATALINK\ToolKit" = "ODBC""\CACHE" = "OFF""\MBRSEARCH" = "ON"end_metadata第二节 Oracle8i 支持 MapX 4.0 新增了支持 Oracle8i 的功能。
可在安装 MapX ODBC Connectivity 组件时加上 Oracle8i 。
Oracle8i Spatial 是 Oracle 公司新实现的一种空间数据库。
MapX 通过 OCI 支持和 Oracle8i 建立同步连接,通过 ODBC 和其它数据库建立连接。
Oracle8i 需求60要想在 MapInfo 内部和 Oracle8i 连接,就必须安装 Oracle8i 的客户端。
连接对话工作区对于 Oracle8i 来 说 , 如 果 没 有 指 定 完 整 的 连 接 字 符 串 , 那 么 就 不 能 显 示 连 接 对 话 框 。
“DLG=” 选项将无效。
如果不能提供 userID 和口令,则连接失败。
由于由 MapInfo Professional 创建的 DBMS 表 .tab 文件不包含口令(为安全起见),那这将引起打开 tab 文件失败。
解决这个问题的途径是写一段简单的连接会话,使用该会话从用户处取得口令,并使用有连接字 符 串 的 layerinfo 定 义 DBMS 图 层 的 Layers.Add 对 象 , 该 字 符 串 要 访 问 的 数 据 库 的 userID/password。
Oracle 连接字符串将会指定如下: "SRVR=superior;UID=user1;PWD=secret;" 添加临时层。
这将同时添加在连接池中所期待的连接。
由于口令已被识别,所以用此口令打开的同一数据库中的所有 tab 文件都将使用这种连接。
就这样,.tab 文件就成功地打开了。
若想在 geoset 中使用这些 tab 文件,就必须在应用程序启动时放置此登录。
第三节 DBMS LayerInfo 参数 .tab 文件和 LayerInfo 对象都接受相同的参数。
但参数名的命名习惯稍有不同。
参数 Query ConnectionStringCache MBRSearch描述这是决定数据表内容的 backend DBMS 查询。
若想使数据表可以地图 化,就必须选定空间对象列(或虚假列 OBJECT)。
SpatialWare 的用 户可指定返回空间对象的 GISSQL/Server 特定 SQL 字符串/声明。
另 外,SpatialWare 用户必须包含 SW_GEOMETRY 和 SW_MEMBER 列,SpatialWare 用它们来存储地理对象和 IDs. 这是与 DBMS 连接的必要信息。
对 ODBC 来说,Connection 指定了 ODBC 连接字符串。
如果已指定了完整的连接字符串,则建立了没有对 话框的连接。
如果未提供连接字符串,则使用默认的带 “DLG=0”的 字 符 串,此时,出现 ODBC Data Source 对话框。
对 Oracle Spatial 来说, 必须用 userid 和口令指定完整的字符串。
不会应用 DLG 关键字且不 会出现连接对话框。
Oracle 直接连接字符串看起来象这样:"SRVR=superior;UID=mapx;PWD=secret" 值为 “ON”/“OFF”,默认为 “ON”。
此参数控制在绘制图层时,是否隐 藏获得的数据。
此隐藏有助于提高以后的重画,平 移/缩放(在隐藏区内), 标注和专题化的性能。
巨大图层的隐藏会由于用尽内存而丢失隐藏的 值。
值为 “ON”/“OFF” 两种,默认是 “ON”。
当 MapX 绘制地图时,它从 图层中获得地图边界内的数据。
为了在 dbms 图层中这样做,要添加空 间谓词到表定义查询中去。
对于某些类型的查询,或存在 Spatioal 索引61Name ToolKit 问题的 onm 图层,此谓词可能减慢或引起查询失败。
此选项使得可以 关掉空间谓词。
这是为图层提供名称/别名的必要字符串。
值可以是 “ODBC”/“ORAINET”,默认是 “ODBC”。
此参数指定了要连 接到服务器数据库 的 DBMS 访问组件。
对于 Oracle direct,指定为 ORAINET 并使用 ORAINET 连接字符串。
其它的则指定为 ODBC。
DBMS 连接字符串格式 ODBC 连接字符串的格式和 MapInfo Professional ODBC/ Linked 表中的相同。
该字符串由几个 以分号(;)相分隔的子句定义。
各子句的格式均为 “Key=Value”。
下表列出了一些重要的关键 词。
部件 DSN=DRIVER=UID= PWD= DLG= SRVR=描述指定 ODBC 数据源的名称。
注意:如果使用了 “DSN=” 语法关 键字,那么指定的名字必须和正在使用的用户系统中的数据源的 名字相匹配。
请注意有时不同的用户可能对同一数据源使用不同 的名字。
如果不能预先知道使用的数据源名称,则请使用 “DRIVER=” 语法关键词代替 “DSN=” 语法关键词。
明确指定所安装的 SpatialWare 的驱动程序名或 IUS 驱动程 序。
被用来代替 “DSN=” 语法关键词。