|
廢話:學(xué)Access我一直認(rèn)為沒有必要,學(xué)深點(diǎn)吧,沒有能力,學(xué)淺點(diǎn)吧,沒有意義,因?yàn)橐话愕那闆r用Excel已經(jīng)足夠用了,且更為方便。不過閑來無事,還是自學(xué)了一點(diǎn),如果有人跟我一樣無聊的話,倒不妨跟我學(xué)學(xué),以避免自己浪費(fèi)太多的時(shí)間。
要學(xué)之前,為了避免象我?guī)讉€(gè)星期以前一樣一頭霧水,先介紹幾個(gè)我自己學(xué)時(shí)用的我認(rèn)為值得下載的資料,當(dāng)然首先先要下載安裝好Access2003。一個(gè)是《Access2000VBA一冊通》,一個(gè)是《Microsoft Office Access 2003 Visual Basic 參考》,一個(gè)是《access編程-操作(宏)》。
下面先談?wù)勎覍?/SPAN>Access2003的初淺認(rèn)識:
表,沒什么可說的,自然是用來存放基本數(shù)據(jù)的。
查詢,我認(rèn)為應(yīng)該是Access2003的核心了,對于Excel來說,強(qiáng)大的功能是函數(shù)的計(jì)算,對于Access2003來說,我覺得就是查詢了,通過查詢,完成數(shù)據(jù)的連接和重組等,以我的理解也就是“計(jì)算”。
窗體,窗體就是界面,如果不使用窗體的話,學(xué)Access2003基本就沒意義了,如果數(shù)據(jù)的輸入處理直接從表上或查詢中進(jìn)行,那用Excel就行了。窗體是Access2003的意義所在,也是麻煩所在啊。
報(bào)表,顧名思義就是報(bào)表羅。Access2003的報(bào)表的設(shè)置也是麻煩事,哪象Excel想怎樣就怎樣,不過誰叫你想什么都自動呢,手動有時(shí)就是靈活嘛。
Access2003VBA主要理解幾個(gè)概念:
屬性,比如我的名字,“名字”就是我的屬性。屬性的設(shè)置有兩種方式,不變的,就在屬性表中設(shè)置好了,比如默認(rèn)值什么的。需要變動的可以在VBA語句中設(shè)置,比如,要讓空值時(shí)按鍵不起作用,當(dāng)然只能在VBA語句中設(shè)置了。
方法,比如我吃飯,“吃飯”就是方法,可以理解為“動作”。各種的方法就是各種的“動作”。
事件,比如中午時(shí)我吃飯,“中午時(shí)”就是事件,就是“動作”發(fā)生的時(shí)間羅。
寫VBA語句就是說明“在什么時(shí)候,什么東東做什么或什么東東的屬性改成什么”
接下來言歸正傳,既然查詢是核心,也起著承上啟下的作用,所以先把我對查詢的總結(jié)分享給初學(xué)者。
(懶人需要相關(guān)示例的可聯(lián)系QQ:188291180)
查詢我認(rèn)為可分成兩類,一類包括簡單查詢、聯(lián)接查詢、聯(lián)合查詢,這類查詢只能用手動組建。另一類包括追加查詢、刪除查詢、生成表查詢、數(shù)據(jù)定義查詢,這類查詢主要通過VBA語句完成,屬自動組建。
| 類別 |
說明 |
SQL語句/VBA語句 |
示例文件名 |
| 簡單查詢 |
多字段 |
SELECT A班語文成績.姓名, A班語文成績.語文成績 |
簡單查詢01 |
| |
|
FROM A班語文成績; |
|
| 簡單查詢 |
單字段 |
SELECT 姓名 |
簡單查詢02 |
| |
|
FROM A班語文成績; |
|
| 簡單查詢 |
全字段 |
SELECT * |
簡單查詢03 |
| |
|
FROM A班語文成績; |
|
| 簡單查詢 |
DISTINCT |
SELECT DISTINCT A班語文成績.姓名 |
簡單查詢04 |
| |
|
FROM A班語文成績; |
|
| 簡單查詢 |
DISTINCT |
SELECT DISTINCT A班語文成績.姓名, A班語文成績.性別 |
簡單查詢05 |
| |
|
FROM A班語文成績; |
|
| 簡單查詢 |
TOP |
SELECT TOP 2 * |
簡單查詢06 |
| |
|
FROM A班語文成績; |
|
| 簡單查詢 |
TOP |
SELECT TOP 2 姓名, 語文成績 |
簡單查詢07 |
| |
|
FROM A班語文成績; |
|
| 簡單查詢 |
TOP /PERCENT |
SELECT TOP 73 PERCENT 姓名, 語文成績 |
簡單查詢08 |
| |
|
FROM A班語文成績; |
|
| 簡單查詢 |
WHERE/=>< |
SELECT * |
簡單查詢09 |
| |
|
FROM A班語文成績 |
|
| |
|
WHERE (((A班語文成績.姓名)="張三")); |
|
| 簡單查詢 |
WHERE/=>< |
SELECT * |
簡單查詢10 |
| |
|
FROM A班語文成績 |
|
| |
|
WHERE 語文成績=75; |
|
| 簡單查詢 |
WHERE/NULL |
SELECT * |
簡單查詢11 |
| |
|
FROM A班語文成績 |
|
| |
|
WHERE 語文成績 IS NOT NULL; |
|
| 簡單查詢 |
WHERE/LIKE |
SELECT * |
簡單查詢12 |
| |
|
FROM A班語文成績 |
|
| |
|
WHERE (((A班語文成績.姓名) Not Like "張*")); |
|
| 簡單查詢 |
WHERE/IN |
SELECT * |
簡單查詢13 |
| |
|
FROM A班語文成績 |
|
| |
|
WHERE (((A班語文成績.姓名) Not In ("張三","李四"))); |
|
| 簡單查詢 |
WHERE/BETWEEN |
SELECT * |
簡單查詢14 |
| |
|
FROM A班語文成績 |
|
| |
|
WHERE (((A班語文成績.姓名) Not Between "張三" And "李四")); |
|
| 簡單查詢 |
WHERE/BETWEEN |
SELECT * |
簡單查詢15 |
| |
|
FROM A班語文成績 |
|
| |
|
WHERE (((A班語文成績.語文成績) Not Between 60 And 80)); |
|
| 簡單查詢 |
WHERE/OR/AND |
SELECT * |
簡單查詢16 |
| |
|
FROM A班語文成績 |
|
| |
|
WHERE (((A班語文成績.姓名)='張三' Or (A班語文成績.姓名)='李四') AND ((A班語文成績.性別)="男")); |
|
| 簡單查詢 |
WHERE/ORDER BY |
SELECT * |
簡單查詢17 |
| |
|
FROM A班語文成績 |
|
| |
|
WHERE (((A班語文成績.語文成績)>60)) |
|
| |
|
ORDER BY A班語文成績.語文成績, A班語文成績.姓名; |
|
| 簡單查詢 |
ORDER BY/DESC |
SELECT * |
簡單查詢18 |
| |
|
FROM A班語文成績 |
|
| |
|
ORDER BY A班語文成績.語文成績, A班語文成績.姓名 DESC; |
|
| 簡單查詢 |
AS |
SELECT B.姓名 AS NAME, B.性別 AS XB |
簡單查詢19 |
| |
|
FROM A班語文成績 AS B; |
|
| |
|
|
|
| 聯(lián)接查詢 |
INNER JOIN |
SELECT A班語文成績.姓名, A班語文成績.性別, A班語文成績.語文成績, A班數(shù)學(xué)成績.數(shù)學(xué)成績 |
聯(lián)接查詢01 |
| |
|
FROM A班語文成績 INNER JOIN A班數(shù)學(xué)成績 ON A班語文成績.姓名 = A班數(shù)學(xué)成績.姓名; |
|
| |
|
說明:INNER JOIN 關(guān)鍵字在表中存在至少一個(gè)匹配時(shí)返回行,沒有匹配,就不會列出這些行。 |
|
| 聯(lián)接查詢 |
LEFT JOIN |
SELECT A班語文成績.姓名, A班語文成績.性別, A班語文成績.語文成績, A班數(shù)學(xué)成績.數(shù)學(xué)成績 |
聯(lián)接查詢02 |
| |
|
FROM A班語文成績 LEFT JOIN A班數(shù)學(xué)成績 ON A班語文成績.姓名 = A班數(shù)學(xué)成績.姓名; |
|
| |
|
說明:LEFT JOIN 關(guān)鍵字會從左表那里返回所有的行,即使在右表中沒有匹配的行。 |
|
| 聯(lián)接查詢 |
RIGHT JOIN |
SELECT A班語文成績.姓名, A班語文成績.性別, A班語文成績.語文成績, A班數(shù)學(xué)成績.數(shù)學(xué)成績 |
聯(lián)接查詢03 |
| |
|
FROM A班語文成績 RIGHT JOIN A班數(shù)學(xué)成績 ON A班語文成績.姓名 = A班數(shù)學(xué)成績.姓名; |
|
| |
|
說明:RIGHT JOIN 關(guān)鍵字會右表那里返回所有的行,即使在左表中沒有匹配的行。 |
|
| 聯(lián)接查詢 |
FULL JOIN |
SELECT A班語文成績.姓名, A班語文成績.性別, A班語文成績.語文成績, A班數(shù)學(xué)成績.數(shù)學(xué)成績 |
聯(lián)接查詢04 |
| |
|
FROM A班語文成績, A班數(shù)學(xué)成績; |
|
| |
|
說明:會從左表和右表那里返回所有的行。 |
|
| |
|
|
|
| 聯(lián)合查詢 |
UNION |
SELECT * FROM A班語文成績 UNION SELECT * FROM B班語文成績 UNION SELECT * FROM C班語文成績; |
聯(lián)合查詢01 |
| 聯(lián)合查詢 |
UNION |
SELECT 姓名,性別 FROM A班語文成績 UNION SELECT 姓名,性別 FROM B班語文成績 UNION SELECT 姓名,性別 FROM C班語文成績; |
聯(lián)合查詢02 |
| 聯(lián)合查詢 |
UNION/ALL |
SELECT 姓名,性別 FROM A班語文成績 UNION ALL SELECT 姓名,性別 FROM B班語文成績 UNION ALL SELECT 姓名,性別 FROM C班語文成績; |
聯(lián)合查詢03 |
| |
|
說明:UNION 內(nèi)部的 SELECT 語句必須擁有相同數(shù)量的列,列也必須擁有相似的數(shù)據(jù)類型(是指語句所指向的列,并非指實(shí)際的各表,實(shí)際的各表列數(shù)可不同,只要所取的列相同即可)。同時(shí),每條 SELECT 語句中的列的順序必須相同(是指不同的順序會造成聯(lián)合段的錯位)。默認(rèn)地,UNION 操作符選取不同的值。如果允許重復(fù)的值,應(yīng)使用 UNION ALL。另外,UNION 結(jié)果集中的列名總是等于 UNION 中第一個(gè) SELECT 語句中的列名。 |
|
| |
|
|
|
| 追加查詢 |
VALUES/全字段 |
Private Sub 追加_Click() |
窗體追加刪除查詢1 |
| 刪除查詢 |
|
DoCmd.RunSQL ("INSERT INTO A班語文成績副本 VALUES (10, 010, 'A','王山', '男', 60)") |
|
| |
|
End Sub |
|
| |
|
Private Sub 刪除_Click() |
|
| |
|
DoCmd.RunSQL ("DELETE * FROM A班語文成績副本 WHERE 編號=10") |
|
| |
|
End Sub |
|
| |
|
說明:“編號”字段為自動編號,追加的編號不能重復(fù),應(yīng)大于現(xiàn)有的編號,或?yàn)橐褎h除了的編號。 |
|
| 追加查詢 |
VALUES/選字段 |
Private Sub 追加_Click() |
窗體追加刪除查詢2 |
| 刪除查詢 |
|
DoCmd.RunSQL ("INSERT INTO A班語文成績副本 (學(xué)號,姓名,語文成績 )VALUES ('010','王山', 60)") |
|
| |
|
End Sub |
|
| |
|
Private Sub 刪除_Click() |
|
| |
|
DoCmd.RunSQL ("DELETE 姓名 FROM A班語文成績副本 WHERE 學(xué)號='010'") |
|
| |
|
End Sub |
|
| |
|
說明1:“編號”字段為自動編號可不寫,則表將按順序自動編號。 |
|
| |
|
說明2:刪除都是刪除一整行,不存在只刪除一字段內(nèi)容的情況。 |
|
| 追加查詢 |
表加表 |
Private Sub 追加_Click() |
窗體追加刪除查詢2 |
| 刪除查詢 |
|
DoCmd.RunSQL ("INSERT INTO A班語文成績副本 (學(xué)號,姓名,語文成績) SELECT 學(xué)號,姓名,語文成績 FROM B班語文成績副本 ORDER BY 姓名") |
|
| |
|
End Sub |
|
| |
|
Private Sub 刪除_Click() |
|
| |
|
DoCmd.RunSQL ("DELETE FROM A班語文成績副本 WHERE 班級 is null") |
|
| |
|
End Sub |
|
| |
|
說明:“編號”字段為自動編號可不寫,則表將按順序自動編號。 |
|
| |
|
|
|
| 生成表查詢 |
全字段 |
Private Sub 生成表_Click() |
窗體生成表查詢1 |
| 刪除查詢 |
|
DoCmd.RunSQL ("select * into A班語文成績備份 FROM A班語文成績 WHERE (語文成績>60)") |
|
| |
|
End Sub |
|
| |
|
Private Sub 刪除_Click() |
|
| |
|
DoCmd.RunSQL ("DELETE * FROM A班語文成績備份") |
|
| |
|
End Sub |
|
| |
|
說明:可以在不刪除表的情況下刪除所有的行。這意味著表的結(jié)構(gòu)、屬性和索引都是完整的 |
|
| |
|
|
|
| 生成表查詢 |
選字段 |
Private Sub 生成表_Click() |
窗體生成表查詢2 |
| 數(shù)據(jù)定義查詢 |
刪除表 |
DoCmd.RunSQL ("select 姓名,語文成績 into A班語文成績備份 FROM A班語文成績 WHERE (語文成績>60)") |
|
| |
|
End Sub |
|
| |
|
Private Sub 刪除表_Click() |
|
| |
|
DoCmd.RunSQL ("DROP TABLE A班語文成績備份") |
|
| |
|
End Sub |
|
| 生成表查詢 |
表加表 |
Private Sub 生成表_Click() |
窗體生成表查詢3 |
| 數(shù)據(jù)定義查詢 |
刪除表 |
DoCmd.RunSQL ("select A班語文成績.姓名,A班語文成績.語文成績,A班數(shù)學(xué)成績.數(shù)學(xué)成績 into A班成績備份 FROM A班語文成績 inner join A班數(shù)學(xué)成績 on A班語文成績.姓名 = A班數(shù)學(xué)成績.姓名") |
|
| |
|
End Sub |
|
| |
|
Private Sub 刪除表_Click() |
|
| |
|
DoCmd.RunSQL ("DROP TABLE A班成績備份") |
|
| |
|
End Sub |
|
| |
|
說明:生成表查詢?nèi)绻硪汛嬖诘膶⒈粍h除。生成表查詢可以用聯(lián)接語句以從兩表中取字段。生成表不產(chǎn)生主鍵。 |
|
| 數(shù)據(jù)定義查詢 |
增加列 |
Private Sub 增加列_Click() |
數(shù)據(jù)定義查詢1 |
| 數(shù)據(jù)定義查詢 |
刪除列 |
DoCmd.RunSQL ("ALTER TABLE B班語文成績副本 ADD COLUMN 備注 string,上學(xué)期語文成績 INT") |
|
| |
|
End Sub |
|
| |
|
Private Sub 刪除列_Click() |
|
| |
|
DoCmd.RunSQL ("ALTER TABLE B班語文成績副本 DROP COLUMN 備注 ,上學(xué)期語文成績 ") |
|
| |
|
End Sub |
|
| |
|
說明1:刪除表中列,但不能刪除主鍵列 |
|
| |
|
說明2:向表中增加列,應(yīng)注意表中自動編號只能有一個(gè),且列必須指定數(shù)據(jù)類型。 |
|
| 數(shù)據(jù)定義查詢 |
更改數(shù)據(jù)類型 |
Private Sub 更改數(shù)據(jù)類型_Click() |
數(shù)據(jù)定義查詢2 |
| |
|
DoCmd.RunSQL ("ALTER TABLE B班語文成績副本 ALTER COLUMN 語文成績 text") |
|
| |
|
End Sub |
|
| |
|
Private Sub 更改數(shù)據(jù)類型2_Click() |
|
| |
|
DoCmd.RunSQL ("ALTER TABLE B班語文成績副本 ALTER COLUMN 語文成績 int") |
|
| |
|
End Sub |
|
| |
|
說明:更改表中列的數(shù)據(jù)類型,主鍵的類型也可更改,但當(dāng)表中有數(shù)據(jù)時(shí),數(shù)據(jù)類型不能改為自動編號,要改應(yīng)選刪除所有數(shù)據(jù) |
|
| 數(shù)據(jù)定義查詢 |
刪除主鍵 |
Private Sub 刪除主鍵_Click() |
數(shù)據(jù)定義查詢3 |
| |
|
DoCmd.RunSQL ("ALTER TABLE B班語文成績副本 DROP CONSTRAINT PRIMARYKEY") |
|
| |
|
End Sub |
|
| |
增添主鍵 |
Private Sub 增添主鍵_Click() |
|
| |
|
DoCmd.RunSQL ("ALTER TABLE B班語文成績副本 ADD PRIMARY KEY (編號,學(xué)號)") |
|
| |
|
End Sub |
|
| |
|
說明1:刪除表中主鍵,注意PRIMARYKEY要連寫 |
|
| |
|
說明2:添加表主鍵,注意表中存在主鍵則顯示出錯,加一個(gè)或兩主鍵都要用括號括起。 |
|
|