廢話:學(xué)Access我一直認(rèn)為沒有必要,學(xué)深點(diǎn)吧,沒有能力,學(xué)淺點(diǎn)吧,沒有意義,因?yàn)橐话愕那闆r用Excel已經(jīng)足夠用了,且更為方便。不過閑來無事,還是自學(xué)了一點(diǎn),如果有人跟我一樣無聊的話,倒不妨跟我學(xué)學(xué),以避免自己浪費(fèi)太多的時間。
要學(xué)之前,為了避免象我?guī)讉€星期以前一樣一頭霧水,先介紹幾個我自己學(xué)時用的我認(rèn)為值得下載的資料,當(dāng)然首先先要下載安裝好Access2003。一個是《Access2000VBA一冊通》,一個是《Microsoft Office Access 2003 Visual Basic 參考》,一個是《access編程-操作(宏)》。
下面先談?wù)勎覍ccess2003的初淺認(rèn)識:
表,沒什么可說的,自然是用來存放基本數(shù)據(jù)的。
查詢,我認(rèn)為應(yīng)該是Access2003的核心了,對于Excel來說,強(qiáng)大的功能是函數(shù)的計算,對于Access2003來說,我覺得就是查詢了,通過查詢,完成數(shù)據(jù)的連接和重組等,以我的理解也就是“計算”。
窗體,窗體就是界面,如果不使用窗體的話,學(xué)Access2003基本就沒意義了,如果數(shù)據(jù)的輸入處理直接從表上或查詢中進(jìn)行,那用Excel就行了。窗體是Access2003的意義所在,也是麻煩所在啊。
報表,顧名思義就是報表羅。Access2003的報表的設(shè)置也是麻煩事,哪象Excel想怎樣就怎樣,不過誰叫你想什么都自動呢,手動有時就是靈活嘛。
Access2003VBA主要理解幾個概念:
屬性,比如我的名字,“名字”就是我的屬性。屬性的設(shè)置有兩種方式,不變的,就在屬性表中設(shè)置好了,比如默認(rèn)值什么的。需要變動的可以在VBA語句中設(shè)置,比如,要讓空值時按鍵不起作用,當(dāng)然只能在VBA語句中設(shè)置了。
方法,比如我吃飯,“吃飯”就是方法,可以理解為“動作”。各種的方法就是各種的“動作”。
事件,比如中午時我吃飯,“中午時”就是事件,就是“動作”發(fā)生的時間羅。
寫VBA語句就是說明“在什么時候,什么東東做什么或什么東東的屬性改成什么”
接下來言歸正傳,既然查詢是核心,也起著承上啟下的作用,所以先把我對查詢的總結(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班語文成績;
簡單查詢?nèi)侄蜸ELECT *簡單查詢03
FROM A班語文成績;
簡單查詢DISTINCTSELECT DISTINCT A班語文成績.姓名簡單查詢04
FROM A班語文成績;
簡單查詢DISTINCTSELECT DISTINCT A班語文成績.姓名, A班語文成績.性別簡單查詢05
FROM A班語文成績;
簡單查詢TOPSELECT TOP 2 *簡單查詢06
FROM A班語文成績;
簡單查詢TOPSELECT TOP 2 姓名, 語文成績簡單查詢07
FROM A班語文成績;
簡單查詢TOP /PERCENTSELECT TOP 73 PERCENT 姓名, 語文成績簡單查詢08
FROM A班語文成績;
簡單查詢WHERE/=><SELECT *簡單查詢09
FROM A班語文成績
WHERE (((A班語文成績.姓名)="張三"));
簡單查詢WHERE/=><SELECT *簡單查詢10
FROM A班語文成績
WHERE 語文成績=75;
簡單查詢WHERE/NULLSELECT *簡單查詢11
FROM A班語文成績
WHERE 語文成績 IS NOT NULL;
簡單查詢WHERE/LIKESELECT *簡單查詢12
FROM A班語文成績
WHERE (((A班語文成績.姓名) Not Like "張*"));
簡單查詢WHERE/INSELECT *簡單查詢13
FROM A班語文成績
WHERE (((A班語文成績.姓名) Not In ("張三","李四")));
簡單查詢WHERE/BETWEENSELECT *簡單查詢14
FROM A班語文成績
WHERE (((A班語文成績.姓名) Not Between "張三" And "李四"));
簡單查詢WHERE/BETWEENSELECT *簡單查詢15
FROM A班語文成績
WHERE (((A班語文成績.語文成績) Not Between 60 And 80));
簡單查詢WHERE/OR/ANDSELECT *簡單查詢16
FROM A班語文成績
WHERE (((A班語文成績.姓名)='張三' Or (A班語文成績.姓名)='李四') AND ((A班語文成績.性別)="男"));
簡單查詢WHERE/ORDER BYSELECT *簡單查詢17
FROM A班語文成績
WHERE (((A班語文成績.語文成績)>60))
ORDER BY A班語文成績.語文成績, A班語文成績.姓名;
簡單查詢ORDER BY/DESCSELECT *簡單查詢18
FROM A班語文成績
ORDER BY A班語文成績.語文成績, A班語文成績.姓名 DESC;
簡單查詢ASSELECT B.姓名 AS NAME, B.性別 AS XB簡單查詢19
FROM A班語文成績 AS B;
聯(lián)接查詢INNER JOINSELECT 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)鍵字在表中存在至少一個匹配時返回行,沒有匹配,就不會列出這些行。
聯(lián)接查詢LEFT JOINSELECT 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 JOINSELECT 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 JOINSELECT A班語文成績.姓名, A班語文成績.性別, A班語文成績.語文成績, A班數(shù)學(xué)成績.數(shù)學(xué)成績聯(lián)接查詢04
FROM A班語文成績, A班數(shù)學(xué)成績;
說明:會從左表和右表那里返回所有的行。
聯(lián)合查詢UNIONSELECT * FROM A班語文成績 UNION SELECT * FROM B班語文成績 UNION SELECT * FROM C班語文成績;聯(lián)合查詢01
聯(lián)合查詢UNIONSELECT 姓名,性別 FROM A班語文成績 UNION SELECT 姓名,性別 FROM B班語文成績 UNION SELECT 姓名,性別 FROM C班語文成績;聯(lián)合查詢02
聯(lián)合查詢UNION/ALLSELECT 姓名,性別 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ù)可不同,只要所取的列相同即可)。同時,每條 SELECT 語句中的列的順序必須相同(是指不同的順序會造成聯(lián)合段的錯位)。默認(rèn)地,UNION 操作符選取不同的值。如果允許重復(fù)的值,應(yīng)使用 UNION ALL。另外,UNION 結(jié)果集中的列名總是等于 UNION 中第一個 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
說明:“編號”字段為自動編號可不寫,則表將按順序自動編號。
生成表查詢?nèi)侄蜳rivate 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)注意表中自動編號只能有一個,且列必須指定數(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ù)據(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:添加表主鍵,注意表中存在主鍵則顯示出錯,加一個或兩主鍵都要用括號括起。