office交流網--QQ交流群號

Access培訓群:792054000         Excel免費交流群群:686050929          Outlook交流群:221378704    

Word交流群:218156588             PPT交流群:324131555

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

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

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

分享
北京十一选五基本走势