access 中通過程序或ADO訪問sqlserver 數據庫的詳細教程

2004-09-18 23:07:00
qkhsn-Office交流網
轉貼:
Office中國
1751

前端軟件用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等數據庫數據

分享