設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

Excel 2000訪問遠程數(shù)據(jù)的四種方法

1970-1-1 08:00| 發(fā)布者: 佚名| 查看: 1575| 評論: 0

 Excel 2000作為一個電子表格軟件,它不僅有強大的數(shù)據(jù)處理能力,而且它的報表功能也是十分強大。因而常常用Excel 2000去調(diào)用Access、SQL Server、Oracle、DB2等數(shù)據(jù)庫軟件建立的大型數(shù)據(jù)庫的內(nèi)容。用戶可以在工作表中對這些數(shù)據(jù)進行篩選、排序、查詢、編輯和打印報表,十分方便,這也是大多數(shù)人都熟悉的。但如何去調(diào)用這數(shù)據(jù)呢?本人在這里提供4種方法。
    下面四種方法必須要先創(chuàng)建一個數(shù)據(jù)源,我們以SQL Server7.0內(nèi)的樣本數(shù)據(jù)庫pubs為例。在控制面板/ODBC數(shù)據(jù)源/系統(tǒng)DSN,單擊增加按紐,選取SQL Server驅(qū)動程序,建立一個與pubs數(shù)據(jù)庫連接的叫pubs名稱數(shù)據(jù)源。
           方法一:
    在Excel 2000中,選擇 數(shù)據(jù)/獲取外部數(shù)據(jù)/新建數(shù)據(jù)庫查詢,然后按向?qū)У奶崾疽徊揭徊阶,最后將?shù)據(jù)返回Excel 2000中就行了
    這種方法是大家常用的,也是最方便的。但這種方法只能對遠程數(shù)據(jù)進行查詢,不能對遠程數(shù)據(jù)進行增加和修改。
    方法二:
    這種方法需要VBA編程(方法三、方法四也一樣),在Visual Basic編程中,我們經(jīng)常用ADO來訪問數(shù)據(jù)。ADO是Microsoft提供的針對各種各樣數(shù)據(jù)源的新型高級編程接口。它支持大多數(shù)據(jù)庫操作,在Excel 2000中應(yīng)用ADO來訪問數(shù)據(jù),是十分理想的方法?纯聪旅嬉粋實例:
    Sub opendb()
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    cn.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=pubs"
    rs.Open "select * from authors", cn
     Range("a1").CopyFromRecordset rs
     Rs.close
    cn.Close
    End Sub

    宏中第一、二句定義了一個ADO 的Connection對象和一個Recordset對象,第三、四句創(chuàng)建了一個ADO 的Connection對象和一個Recordset對象。第五句連接到前面我們建立的數(shù)據(jù)源pubs數(shù)據(jù)庫。第六句是ADO 的Recordset對象執(zhí)行一條SQL里select語句。在這也可以執(zhí)行insert,update等等SQL語句的。第七句是將rs里的記錄返回當(dāng)前表里。第八、九句是關(guān)閉連接。運行前要在Excel 2000工具/引用中引用ADO的庫文件。
           在Excel 2000中應(yīng)用ADO對象,不僅可以對數(shù)據(jù)庫進行查詢,而且可以作增加,修改數(shù)據(jù)庫的記錄,甚至可以調(diào)用SQL SERVER7.0的存儲過程,加強Excel 2000對數(shù)據(jù)庫處理能力。
    方法三:
    Excel 2000的功能是十分強大的,它自帶了一個ODBC加載宏,我們在Excel 2000中引用這個宏文件xlodbc.xla,就可以通過下面的方法去訪問我們建立的數(shù)據(jù)源了
    Sub opendb()
        Dim id as integer
        id = SQLOpen(“DSN=pubs”)
        SQLExecQuery id, “select * from authors”
        Set output = Worksheets("Sheet1").Range("A1")
        SQLRetrieve id, output, , ,
        True SQLClose id       
    End sub

    第二句是調(diào)用xlodbc.xla宏中的SQLOpen函數(shù)建立一個對數(shù)據(jù)庫pubs連接,第三句是SQLExecQuery函數(shù)執(zhí)行了一條select語句,id是由 SQLOpen 函數(shù)返回的唯一連接標(biāo)識,第四句是SQLRetrieve函數(shù)將SQLExecQuery函數(shù)執(zhí)行的查詢的結(jié)果返回到Excel 2000中。
           這種編程方法可以說來的容易,用得方便。也是一種好的訪問遠程數(shù)據(jù)方法。
    方法四:
    這種方法是使用API方法,下面是一個實例
        '分配環(huán)境句柄
    res = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HENV, hEnv) 
    '設(shè)置環(huán)境屬性
        res = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, 0)
        '分配數(shù)據(jù)庫連接句柄
        res = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, hSvr)
    '連接到數(shù)據(jù)源
    sConnect=“DSN=pubs;DATABASE=pubs“
    res=SQLDriverConnect(hSvr,ByVal,0&,sConnect,Len(sConnect),sConnOut, Len(sConnOut), _ nConnOutLen, 0)
    sSql =“select * from authors“
    res = SQLExecDirect(hSel, sSql, Len(sSql))
    '將記錄返回當(dāng)前表里
    res=SQLNumResultCols(hSel, Nc)
    Do While (SQLFetch(hSel) <> SQL_NO_DATA_FOUND)
    J=j+1
    FOR I=1 TO Nc
       res = SQLGetData(hSel, I, SQL_C_CHAR, tmp, 512, pl)
       Cells(j, i) =tmp
    Next I
    Loop
    '釋放數(shù)據(jù)庫連接句柄
          res = SQLAllocHandle(SQL_HANDLE_STMT, hSvr, hSel)
    '釋放數(shù)據(jù)庫連接句柄
          ret = SQLFreeHandle(SQL_HANDLE_ENV, hEnv)

    這種方法比較復(fù)雜,調(diào)試也比較困難,但運行速度快,在進行大量查詢數(shù)據(jù)和自己在API調(diào)用方面比較熟時,可以用這個方法。在用上面的實例時,要做API聲明和常量的定義。

最新評論

相關(guān)分類

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-13 08:37 , Processed in 0.099688 second(s), 16 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部