access 中通过程序或ADO访问sqlserver 数据库的详细教程

2004-09-18 23:07:00
qkhsn-Office交流网
转贴:
Office中国
941

前端软件用access2000开发,后台数据库用sqlserver2000
请教前端的access 程序如何通过代码来访问后台sqlserver 数据

南香里
使用ADO连接,然后就可以操作数据,建议你下载一些源码看。


搜索到相关文章,你看看

Access使用ADO访问Sql Server数据的方法简介



一、 什么是ADO连接
用ADO设计程序都要使用连接对象,创建连接对象有点像打电话,打电话时首先要知道对方的有关信息如电话号码,拔电话号码的过程,就是在与对方建立电话通讯连接的过程。建立连接后就可以发送或接收信息了,当断开连接后,通讯就中断。
ADO的连接过程大致如此,就连接时得知道想要连接的数据源的一些基本信息。当然了要与OLEDB数据源连接的话,至少要知道一些具体提供者的信息,也就是连接到OLEDB数据源的一些数据标准,并在连接口对具体的提供者进行一些设置,使用OLEDB技术能够实现与各种各样数据服务的连接,进行连接之后ADO的程序设计就独立于提供者了,可以不用考虑具体厂商不同数据格式的有关详细信息,就可以使用ADO开发应用程序了。
二、 连接对象
在ADO程序设计模型中,要用连接对象在应用程序与数据源之间建立一条通信线路。在ADO中可以简单地使用两个声明去建立连接。
第一个声明定义了一个新的连接对象,并给连接对象一个变量名称。
Dim cnt as new adodb.connection
注意:ADODB前缀指出连接对象是ADO连接。这样使用前缀是为了避免同时使ADO 和DAO 时所造成的混乱。
New 可以理解为”实例化”一个新的对象,也就是对ADO中通用对象进行具体化为一个实例,并给它一个名称,当然可实例化多个实例给它不同的名称,它们各行其事,然后可以设置或使用对象中属性、方法。当执行上面语句时,实际上是把ADO中的connection连接对象作为一个模板,在内存中创建一个名称为CNT的adodb.connection对象的临时拷贝。
上面语句也可以写成:
Dim cnt as adodb.connection
Set cnt=new adodb.connection
第二个声明用连接对象的open方法去实际建立与数据源的连接。连接的详细信息显示在字符连接串中。
Connectionname.open connectionstring
下面是一个创建与Access数据库test.mdb连接的例子。
Dim Cnt as new adodb.connection
Cnt.OPen “data sourc=c:/test.mdb;provider=microsft.jet.oledb.4.0”
创建连接对象之后,就可用它作为一个管道,用以发送请求和接收已连接数据源中的数据。建立一个连接就能够发出一个或多个的数据请求。使用连接对象,还可以向数据源中发送一些指令,它们执行一些不返回数据的操作,如更新数据或删除数据。
       ADO连接字符串,包含有与特定数据源连接所需的特定元素的名称。尽管不同数据源所需要的连接信息有诸多不同之处,但是,连接字符串有一个通用的结构,并且大多数字符串都包含有几个关键的元素。
连接字符串中最基本的单元称之为参数。参数有参数名,当然,为了与特定的数据源连接,还必须赋于参数一个的值。每个参数都要符合下面显示的通用格式。注意,在每个参数后面都要加一个分号(; ) ,这样,一个连接字符串中就可包含多个参数。
例如,所有的ADO 连接都要使用OLEDB提供者。在连接字符串中,Provider 参数具体指出连接时应该用哪一个OLEDB提供者。下面是连接时最常用的四个参数:
Provider 是OLEDB提供者的名称,为了与Jet、Sql Servers之类的数据源建立连接,就要使用Provider这个参数。在编写程序的计算机上,要安装OLEDB提供者软件,在这个软件中定义提供者的名称。名称为SQLOLEDB的提供者指的是Sql Server。
“provider=sqloledb;”
Data Source 这个参数的值通常是网络服务的名称或者是文件的名称。如果要与网络服务数据源相连接,如SQL Server,那么参数值就是服务(或服务器)的名称。若数据源是基于文件的,如Access 或dBase ,那么参数值是一个完整的路径名。
“Data Source=o:/test.mdb;”
这个完整的路径名可以惟一地确定一个特定的文件。o:/test.mdb 指的是o 驱动器上根目录的test.mdb文件。记住,当用字母(如o)表示网络上的驱动器时,其他用户也许没有同一驱动器映射;在另一台计算机上,o也许不是指同一资源。为了避免混淆,可以用计算机名称代替驱动器字符,如//computer。这样,完整的路径名就变为//computer/test.mdb 。
User ID 这是用户登录时的名称,或者是用户的名称。为了控制对数据资源的访问,大多数网络数据源系统都有某种安全机制,让用户在登录时输入密码。基于文件的数据源也许疏忽了内部的安全。例如,Access 有一种默认状态下没被激活的安全机制,只有具体激活某一给定文件上的安全机制,这种安全机制才会发挥作用。但是,即使在安全机制处于没被激活状态,系统也会自动产生用户名Admin,并把它作为默认的登录名称.”User ID=Admin;”
Password 这个参数是一个密码,它用于识别用户和允许访问数据源。下面的例子就是作为连接字符串参数的密码。”Password=123456;”,如果UserID 不要求使用Password参数,那么Password参数通常是空的。”Password=;”
完整的连接串是一个块文本,它列出了必需的参数和可选的参数。下面例子是与名称为mySqlSvr的SQL server 相连接,用户为sa ,密码为123456 。在最后一个参数后面的分号是可有可无的,原因是它出现在连接串的最末端,后面不再有其他的参数。
Cnt=“Provider=SQLOLEDB;User ID=sa;password=123456;data source=mysqlsvr;”
注意,由于必须在一个块文本中包含所有的参数,因而要用一对双引号把连接字符串引起来连接串中的参数不分前后,并且由于每个参数要分别命名,因而可以按任意的次序编写连接字符串。参数的次序可任意放置。一般隋况下,Povider 参数在第一位,但这并不是强制要求的
三、 打开一个连接
可以用两种方法打开一个支持ADO数据源的连接。
1、设置Connectionstring属性。每个连接对象都有Connectionstring属性。下面的例子设置Connectionstring属性,然后执行连接对象的Open方法连接到数据源。如果连接成功,连接对象的State属性就返回数值1,否则就返回数值0。
Sub opencnt()
       Dim cnt as new connection
       Cnt.connectionstring=“ Provider=SQLOLEDB;User ID=sa;password=123456;data source=mysqlsvr;”
       Cnt.open
       Msgbox cnt.state
End sub
2、读置connectionstring参数。把连接字符串文本作为Open方法的参数,可以减少一个赋值语句,示例:
Sub opencnt2()
       Dim cnt as new connection
       Cnt.open connectionstring:=_
“ Provider=SQLOLEDB;User ID=sa;password=123456;data source=mysqlsvr;”
       Msgbox cnt.state
End sub
若能确保连接字符串成为Open方法的第一个参数,还可以把参数名省略。
Cnt.open
“ Provider=SQLOLEDB;User ID=sa;password=123456;data source=mysqlsvr;”
在应用程序中通常可以把一个连接字符串用到许多地方,所以可以把连接字符串文本赋值给一个变量,在模块的部分赋值变量,可以在模块的任何程序中使用,例如:
Const Cntstr=“ Provider=SQLOLEDB;User ID=sa;password=123456;data source=mysqlsvr;”
Sub opencnt3()
       Dim cnt as new connection
       Cnt.open cntstr
       Msgbox cnt.state
End sub
如果要使连接字符串在程序中的任何部分都可以使用,还可以把它声明为公共变量,例如:
Public Const Cntstr=“ Provider=SQLOLEDB;User ID=sa;password=123456;data source=mysqlsvr;”
四、 ADO与特定提供者的连接方法
ADO的连接对象虽然提供了同一特性的连接方法,但是在与具体数据源连接时,要求连接字符的格式内容要与数据提供者相匹配。
1、 ODBC数据源
对ODBC来说,OLEDB提供者称为MSDASQL(Microsoft Data Access SQL),使用这个提供者ADO可以连接任意的ODBC数据源。
如果数据源的固有OLEDB提供者可用,那么就把它作为提供者。
如果数据源的固有OLEDB提供者不可用,那么就用MSDASQL作为提供者。
1.1 使用ODBC DSN
ODBC系统的使用依赖于DSN(数据源名称),通过ODBC Manage可以创建DSN连接,创建连接后就可以把DSN作为连接的一部分,用于创建ADO连接。
在使用ODBC DSN时,所用数据源类型驱动程序信息,存储在ODBC.INI文件中,而不是显示在连接字符串中。
一个ODBC连接字符串有5个参数。
Provider=MSDASQL 由于MSDASQL是ADO默认的OLEDB ODBC的提供者,所以不需要把Provider=MSDASQL这个参数包含在连接字符串中。但明确声明提供者的名称,可以增加代码的可读性。再就是ADO的连接字符串需要Provider这个参数,而不是ODBC需要 Provider这个参数。
DSN 这个参数是ODBC连接字符串中唯一必须的参数。如果使用的是用户DSN或系统DSN这个参数的值就是在ODBC Manager中已经创建的DSN的名称。
File DSN 当把DSN文件作为ODBC DSN时,这个参数就是DSN文件完整的路径名。DSN文件可以存储在任意的本地驱动器上和网络驱动器上。
Database 这个参数可有可无。如果Sql Server中有多个数据库,要具体指出应该打开Sql Server中的哪个数据库,可用这个参数指明。如果忽略了这个参数,建立连接后将自动打开默认的数据库。
UID/PWD 这个是指用户名和密码。
例如用DSN实现与Sql Server的连接。在使用ODBC DSN时,所用数据源类型驱动程序信息,存储在ODBC.INI文件中,而不是显示在连接字符串中。
由于驱动信息没有出现在连接字符中,所以从连接中并不能区分出数据源是ACCESS还是Sql Server或其他数据库。
Sub dsntosqlserver()
Dim cnt as new adodb.connection
Cnt.open "DSN=SQLSVRTEST;UID=SA;PWD=123456 "
Msgbox cnt.state
End sub
虽然ODBC连接不要求具体指出OLEDB提供者,但若想让代码清晰显示建立的连接类型,可考虑把提供者的名称包含在连接字符串中。
Cnt.open "Provider=MSDASQL;DSN=SQLSVRTEST;UID=SA;PWD=123456 "
当数据源包含多个数据库时,如Sql Server,则可用DATABASE参数具体指出连接的是哪一个数据库。
Cnt.open "Provider=MSDASQL;DSN=SQLSVRTEST;UID=SA;PWD=123456;database=cwbase1 "
使用File DSN时,则可把File DSN参数包含在连接字符串中,这个参数的值要求中File DSN文件的完整路径名。
使用ODBC DSN方法建立连接的一些问题:
    驱动程序名称没有包含在连接字符中,造成所用数据源的种类不清楚。
    比较繁琐,它要求必须在每一个使用应用程序的桌面是创建DSN,或每个桌面必须能访问网络共享驱动器上的FILE DSN。
1.2不用DSN建立与ODBC数据源的连接
通过创建不依赖DSN的ODBC连接字符串上述问题,要想不用DSN只须把原来存储在DSN中的信息包含在连接字符串中就可以了。
例如:用ODBC连接字符串连接Access的MDB数据库,连接字符串中包含一个DRIVER参数和一个数据库参数DBQ,也就是把原来存储在DSN中的信息都包含在连接字符串中了,所以不用DSN也可以建立连接。
Sub nodsn()
Dim cnt as new adodb.connection
Cnt.open "DRIVER=Microsoft access driver ( *.mdb);" &_
            "DBQ=c:/test.mdb"
Msgbox Cnt.state
End sub
如果想要知道ODBC驱动程序的准确名称,,可以通过ODBC管理器把要使用的数据源创建一个文件型的DSN,然后用NOTEPAD打开DSN文件,把参数复制、粘贴到代码中就可以了。
虽然ADO有专门为Sql Server提供的OLEDB提供者,但也可使用的ODBC连接到Sql Server,而它当初是专门为DAO设计的。
Sub ODBCSQL()
Dim cnt as new adodb.connection
Cnt.open "DRIVER={SQL SERVER};SERVER=127.0.0.1;DATABASE=CWBASE1;" &_
            "UID=sa;PWS=123456"
Msgbox Cnt.state
End sub
由于可以把所必需的信息包含在程序代码中,对于需要与ODBC数据源相连接的应用程序来说,使用无DSN连接就使应用程序的维护和分发更为简单。
2、 Microsoft Jet 数据源
连接字符串参数Provider 设置为:Microsoft.Jet.OLEDB.4.0
此提供者的典型连接字符串是:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassword;"
该字符串包含下列关键字:
关键字
说明
Provider
指定 OLE DB Provider for Microsoft Jet
Data Source
指定数据库路径和文件名(例如,c:/Northwind.mdb)。
User ID
指定用户名称。如果未指定此关键字,则默认使用字符串 "admin"
Password
指定用户密码。如果未指定此关键字,则默认使用空字符串 ("")
Jet Engine 4.0 作为提供者与Access数据库文件连接。
Sub jetoledb1()
Dim cnt as new adodb.connection
Cnt.open "Provider=Microsoft.jet.oledb.4.0;data source=c:/test.mdb;"
Msgbox Cnt.state
End sub
Jet Engine 4.0 作为提供者与含有数据库信息有EXCEL电子表格文件连接。也可根据excel电子表格所固有的特性,使用一些参数, 可以更具体地定义使用电子表格中的数据。
TABLE=sheets1$ 指明电子表格中的哪个工作表。
HDR=Yes 指出包含工作表中的第一行字段名,NO就是不包含第一行字段名。
Sub jetxls()
Dim cnt as new adodb.connection
Cnt.open "Provider=Microsoft.jet.oledb.4.0;Excel 8.0;database=c:/test.xls;"  &_
            "HDR=YES;TABLE=sheets1$"
Msgbox Cnt.state
End sub
Jet Engine 4.0 作为提供者与文本文件(CSV)的连接。
Sub jetTEXT()
Dim cnt as new adodb.connection
Cnt.open "Provider=Microsoft.jet.oledb.4.0;Text;FMT=Delimited;HDR=NO;" &_
"DATABASE=C:/;TABLE=TEST.TXT"
Msgbox Cnt.state
End sub
Jet Engine 4.0 作为提供者与DBASE DBF数据文件的连接。
Sub jetdbf()
Dim cnt as new adodb.connection
Cnt.open "Provider=Microsoft.jet.oledb.4.0;dbase 5.0;HDR=NO;" &_
"DATABASE=C:/;TABLE=TEST.dbf"
Msgbox Cnt.state
End sub
电子表格、文本文件、DBF等数据源都是单独的文件,并且都是非关系型数据库。在这种非型数据源中,每个表都是单独的一个文件。为了让这个单独文件适合关系模型,就把包含单独单独文件的文件夹具体指明为数据库(虚构的数据库)。这样虚构的数据库可以让这种非关系型数据源适合于ODBC模型。
3、 Sql Server 数据源
本文前面已经提到,ADO使用ODBC驱动程序可以建立与Sql Server数据库的连接。但是最好的方法是用OLEDB Provider for Sql Server直接建立连接。
OLEDB Provider for Sql Server的提供者是:
"Provider=SQLOLEDB" 或"Provider=SQLOLEDB.1" 末尾的数字代表的版本号。
Sub sqlsrv()
Dim cnt as new adodb.connection
Dim cntstr as string
Cntstr="provider=SQLOLEDB;" &_
       "data source=cwserver;" &_ ‘服务器名或IP或是本地服务写(LOCAL),也可写成127.0.0.1
        "initial catalog=cwbase1" ‘要连接的数据库
"user id=sa;password=123456"
Msgbox cnt.state
End sub
注意:OLEDB对连接字符串中的参数非常敏感。OLEDB参数名data sourcd和user id在书写时必须用空格隔开。
ADO的连接字符串也可以选择使用ODBC风格的参数名,在连接字符串中可以用SERVER代替DATA SOURCE,用DATABASE代替initial catlog,用UID代替USER ID,用PWS代替PASSWORD。
Sub sqlsrv()
Dim cnt as new adodb.connection
Dim cntstr as string
Cntstr="provider=SQLOLEDB;" &_
       "SERVER=cwserver;" &_ ‘服务器名或IP或是本地服务写(LOCAL),也可写成127.0.0.1
        "DATABASE=cwbase1" ‘要连接的数据库
"UID=sa;PWD=123456"
Msgbox cnt.state
End sub



(ADO_RDO-相关文章技巧链接):
直接获取access、SQL Server等数据库数据

分享