会员登录 - 用户注册 - 网站地图 Office中国(office-cn.net),专业Office论坛
当前位置:主页 > 技巧 > Access技巧 > 编程心得绝招 > 经验泛谈 > 正文

理解与掌握ACCESS--经验谈

时间:2003-12-13 23:48 来源:Access中国 作者:VB编程乐… 阅读:
理解与掌握access
---- 摘要:本文從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 編程通過數据訪問對象(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 宏使用數据訪問對象(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 轉換為字符型空串或數值型零值。

(责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
上一篇:没有了
下一篇:Access键盘快捷键大全[下]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价: