理解與掌握ACCESS–經驗談

來源:互聯網
上載者:User
摘要:本文從xBase 使用者的角度對比分析了ACCESS 與xBase 的差異並進一步闡述了ACCESS 中的資料庫物件及編程方法。 

---- 關鍵詞:ACCESS----Foxpro----資料庫 

---- 微軟公司有兩個流行的案頭資料庫開發工具,一個是其自行研製開發的基於WINDOWS 環境的ACCESS,另一個是其兼并FOX 公司而得到的Foxpro。通常將dBASE、FoxBase、Foxpro 等統稱為xBase 在我國擁有大量的使用者,隨著微軟公司的ACCESS 在國際案頭資料庫市場上的迅速崛起及中文OFFICE 在我國的深入普及,越來越多的使用者開始使用MSACCESS(中文OFFICE97 的組件之一),很多xBase 使用者也開始轉向或使用微軟公司的ACCESS。由於ACCESS的檔案組織、資料類型、程式設計語言、編程方法等 
與xBase 有較大的差異,致使不少xBase 使用者在學習ACCESS 時感到困惑,有些使用者甚至僅僅是因為從ACCESS 中找不到與xBase 相對應的命令而對ACCESS大加抨擊,從而放棄ACCESS 的學習。與xBase 相比, 
ACCESS 有很多先進特性,xBase 使用者一旦你掌握ACCESS 的基本概念與編程方法、改變“xBase 的思維方式”,就能利用已有的xBase 知識能夠很快地掌握ACCESS。本文從多方面對xBase 和ACCESS 進行對比分析,通過對比使傳統的xBASE 使用者更好地理解與掌握ACCESS。 

---- 壹、ACCESS 與xBase 的主要差異: 

---- 從大的方面說,ACCESS 的使用與編程方法 
同Visual Foxpro3.0 及Visual Foxpro5.0 的使用與編程方法非常相似,熟悉Visual Foxpro3.0 及以上版本的用 
戶會非常容易地學會ACCESS。沒有使用過Visual 
Foxpro 的傳統xBase 使用者在開始學習ACCESS 或Visual 
Foxpro 時,需要從思想上做較大的轉變,這是由於ACCESS 及Visual Foxpro 都是採用基於事件處理和面 
向對象的程式設計方法。下文中所談到的xBase 指的是Visual Foxpro 以下的版本。 

---- 檔案組織不同:用xBase 建立的系統通常包含很多不同類型的檔案,每一個表、程式、報表、查詢、索引、菜單等內容都是檔案的方式存放在磁碟上,可以通過專案檔對其他類型的檔案進行組織與管理;ACCESS 對資料庫的組織同大型後台資料庫系統(如SQL SERVER)的資料庫組織非常相似,不同資料或程式元素稱為對象,所有的 
對象都儲存在一個物理檔案中,而這個物理檔案被稱為資料庫。 

---- 程式設計語言不同:在傳統的xBase 中,表、記錄等資料操縱或是介面的設計採用的是xBase 命令進行編程,高版本的Foxpro 中引入了部分SQL 語句(如SQL-SELECT)主要用來完成資料的查詢;ACCESS 中對錶、記錄等資料操作主要通過SQL 實現,程式及事件代碼的編寫採用Visual Basic for Application(低版本的ACCESS 用access basic 編程),簡單的程式設計用宏。Visual Basic 是更為通用的程式設計語言,MS Office 的組件都可以用Visual Basic 進行編程。 

---- 編程方法不同:xBase 中採用面向過程的程式設計方法,即使是一個使用者輸入介面的設計也需要較長的一段xBase 程式;ACCESS 中採用物件導向的程式設計方法,資料處理功能的完成通過改變對象的屬性或執行對象方法實現,程式段通常構成事件程序、對象方法、函數,ACCESS 中較少會出現連續的長程式。此外,ACCESS 中具有欄位級、記錄級、表級資料參考完整性資料約束功 
能,交易處理功能和完備的安全機制。 

---- 貳、ACCESS 中的資料庫物件 

---- ACCESS 的資料庫視窗中包含六類不同的資料庫物件,它們分別是表(Table)、查詢(Query)、表單(Form)、報表(Report)、宏(Macro) 和模組(Module)。ACCESS的資料庫如同一個容器一樣包含了全部的資料 
庫對象,與Foxpro 的專案檔不同ACCESS 將這些對 
象儲存在一個檔案中。建立資料庫物件只需單擊資料庫視窗中的‘建立’按鈕,修改已有對象選擇對象然後單擊‘設計’按鈕。 

---- ACCESS 中的表:ACCESS 中的表等同於xBase 中的DBF檔案或Visual Foxpro 中的資料庫表。ACCESS 的表 
與xBase 的DBF 檔案比有如下新特點: 

  欄位名可多達64 位字元 
  可以設定欄位的輸入遮罩、預設值、值範圍。相當與xBase 中使用@?ET 語句中的PICTURE、DEFAULT、RANGE 等子句的作用。可以設定欄位與欄位間的關係(通過設定表  的屬性) 

---- 在ACCESS 中,不需要用專門的命令或操作來建立和維護索引檔案,按某欄位建立索引只需在該欄位的索引屬性中選擇特定的索引類型即可,索引的建立維護和使用都是通過ACCESS 系統來完成的,在xBase 中諸:Index on、set index to 等操作不必有使用者關心。 

---- 根據需要可在ACCESS 的資料庫中建立多個表,表與表之間能夠建立所謂的參照完整性關係,如同在xBase 中用set relation 、set skip 命令建立的多對一和一對多關聯性一樣,ACCESS 只需圖形介面操作就可完成一對多和多對一關聯性的建立並且通過連鎖刪除與連鎖更新來確保相關表中記錄之間關係的有效性,並且不能意外地刪除或更改相關資料。 

---- 使用ACCESS 表與使用xBase 的DBF 檔案的一個重要 
差別是所謂“開啟”的概念不同,xBase 中用USE 命令開啟DBF 檔案實質是在記憶體建立資料緩衝區提供資料通道,若想查看DBF 檔案中的資料需要再使用BROWSE 或其他命令,ACCESS 中開啟一個表相當於xBase 中USE + BEOWSE 命令。對錶中的資料進行處理而不顯示表中的記錄,在ACCESS 中通常有兩中做法,一種是用SQL 語句更新或改變資料,無須先開啟表後執行SQL 語句;另一種是用VBA 編程通過Data Access Objects(DAO)來操縱表,通過DAO 操縱表時,要開啟所謂的記錄集(Recordset),xBase 中的USE 命令與VBA(Visual BASIC for Application)中的Openrecordset方法的作用象類似。 

---- 查詢(Query):ACCESS 中的查詢本質上就是SQL 的資料操縱語,利用查詢可以通過不同的方法來查看、更改以及分析資料,相當於Foxpro 中的SQL SELECT 語句及Foxpro 的查詢。在ACCESS 中,對錶、記錄、欄位的多數操作都可通過查詢來完成,例如:在xBase 中使用很多的REPLACE ... WITH ... 命令在ACCESS 中應當用一個巨集指令查詢來完成(SQL UPDATE 
)。在ACCESS 中建立和使用查詢基本上等同於在後台資料庫(如:ORACLE、SQL SERVER)中使用SQL 命令,Microsoft Jet 資料庫引擎的SQL 符合ANSI SQL,ACCESS 
的SQL 實現了幾乎所有的ANSI SQL 功能,有些SQL 命令 
在ANSI SQL 中所沒有的。 

---- ACCESS 中選取查詢比Foxpro 中的SQL SELECT 命令使用起來更為方便靈活,在ACCESS 中,選取查詢在使用等同於表,可以在表與查詢間建立關係,查詢也可象表一樣作為表單和報表的記錄來源,利用查詢還能再建查詢。 

---- 表單(Form):表單是利用ACCESS 開發出系統的主要互動介面,在有些書刊上又把表單叫做表單,表單相當於xBase 中利用@?AY?ET 命令編寫用於實現所謂全螢幕編輯功能的程式,表單又近似於Foxpro 中的螢幕檔案(.SCX)。在ACCESS 中建立人機互動介面如同在Foxpro 中建立螢幕檔案需要建立表單對象。 

---- 報表(Report):ACCESS 的報表對象最接近xBase 中的報表檔案(FRX、FRM)。在xBase 中建立報表檔案之 
後需要用REPORT FORM ... 命令預覽或列印報表,ACCESS 中報表對象建立之後可直接在資料庫視窗中單擊‘開啟’按鈕預覽報表或是在宏或模組中用OPENREPORT 命令列印或預覽報表。 

---- 宏(Macro):宏是指一個或多個操作的集合,其中每個操作實現特定的功能,例如開啟某個表單或列印某個報表。宏可以使某些普通的任務自動完成。例如,可設定某個宏,在使用者單擊某個命令按鈕時運行該宏,以列印某個報表。在xBase 中沒有特定的檔案類型與ACCESS 的宏相對應,在ACCESS97 及以下的版本中,利用宏來建立用 
戶自訂菜單。 
---- 模組(module):ACCESS 的模組相當於xBase 中的程式檔案和過程檔案。每一個模組中可以包含一個或多個子程式、函數或屬性,子程式相當於Base 中的過程(Procedure)。 

---- 壹、ACCESS 中使用者介面設計 
---- 在資訊系統的開發中,使用者介面的設計佔有較大的工作量。ACCESS 中的使用者介面設計比xBase 中的使用者介面設計大大簡化,早期的xBase 版本中使用者介面的設計需要確定螢幕上顯示文字的座標位置然後使用者@ ?ay?et 命令書寫程式;Foxpro 中,使用者介面的設計有了較大的改進,設計使用者介面時,先建立螢幕檔案(.SCX),然後用產生器產生使用者介面的程式檔案(.SPR)。ACCESS 中建立使用者介面即建立資料庫表單對象(Form),Form 的建立與設計和多數基於WINDOWS 的開發工具(如:Visual 
BASIC)的介面設計一致,與xBase 的使用者介面設計有較大的差異,xBase 使用者應從以下幾個方面理解和把握ACCESS 的表單設計: 

---- 1. 理解表單與程式 

---- Foxpro 中,建立使用者互動介面需先建立螢幕檔案,螢幕檔案中又包含若干程式碼片段(CodeSnippet),利用產生器根據螢幕檔案產生副檔名為SPR 的程式檔案,程式碼片段被包含在程式檔案之中,執行程式檔案即出現互動式使用者介面。ACCESS 中,表單相當於螢幕檔案,表單有三種不同的視圖(VIEW)-- 設計檢視、表單檢視和資料工作表檢視。設計檢視模式用於設計或修改表單,表單設計好之後就可以以表單檢視或資料工作表檢視開啟表單即為使用者操作使用的互動介面。ACCESS 中不需要將表單產生程式碼,表單建好之後直接開啟表單或切換到表單檢視即可。Foxpro 中另人頭疼的事情之一是調試螢幕時反覆修改屏 
幕、產生程式碼、執行程式觀看運行效果,對螢幕檔案的任何微小改動都必須通過產生程式、執行程式才能看到結果,ACCESS 中無鬚生成過程,只需在設計檢視與表單檢視間切換即可知道表單修改後的效果。 

---- 表單模組與事件程序:在Foxpro 中,@?ET 、READ、ACTIVATE 等命令中都可帶有許多子句,如:最為常用的VALID 子句,子句通常跟一個使用者自訂函數,在用螢幕產生器建立螢幕檔案時,子句後的自訂函數的內容可直接輸入,這些子句用到的自訂函數程式段被稱為程式碼片段(CodeSnippet)。ACCESS 中,與Foxpro 中程式碼片段相對應的程式段是事件程序(Event Procedure),所謂事件程序是指一種自動執行的過程,用來對使用者或程式碼啟動的事件或系統觸發的事件作出響應。例如:在Foxpro 中若想在某一欄位的值輸入或修改之後執行某一段程式,則需要通過輸入程式碼片段建立VALID 子句及VALID 子句所需要的自訂函數;在ACCESS 中,某控制項(CONTROL)的值在輸入或修改之後欲執行某段程式需在該控制項的AfterUpdate 事件屬性的事件程序中輸入程式內容即可,當控制項的值發生變化之後發生After Update 事件系統就自動執行該事件對應的事件程序。ACCESS 中每一個表單都有與該表單相關聯的表單模組,表單模組中存放了所有該表單的事件程序和該表單的公用子程式和函數,表單儲存時該表單模組自動儲存。 

---- 2. 理解記錄來源(Record Source) 

---- 在Foxpro 中,建立螢幕檔案之前應先開啟相關的表,建立表與表之間的關係,螢幕檔案建立之後在儲存時系統會詢問是否儲存環境(Environment),若儲存環境則系統儲存了開啟的表,產生程式碼中包含有開啟和關閉表的命令。ACCESS 中表單的“資料環境”被稱為記錄來源(Record Source),記錄源可以是表、查詢或SQL 的SELECT 語句。ACCESS 的記錄來源比Foxpro 的“資料環境”提供了更大的靈活性,當ACCESS 表單的記錄來源是相互?關聯”的若干表時,ACCESS 中通過建立查詢或是使用SQL SELECT 語句作為記錄來源,而查詢與SELECT語句指定了相關的表及表間關係。 

---- 建立Foxpro 的螢幕檔案需先開啟相關表並儲存“資料環境”才能在產生程式時包含有開啟表的程式碼,ACCESS 表單的記錄來源只是在表單的記錄來源屬性中給出表、查詢名字或SQL SELECT 語句,記錄來源並不產生程式碼。表單在開啟時自動處理表、查詢及SELECT 語句的資料,並沒有什麼命令或語句來處理表、查詢的開啟問題。 

---- 3. 理解控制項、屬性及事件程序 

---- Foxpro 螢幕產生器介面中添加的文字框(TextBox)、列表框(ListBox)等項目在產生程式後對應記憶體變數或欄位變數,螢幕產生器中對文字框等項目的許多設定形成了產生代碼的@ ..GET語句的許多子句如:ENABLE 、DISABLE 、FONT、STYLE、DEFAULT、MESSAGE、RANGE 、COLOR 等,螢幕產生器中輸入的程式碼片段(Code Snippet)形成了程式中的自訂函數或過程和@?et 語句的VALID、WHEN 等子句。 
ACCESS 中,相當Foxpro 於螢幕產生器中文字框等項目的稱之為控制項(CONTROL)。Foxpro 中@?et 語句的子句在ACCESS 中是通過控制項的屬性來實現的,例如: 
Foxpro 中的@ .... Get text disable 語句,在ACCESS 中是 
將text 控制項的enabled 屬性值設定為False( 否);Foxpro中SHOW GET TEXT ENABLE 在ACCESS 中用指派陳述式Me!text.enabled=true 改變text 控制項的屬性。Foxpro 中的程式碼片段在ACCESS 中是通過事件程序實現的,例如:Foxpro 中@?et text valid check() 語句中包含有Valid 子句和check() 自訂函數,實現同樣的功能在ACCESS 中在text 控制項的Before Update( 或After Update)屬性值選擇‘[ 事件程序]’並輸入相應的程式碼。常見的Foxpro @?ET 語句的子句與ACCESS 的控制項屬性對應關係如下: 

Foxpro 子句 
ACCESS 控制項屬性 
FUNCTION 
Format 、Input Mask 屬性 
PICTURE 
Format 、Input Mask 屬性 
FONT 
Font color name size weight italic underline 等屬性 
STYLE 
Font italic underline 等屬性 
DEFAULT 
Default Value 
ENABLED|DISABLE 
Enabled 
RANGE 
Validation Rule、Validation Text 
SIZE 
Left 、top、height、width 
VILID 
Before Update、After Update 
WHEN 
On enter 、On Got focus 

---- 1. 在表單中“移動記錄指標” 

---- 通過foxpro 螢幕產生器建立的使用者介面中常常包含用於移動記錄的按鈕,通過單擊按鈕改變螢幕或視窗中目前記錄,foxpro 中實現該功能的方法一般是在按鈕變數的valid 子句的函數中增加指標移動語句如:skip、goto 、locate 等。XBase使用者初次使用ACCESS 表單時欲實現同等功能但往往不知如何下手,ACCESS 中實現表單中記錄導航可以通過以下三種方法: 

  在表單的左下角增加記錄導航控制按鈕(navigation button)使用Goto Record 宏或Find Record 宏使用Data Access Objects(DAO)改變當前表單的記錄 

---- 若只是在表單中前後移動記錄,不需要編寫程式,在表單的設計檢視將表單的navigation button值設定為true,則在表單時就會出現導覽按鈕,使用者通過單擊導覽按鈕前移、後移記錄。若想將記錄移到特定的記錄則必須通過用宏或VB 編程實現,例如:單擊表單中的CMD 按鈕下移三個記錄則在CMD 按鈕的on click 事件程序中輸入如下VB 語句: 

---- DoCmd.GoToRecord ,,,3 

---- 下面的樣本在當前表單中使用記錄集及FindFirst 方法將記錄定位到“姓名”欄位值為?張三”的記錄: 

Dim rst As Recordset 
    Dim strSearchName As String 
    Set rst = Me.RecordsetClone 
    strSearchName = " 張三" 
    rst.FindFirst " 姓名= " & strSearchName 
        If rst.NoMatch Then 
            MsgBox " 沒找到" 
        Else 
            Me.Bookmark = rst.Bookmark 
        End If 
    rst.Close 

---- 程式中Me.RecordsetClone 是由表單的RecordSource屬性指定的基礎查詢或基表的一個副本,Bookmark是記錄集的書籤,用來唯一標識表單基表、基礎查詢或SQL 語句中的特定記錄。例子中FindFirst方法先在表單記錄來源的記錄集副本中定位記錄,然後再將表單的記錄的位置移動到相同的位置。 

---- 壹、xBase 中的常用命令在ACCESS 中如何? 

---- 許多xBase 使用者初次使用ACCESS 時常常在ACCESS 中尋找與xBase 命令相當的語句、功能或實現方法,下表給出了常用的xBase 命令所對應的ACCESS 宏命令及VB 語句或實現方法: 

XBase 命令 
ACCESS 宏命令 
ACCESS VBA 語句 
ACCESS 操作 
USE < 表> 

OpenRecordset 方法 
通常不需要,處理表記錄時用 
BROWSE/EDIT 
OpenTable 
Docmd.opentable 
在資料庫視窗直接開啟表 
INDEX ON 

指定表欄位的索引屬性 
SORT ON 

通過工具列的按鈕或菜單上命令 
REPLACE 

使用SQL 語句 
SUM AVER 等 

Dsum() 等函數 
使用SQL 語句 
GOTO 
GotoRecord 
Move 方法 
使用記錄導覽按鈕 
SKIP 
GotoRecord 
Move 方法 
使用記錄導覽按鈕 
LOCATE 

FindFirst 方法 
通過工具條或功能表命令尋找與過濾操作 
TOTAL 

使用SQL 語句 
壹、ACCESS 中的資料類型 

---- xBase 使用者在初次使用ACCESS 時對ACCESS 表的欄位類型特別是數值型欄位類型不適應。正是由於對ACCESS 的資料類型缺乏足夠的瞭解,使得很多使用者在開發過程中出現了一些問題。ACCESS與xBase 表的欄位類型及其對應關係見下表: 

ACCESS 中表的欄位類型 
xBase 中庫的欄位類型 
字元型(Text) 
字元型(Character) 
數值型( 短整型、長整型、單精確度、雙精確度) 
數值型(Numeric) 
貨幣型(Currency) 
數值型(Numeric) 
備忘型(Memo) 
備忘型(Memo) 
日期時間型(date/Time) 
日期型(Date) 
邏輯型(Yes/No) 
邏輯型(Logical) 
OLE 對象型(OLE Object) 
通用型(General) 

---- XBase 使用者初次使用ACCESS 時常遇到的問題之一是ACCESS 表中的數值型欄位類型問題,在xBase的DBF 檔案中定義數值型欄位需給出欄位類型、寬度和小數位元,在記錄的數值型欄位存放資料時,xBase 只儲存規定的小數位元並自動處理四捨五入問題,ACCESS 中表的數值型欄位同xBase 的數值型欄位不同,在表中的欄位存放數值型資料需將欄位設定為短整型、長整型、單精確度、雙精確度或貨幣型中的一種,在數值欄位儲存資料時不能儲存固定長度的小數位元,也不能自動處理小數的四捨五入問題。儘管欄位屬性中有DecimalPlaces 和Format,但這兩個屬性只是確定資料的顯示方式而不是保留特定的小數位元,使用者必須在儲存數值資料時自行處理保留的小數位元及四捨五入問題。 

---- XBase 使用者使用ACCESS 表時常遇到另一個問題是欄位的NULL 值問題,xBase 中,若欄位沒輸入值,則字元型欄位為空白格串、數值型欄位為零值;ACCESS 中,若欄位沒輸入值則欄位的值為NULL(空值),NULL 是ACCESS 中的特殊常量表示沒值,NULL 不能賦予非Variant 變數。通過DAO 訪問記錄的欄位時,使用NZ()函數將NULL 轉換為字元型空串或數值型零值。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.