文档库 最新最全的文档下载
当前位置:文档库 › ArcGIS格式的转换方法

ArcGIS格式的转换方法

ArcGIS格式的转换方法
ArcGIS格式的转换方法

A r c G I S格式的转换方

Revised as of 23 November 2020

几种注册 ODBC数据源的方法

?来源:未知编辑:未知 2005年12月19日浏览454次

几种注册 ODBC数据源的方法

国防科大丁浩

ODBC(Open Database Connectivity,开放式数据库互连)是一种应用程序接口 (API) 规范。它定义了一个标准例程集,使用它们应用程序可访问数据源中的数据。应用程序通过引用 API 的函数可以直接使用 ODBC,或利用数据访问对象 (DAO) 或远程数据对象 (RDO) 来使用ODBC。但是,在实现ODBC时,我们必须首先配置ODBC环境,进行数据源的注册,这样才能在对数据库进行编程时,对数据源进行连接、访问和操作。本文介绍几种常用的注册ODBC数据源的方法。

手工配置

1.ODBC数据源管理器

在进行数据库开发时,为了达到配置ODBC,进行DSN定义注册的目的,微软给出了一个手工操作的解决方法。在Windows 9X操作系统的控制面板中,有一个名为“ODBC数据源(32位)”的图标,可以通过它激活专门为用

户设置ODBC环境的程序(ODBC Data Source Administrator,ODBC数据源管理器)。在Windows 2000操作系统中,上述图标被放置在控制面板的“管理工具”里面。

这个用于设置ODBC环境的程序叫做桌面驱动程序,它支持数种DBMS (Database Management System,数据库管理系统)。当用户想增加一个数据源和一个所需要的驱动程序时,可以通过ODBC数据源管理器的配置对话框配置特定类型的数据库。大多数情况下,在编写对数据库操作的程序时,我们至少需要知道诸如数据库文件名、系统(本地或远程)、文件夹等信息,同时要给数据源命名。

2.定义数据源的类型

用户可以定义以下三种类型的数据源:

用户数据源:作为位于计算机本地的用户数据源而创建的,并且只能被创建这个数据源的用户所使用;

系统数据源:作为属于计算机或系统而不是特定用户的系统数据源而创建的,用户必须有访问权才能使用;

文件数据源:指定到文件中作为文件数据源而定义的,任何已经正确地安装了驱动程序的用户皆可以使用这种数据源。

3.数据源注册的步骤

以Microsoft Access为例,如果在C:\myfile\文件夹里创建了一个名为的数据库文件,其注册步骤如下:

在控制面板里找到“ODBC数据源”图标,打开数据源管理器的交互界面;

笔者创建的数据库文件是供本机上的用户使用的,所以这里选择“用户DSN”;然后按下“添加”按钮,在弹出的数据源管理器对话框里,为自己所要创建的数据源选择一个驱动程序,本文的数据库文件是用Microsoft Access创建的,所以要选择“Microsoft Access Driver (*.mdb)”;

按“完成”按钮后,进入一个标题为“ODBC Microsoft Access 安装”的界面,在其中设置“数据源名”为“mydatasource”,选取数据库文件“C:\myfile\”,然后确定即可。

这样我们就完成了一个简单的ODBC数据源的注册。当然,在以上的步骤中,用户可以根据自己的不同需要,设置不同的选项。

注册结束后,我们便可以在对数据库的编程中,操作该数据库了。

在VB中注册数据源

在VB中对数据库进行编程时,可以利用RegisterDataSource方法为ODBC 数据源输入连接信息到 Windows 注册表中。它的语法是:RegisterDataSource DSN, driver, silent, attributes

其中参数代表的含义分别为:

DSN:字符串表达式,它是在引用数据源描述信息块时所使用的名字。例如,如果数据源是一个ODBC远程数据库,这就是服务器的名字;如果是用户DSN,则是注册的数据源的名字。

drive:字符串表达式,表示ODBC驱动程序的名称。它并不是 ODBC 驱动程序动态连接库 (DLL) 文件名。例如,SQL Server 是驱动程序名,而是 DLL 文件名。必须安装ODBC 及相应的驱动程序。

silent:布尔类型值,如果不想显示 ODBC 驱动程序对话框,用以提示指定驱动程序的信息,该值就为 True;如果希望显示 ODBC 驱动程序对话框,该值就为 False。如果 silent 为 True,那么attributes必须包含所有必需的指定驱动程序的信息。

attributes:字符串表达式,它是一个要添加到文件中的关键字列表。编写程序时,可以根据需要选择若干attributes的参数进行设置。

例如:我们可以编写如下的VB程序,达到与上面手工注册一样的目的。程序清单如下:

Sub RegisterDataSource()

Dim strAttribs As String

’建造关键字字符串。

strAttribs =“DBQ=” _

&“C:\myfile\” _

& Chr$(13) &“OemToAnsi=No” _

& Chr$(13) &“SERVER=SEQUEL” _

& Chr$(13) &“Network=DBNMPNTW” _

& Chr$(13) &“Database=WorkDB”_

& Chr$(13) &“Address=\ EQUEL\PIPE QL\QUERY”

’建立新的注册的 DSN。

“mydatasource”,

“Microsoft Access Driver (*.mdb)”, True,

strAttribs

End Sub

Private Sub Form_Load()

Call rdoRegisterDataSource

End Sub

注意:为了在代码中使用rdoEngine和远程数据对象,必须先在“引用"对话框中设置一个到 Microsoft Remote Data Object 对象库的引用,否则在第一次引用rdoEngine 对象时会导致编译错误。

利用注册表合并

1.解决思路

考查ODBC数据源注册后对Windows注册表的修改情况,我们可以发现所注册的数据源对Windows注册表的影响关键集中在[HKEY_CURRENT_USER oftware\ODBC\]里。

这样,我们导出[HKEY_CURRENT_USER oftware\ODBC\],每次以之为模板,把所要注册的数据源信息加入到注册表导出文件的对应位置,然后再将该文件与系统注册表合并即可。

2.具体操作

首先,我们要弄清楚Regedit 及其参数的含义。Regedit是打开系统注册表的命令。在“开始\运行\”中输入即可。它的三个参数含义如下:

Regedit /e :表示把注册表文件导出到文件中,相当于复制整个注册表文件到中;

Regedit /c :表示把导入注册表,相当于用该文件的内容覆盖了注册表的内容;

Regedit /s :表示把文件的内容与注册表文件的内容进行合并。

我们只需在注册表中将有用的部分导出,而后将所要注册的数据源的信息加

入,再与系统注册表合并就可以了。这个合并的过程,我们既可以手工输入来

实现,也可以通过编程实现自动合并。

注意:为了防止误操作,一定要将系统注册表作一次备份。

小结

从安全的角度考虑,笔者首推利用在Windows控制面板中的ODBC数据源管

理工具来进行数据源注册,以免因对注册表的不熟或疏忽造成不必要的损失。

当然,还有一些应用工具,可以实现对ODBC数据源的注册,用户可以根据不

同的需求选择使用。

小妹初学vb,想在vb中用ODBC连接一个access数据库,现遇到一个问题:

在控制面板中设置好ODBC后,分别尝试用data和adodc控件连接数据源(只在控件的属性上设置,没有写代码),都不行。

然后在网上找到一些代码写进去,却总是显示“实时错误[Microsoft][ODBC驱动程序管理器]未发现数据源名称并且未指定默认驱动程序”或者“找不到可安装的ISAM”(可是我安装vb时是装过ISAM的!)

我的代码:

PrivateSubForm_Load()

DimconnAsNew

DimrsAsNew

=adUseClient

SecurityInfo=False;DataSource=F:\"

"select*from表1",conn,adOpenDynamic,adLockBatchOptimistic

EndSub

烦请各位热心的大虾帮忙看看这个代码哪里不对呢非常感谢!

作者:

专家分:8950

发表时间:2006-6-1 19:19:00

第 1 楼="Provider=MSDASQL;PersistSecurityInfo=False;UserID=填用户名;DataSource=填DSN名"'通过ODBC来连接

SecurityInfo=False;DataSource=F:\"是连接数据库的

最后修改于2006-6-1 19:20:00

此帖尚未评分

作者:

专家分:0

发表时间:2006-6-2 9:15:00

第 2 楼我把关键那句改成

="Provider=MSDASQL;PersistSecurityInfo=False;UserID=admin;DataSource="

可是还是显示“实时错误[Microsoft][ODBC驱动程序管理器]未发现数据源名称并且未指定默认驱动程序”,我在

控制面板里的用户DSN和文件DSN选项卡都分别创建了一个叫的文件了,选择的是access的驱动器,为什么还

总是说“未发现”呢

作者:

专家分:30

发表时间:2006-6-4 11:35:00

第 3 楼shi使用一个ADO控件来生成连接字符串,就可以了!

m

此帖尚未评分

作者:

专家分:90

发表时间:2006-6-7 2:51:00

第 4 楼可以用数据环境设置器就能得到连接数据库的字符串。

1.在工具栏中单击工程

2.单击添加DataEnvironment,在工程资源管理器中生成了一个DataEnvironment1

3.右键单击Connection1

4.单击属性,弹出一个数据链接属性窗口

5.如果数据库是access就双击MicrosoftJet(省略...)

6.跳到连接项,在文本框中输入数据库路径,如果数据库和工程在同一路径,则输入数据库名称即可

7.如登陆数据库需要密码,则在第二点的文本框输入相应信息

8.点击测试连接按钮

9.如果连接成功则提示连接成功

10.成功后按确定按钮退出

11.连接数据库的字符串只有复制属性窗口的ConnectionSource的值就行了

此帖尚未评分

作者:发表时间:2006-6-9 14:14:00

专家分:30

第 5 楼="DSN=abc;uid=;pwd="

'通过ODBC来连接

此帖尚未评分

作者:

专家分:20

发表时间:2006-6-9 17:49:00

第 6 楼顶三楼

使用AO连接ORACLE数据库

昨天做了个程序,是将一个本地SHP文件和一个SDE上的表进行匹配比较,

然后生成一个新的SDE要素类。其中涉级到使用AO连接ORACLE数据库的

问题和如何从数据库中取出一个表的操作,代码贴下来给大家看看:

连接数据库,首先需要了解AO操作数据的基本流程:AO的geodatabase数据

模型具有独立性,与具体的存储介质无关,即无论是数据库管理还是文件存储

数据,AO都是使用相同的操作方式来管理数据的。在geodatabase中,

workspace相当于一个数据库,这个数据库存储的东西很多,如要素数据集、要

素类,栅格数据集,表等等。(具体的可看OMD图)

1.使用AO连接到SDE+ORACLE数据库

Private Sub getSDETable()

使用SDE的工作空间工厂,不同类型的数据库连接的时侯使用不同的工厂对象

Dim pWorkspaceFactory As IWorkspaceFactory

pWorkspaceFactory = New SdeWorkspaceFactory

Dim pPropertySet As IPropertySet

pPropertySet = New PropertySet

With pPropertySet

.SetProperty("Server", "data") 服务器

.SetProperty("Instance", "5151/tcp") 实例

.SetProperty("user", "sde") SDE数据表空间的用户名.SetProperty("password", "sde")

.SetProperty("version", "") 默认版本

End With

定义要素工作空间

Dim pSdeWorkspace As IFeatureWorkspace

Try

pSdeWorkspace = (pPropertySet, 0)

Catch ex As Exception

("SDE Cann't Connection")

End Try

取出一个表

Dim pTable As ITable

pTable = ("")

If pTable Is Nothing Then

("Connection Error")

Else

看取出每条记录的方法

Dim pCursor As ICursor

pCursor = (Nothing, False)

Dim pRow As IRow

pRow =

Do While Not pRow Is Nothing

取出表中的每一条记录,加到一个COMBOBOX中去pRow =

Loop

End If

End Sub

如果要去要素类很多帮助里面都可以看到,可是取一个table就没看到过例子,我其实对于取一个表要通过ifeatureworkspace接口也是很迷惑,因为在OMD图中,featureclass是table的子类,这样在workspace里面应该有专门管理table的接口,但是没有哦。

2.使用AO连接普通的ORACLE数据库

Private Sub getORACLE()

Dim pWorkspaceFactory As IWorkspaceFactory

pWorkspaceFactory = New OLEDBWorkspaceFactory

Dim pPropertySet As IPropertySet

pPropertySet = New PropertySet

("CONNECTSTRING", "Provider=;Data Source=nhgtfc;User

Id=nhgtfc;Password=nhgtfc")

Dim pWorkspace As IFeatureWorkspace

pWorkspace = (pPropertySet, 0)

If pWorkspace Is Nothing Then

("connect error!")

Else

pTable = ("NHGTZYJ_TDJBXX")

End If

End Sub

这里打开工作空间使用的是另一种工作空间工厂,但是打开后使用的方法是一样的。其实无论是那里的表,其管理方法都是一致的。

:

发布: | 分类: | : | : | 浏览: 43 | 字号:

?相关文章

?该日志的引用地址(UTF-8)及评论订阅地址:

?

ArcSDE安装全攻略

(作者: 陈元琳)

有很多朋友安装ArcSDE失败,主要有以下两种情况:

1 ArcSDE安装过程中提示不成功。

2 ArcSDE已经装上,但是服务没有启动。

为此,我把ArcSDE反复安装了多次,对期间可能出现的问题一一找到了解决办法。现在把安装步骤写出来,希望不光对第一次安装ArcSDE的朋友,而且对已经安装过ArcSDE却没有成功的朋友,都能有一定的帮助。当然这只是抛砖引玉,如有错误还请各位指正。

Windows操作系统中解决方案如下:

1 打开注册表,删除ArcSde Service服务

详细:

(1)打开“控制面板”,“服务”,找到“ArcSde Service(somename)”,这里somename就是你的ArcS de服务的真实的名字,记住这个名字(为叙述方便,以下用somename表示其真实的名字)。

(2)打开“开始”,“运行”,敲入“regedit”,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlS et\Service\somename,把整个文件夹删掉。(这里的somename指(1)中的somename。)

(3)重启计算机。(目的是刷新注册表,当然用其他方法树新注册表也可以,但是这里强烈建议重启。)

2 从Oracle中删掉用户sde和表空间sde

详细:

(1)从“开始”--〉“程序”--〉“Oracle - OraHome92”--〉“Enterprise Manager Console”,启动Oracl e,以任意用户名,任意密码,SYSDBA身份登陆(以SYSDBA身份登陆无需验证的原因是:SYSDBA是操作系统认证的,操作系统里面有一个ora_dba组,这个组里面Members can connect to the Oracle datab ase as a DBA without a password,如果把你刚才登陆本机时所使用的用户名从这个组里删除,那么你以SYSDBA身份登陆Oracle就需要身份验证了)。

(2)在“安全性”--〉“用户”下找到“SDE” (如果找不到就进行下一步),在“SDE”上右健单击,选择“移去”,选择“是”,这样就删掉了用户SDE。

(3)在“存储”--〉“表空间”下找到“SDE” (如果找不到就进行下一步),在“SDE”上右健单击,选择“移去”,选择“是”,这样就删掉了表空间SDE。

(4)关闭Oracle。

3 重新安装ArcSDE

详细:

(1)从“开始”--〉“程序”--〉“ArcGIS”--〉“ArcSDE”--〉“ArcSDE for Oracle9i Post Installation”,进入安装界面。

(2)第一步,选择完全安装,即“Complete”,点击“下一步”。

(3)第二步,要求以Oracle用户sys的身份登陆Oracle数据库。在Sys user password中输入用户sys的密码(安装Oracle时输入的);在Net service name中输入Oracle服务的名字,可以以如下方式查看Oracle服务的名字:“控制面板”-->“管理工具”--〉“服务”,找到“OracleServiceSomename2”字样的服务(其中,Somename2只是一个替代字符串),右键点击“属性”,在弹出的对话框中,看到“可执行文件的路径”下面的字符串,此字符串中“.EXE ”后面的部分即是Oracle服务的名字。点击“下一步”。

(4)第三步,创建SDE表空间和用户(如果弹出一个对话框,显示用户sde已经存在,那是因为用户sde或表空间sde没有从Oracle中删掉)。对话框中给出三栏:SDE user、Default和File。其中,D efault栏指出要创建的默认的SDE用户名和表空间名,SDE user栏输入的是用户sde的密码,File栏给出的是新创建的用户和表空间存放位置的文件。

强烈建议不要修改Default栏给出的“sde”,因为如果改成其它的名称,一会儿在(8)中将会看到要求给出用户sde的密码,而我们并没有创建用户“sde”。

笔者私下认为SDE user栏和Default栏给出的提示不很好,粗一看去让人误以为要填两个用户名,一个是运行使用的用户名,一个是默认的用户名。但实际上SDE user栏中输入的字符以星号显示,按默认惯例,这一栏应该是密码。而且,在刚进入(6)时,我们可以打开Oracle,可以看到“用户”下的确生成了Default栏输入的名字的用户,而不是SDE user栏输入的名字的用户,在表空间中也是如此。

我们可以只在SDE user栏输入一个字符串,当作用户“sde”的密码,其余的默认即可。点击下一步。

(5)一会儿可以看到弹出两个对话框,提示用户sde和表空间sde创建成功。

(6)第四步,进入“ArcSDE configuration files”,配置ArcSDE文件,选择默认,点击下一步即可。

(7)第五步,进入“ArcSDE configuration files continued”,继续配置ArcSDE文件,选择默认,点击下一步即可。

(8)第六步,创建方案SDE。此时,SDE用户的名字已经固定,为“sde”;程序在(4)中已经获得用户“sde”的密码,此处也以星号形式给出;程序在(3)中已经获得Oracle服务的名称,此处也显示给出。如果(3)和(4)中均没有填错,此处全部默认即可,点击“下一步”。

3”字样的值,这个somename3就是Oracle_SID。填好后点击“下一步”。

(10)如果原来有ArcSDE服务,那么此时会提示已经存在服务,是否覆盖;或者提示出错。原因:第1步即“打开注册表,删除ArcSde Service服务”仅仅把控制面板服务列表中的服务删掉,而真正的服务(在HKEY_LOCAL_MACHINE\SOFTWARE\ESRI\ArcInfo\ArcSDE\\ArcSDE for Oracle下,)还是没删掉,所以会提示是否覆盖。如果第1步没有执行,即服务列表中的ArcSDE服务没有删掉,就会提示出错。

(11)在以上执行步骤中,由于没有删掉HKEY_LOCAL_MACHINE\SOFTWARE\ESRI\ArcInfo\ArcSD E\\ArcSDE for Oracle下的ArcSDE的真正服务,所以提示是否覆盖。点击“是”,一会儿后弹出对话框,提示耐心等待,询问是否启动新创建的ArcSDE服务,选择“是”,一会儿后提示服务成功启动。

补漏:

以上主要针对Oracle数据库中只有一个数据库的情况,如果有多个数据库,比如有两个:SDE和T estDB,那么以上安装步骤会有一些小小的改动,如下:

A 从Oracle中删掉用户sde和表空间sde时需要选择数据库,你原来把sde用户和表空间建在哪个数据库(即安装ArcSDE第二步时填写的Net service name)中,现在就先登陆那个数据库,然后再在那个数据库下进行删除sde表空间和用户的操作。

B 安装ArcSDE的第二步至第六步(即(1)-(8)),填写的Net service name应该相同,此时在“服务”列表中可以看到有“OracleServiceSDE”和“OracleServiceTestDB”,Net service name 应该要么是“SD E”,要么是“TestDB”

C 安装ArcSDE的第七步(即(9)),填写的“Oracle_SID”也应该跟前面安装过程中填写的Net ser vice name对应的服务所对应的Oracle数据库的SID相同。(Oracle数据库的SID可以在打开“Orac le En terprise Manager Console”后看到:“网络”—〉“数据库”根目录下的便是Oracle数据库的全部SID。)经笔者测试,如不如此,ArcSDE服务便不能启动。

重要说明:得出以上结果,软件环境为:ArcSDE for Oracle 9i,Windows XP Professional Server P ack 2,Oracle 。

本文发表于《3s新闻周刊》第5期,有删节,严禁非通告转载。

另,《3s新闻周刊》第7-8期(合集)即将推出,敬请关注。

前些天,把从版本升级到了。之后因为在看ArcObject的文档,用ArcToolbox的空间统计分析却发现不能用,ArcGIS提示要安装Python。ArcGIS 9新增的空间统计分析是基于Python实现,,但不知由于什么原因,非常脆弱。笔者是Python的Fans, Python的使用频率远大于ArcGIS,而且使用的版本比ArcGIS自带的版本高,因此,这样的情景也不是第一次遇到了。通过重新注册py文件类型有时可以解决问题,有时却不可以,ArcGIS的文档里也没有找到类似问题的说明,从网上也没有找到解决办法。

前几天demo@virushuo在自己的Blog里,因为其复杂性,“Windows是一个无法完全理解的系统”。那么,对照GIS领域,ArcGIS大概就是这样一个对应物。综观ESRI的产品线,我们可以看到,其产品已涵盖了GIS相关的方方面面,而同时也难免“大而无当”。

所以,一方面对ESRI的溢美之词随处可见,另一方面,对ESRI的批评和Anti-ESRI也并不新鲜,下面是2、3年前笔者从国内几个论坛上摘录下来的几条言论:

“Jack Dangermond , 大概所有的GIS人都知道, ESRI的主席,牢牢控制一手创办的ESRI。以我个人观点Arc软件为什么有这么混乱的命名规则,这么用户不友好的界面和不符逻辑的操作跟他的公司性质大有关系,试想如果没有投资人和市场的压力他会花很多精力考虑产品的marketing 和usability么所以ArcGIS的用户们只有继续忍下去了。”

“众所周知ESRI的产品纷繁复杂。当ArcGIS都数不过来,什么MO、AO、SDE、IMS、ArcMap、ArcCatolag、ArcSense等等,其中还设置了好多版本权限,如ArcView、ArcEditor,ArcInfo等,一度让用户思想混乱,ESRI更多的时候是采取一种霸市的做法。”

“不要把ESRI当成什么技术革新者。至少近十年来,ESRI的保守在业界内部可算是闻名的。”

这些言论也许片面,但都说出了部分事实,即GIS软件的不友好。正是这种不友好,才使得Google Earth这样的软件引起了如此广泛的关注和好评。

从1997年开始用COM组件技术将已有的GIS产品进行重组,于1999年底推出了ArcGIS 8,之后,逐渐将产品线构筑于基于COM的ArcObject之上。这一举措,带来的最大好处是大多数基于空间数据的应用,都可以基于ArcObject以及其上层产品构建,使得ESRI可以进入利润丰厚的企业市场。

但市场似乎没有完全按照ESRI的预料发展,首先,企业市场的主流技术目前是J2EE和,COM/DCOM 正在退出市场,因此,每一版本的ArcGIS产品,都必须开发对应的Java和接口;其次,网络地图的发展使得业界巨头们开始窥伺这个市场;最后,与封闭的GIS系统相对,开源空间信息软件逐渐获得了很多人的认可,特别是,,更是使开源GIS深入人心。

相对于ESRI,轻装上阵的在推出了基于ActiveX组件技术的MapX后,MapXtreme的Windows、Java、版本也先后推出,在LBS相关领域取得了不俗的成绩;国内的,抓住组件技术这一机遇,也取得了不错的成绩。从这个角度,ESRI选择COM和DCOM来重组自己的产品可谓喜忧参半。

2005年,随着Google、Yahoo、Microsoft等进入网络地图行业,。我们也欣喜的看到,。面向服务,融入IT主流,而开放、免费(Google Earth、ArcGIS Explorer),这些对于GIS业界相对陌生的词语开始变得流行,对于用户、对于大众无疑是很好的事情。

和ESRI一样,GIS行业也处在一个十字路口,何去何从是每个对于从业者都需要考虑的问题。如何为自己定位,找到一个合适的方向;对于大大小小的公司,又如何保持竞争力。而这也是我们选择ESRI作为这一期主题的理由。

最后以一个例子和一句话作为结尾。和ESRI类似的一个公司是SAS,一样的私有公司,从统计软件起家,目前主要面向商业智能(BI)、数据挖掘等领域,2005年取得了不俗的业绩,其中SAS中国的业绩增长了100%。避开业界巨头的锋芒,专注与自己的领域,并深入应用,大概就是IT业界的“丛林求生法

相关文档