废话:学Access我一直认为没有必要,学深点吧,没有能力,学浅点吧,没有意义,因为一般的情况用Excel已经足够用了,且更为方便。不过闲来无事,还是自学了一点,如果有人跟我一样无聊的话,倒不妨跟我学学,以避免自己浪费太多的时间。
要学之前,为了避免象我几个星期以前一样一头雾水,先介绍几个我自己学时用的我认为值得下载的资料,当然首先先要下载安装好Access2003。一个是《Access2000VBA一册通》,一个是《Microsoft Office Access 2003 Visual Basic 参考》,一个是《access编程-操作(宏)》。
下面先谈谈我对Access2003的初浅认识:
表,没什么可说的,自然是用来存放基本数据的。
查询,我认为应该是Access2003的核心了,对于Excel来说,强大的功能是函数的计算,对于Access2003来说,我觉得就是查询了,通过查询,完成数据的连接和重组等,以我的理解也就是“计算”。
窗体,窗体就是界面,如果不使用窗体的话,学Access2003基本就没意义了,如果数据的输入处理直接从表上或查询中进行,那用Excel就行了。窗体是Access2003的意义所在,也是麻烦所在啊。
报表,顾名思义就是报表罗。Access2003的报表的设置也是麻烦事,哪象Excel想怎样就怎样,不过谁叫你想什么都自动呢,手动有时就是灵活嘛。
Access2003VBA主要理解几个概念:
属性,比如我的名字,“名字”就是我的属性。属性的设置有两种方式,不变的,就在属性表中设置好了,比如默认值什么的。需要变动的可以在VBA语句中设置,比如,要让空值时按键不起作用,当然只能在VBA语句中设置了。
方法,比如我吃饭,“吃饭”就是方法,可以理解为“动作”。各种的方法就是各种的“动作”。
事件,比如中午时我吃饭,“中午时”就是事件,就是“动作”发生的时间罗。
写VBA语句就是说明“在什么时候,什么东东做什么或什么东东的属性改成什么”
接下来言归正传,既然查询是核心,也起着承上启下的作用,所以先把我对查询的总结分享给初学者。
(懒人需要相关示例的可联系QQ:188291180)
查询我认为可分成两类,一类包括简单查询、联接查询、联合查询,这类查询只能用手动组建。另一类包括追加查询、删除查询、生成表查询、数据定义查询,这类查询主要通过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; |
|
|
|
|
|
联接查询 |
INNER JOIN |
SELECT A班语文成绩.姓名, A班语文成绩.性别, A班语文成绩.语文成绩, A班数学成绩.数学成绩 |
联接查询01 |
|
|
FROM A班语文成绩 INNER JOIN A班数学成绩 ON A班语文成绩.姓名 = A班数学成绩.姓名; |
|
|
|
说明:INNER JOIN 关键字在表中存在至少一个匹配时返回行,没有匹配,就不会列出这些行。 |
|
联接查询 |
LEFT JOIN |
SELECT A班语文成绩.姓名, A班语文成绩.性别, A班语文成绩.语文成绩, A班数学成绩.数学成绩 |
联接查询02 |
|
|
FROM A班语文成绩 LEFT JOIN A班数学成绩 ON A班语文成绩.姓名 = A班数学成绩.姓名; |
|
|
|
说明:LEFT JOIN 关键字会从左表那里返回所有的行,即使在右表中没有匹配的行。 |
|
联接查询 |
RIGHT JOIN |
SELECT A班语文成绩.姓名, A班语文成绩.性别, A班语文成绩.语文成绩, A班数学成绩.数学成绩 |
联接查询03 |
|
|
FROM A班语文成绩 RIGHT JOIN A班数学成绩 ON A班语文成绩.姓名 = A班数学成绩.姓名; |
|
|
|
说明:RIGHT JOIN 关键字会右表那里返回所有的行,即使在左表中没有匹配的行。 |
|
联接查询 |
FULL JOIN |
SELECT A班语文成绩.姓名, A班语文成绩.性别, A班语文成绩.语文成绩, A班数学成绩.数学成绩 |
联接查询04 |
|
|
FROM A班语文成绩, A班数学成绩; |
|
|
|
说明:会从左表和右表那里返回所有的行。 |
|
|
|
|
|
联合查询 |
UNION |
SELECT * FROM A班语文成绩 UNION SELECT * FROM B班语文成绩 UNION SELECT * FROM C班语文成绩; |
联合查询01 |
联合查询 |
UNION |
SELECT 姓名,性别 FROM A班语文成绩 UNION SELECT 姓名,性别 FROM B班语文成绩 UNION SELECT 姓名,性别 FROM C班语文成绩; |
联合查询02 |
联合查询 |
UNION/ALL |
SELECT 姓名,性别 FROM A班语文成绩 UNION ALL SELECT 姓名,性别 FROM B班语文成绩 UNION ALL SELECT 姓名,性别 FROM C班语文成绩; |
联合查询03 |
|
|
说明:UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型(是指语句所指向的列,并非指实际的各表,实际的各表列数可不同,只要所取的列相同即可)。同时,每条 SELECT 语句中的列的顺序必须相同(是指不同的顺序会造成联合段的错位)。默认地,UNION 操作符选取不同的值。如果允许重复的值,应使用 UNION ALL。另外,UNION 结果集中的列名总是等于 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 |
|
|
|
说明:“编号”字段为自动编号,追加的编号不能重复,应大于现有的编号,或为已删除了的编号。 |
|
追加查询 |
VALUES/选字段 |
Private Sub 追加_Click() |
窗体追加删除查询2 |
删除查询 |
|
DoCmd.RunSQL ("INSERT INTO A班语文成绩副本 (学号,姓名,语文成绩 )VALUES ('010','王山', 60)") |
|
|
|
End Sub |
|
|
|
Private Sub 删除_Click() |
|
|
|
DoCmd.RunSQL ("DELETE 姓名 FROM A班语文成绩副本 WHERE 学号='010'") |
|
|
|
End Sub |
|
|
|
说明1:“编号”字段为自动编号可不写,则表将按顺序自动编号。 |
|
|
|
说明2:删除都是删除一整行,不存在只删除一字段内容的情况。 |
|
追加查询 |
表加表 |
Private Sub 追加_Click() |
窗体追加删除查询2 |
删除查询 |
|
DoCmd.RunSQL ("INSERT INTO A班语文成绩副本 (学号,姓名,语文成绩) SELECT 学号,姓名,语文成绩 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 |
|
|
|
说明:可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的 |
|
|
|
|
|
生成表查询 |
选字段 |
Private Sub 生成表_Click() |
窗体生成表查询2 |
数据定义查询 |
删除表 |
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 |
数据定义查询 |
删除表 |
DoCmd.RunSQL ("select A班语文成绩.姓名,A班语文成绩.语文成绩,A班数学成绩.数学成绩 into A班成绩备份 FROM A班语文成绩 inner join A班数学成绩 on A班语文成绩.姓名 = A班数学成绩.姓名") |
|
|
|
End Sub |
|
|
|
Private Sub 删除表_Click() |
|
|
|
DoCmd.RunSQL ("DROP TABLE A班成绩备份") |
|
|
|
End Sub |
|
|
|
说明:生成表查询如果表已存在的将被删除。生成表查询可以用联接语句以从两表中取字段。生成表不产生主键。 |
|
数据定义查询 |
增加列 |
Private Sub 增加列_Click() |
数据定义查询1 |
数据定义查询 |
删除列 |
DoCmd.RunSQL ("ALTER TABLE B班语文成绩副本 ADD COLUMN 备注 string,上学期语文成绩 INT") |
|
|
|
End Sub |
|
|
|
Private Sub 删除列_Click() |
|
|
|
DoCmd.RunSQL ("ALTER TABLE B班语文成绩副本 DROP COLUMN 备注 ,上学期语文成绩 ") |
|
|
|
End Sub |
|
|
|
说明1:删除表中列,但不能删除主键列 |
|
|
|
说明2:向表中增加列,应注意表中自动编号只能有一个,且列必须指定数据类型。 |
|
数据定义查询 |
更改数据类型 |
Private Sub 更改数据类型_Click() |
数据定义查询2 |
|
|
DoCmd.RunSQL ("ALTER TABLE B班语文成绩副本 ALTER COLUMN 语文成绩 text") |
|
|
|
End Sub |
|
|
|
Private Sub 更改数据类型2_Click() |
|
|
|
DoCmd.RunSQL ("ALTER TABLE B班语文成绩副本 ALTER COLUMN 语文成绩 int") |
|
|
|
End Sub |
|
|
|
说明:更改表中列的数据类型,主键的类型也可更改,但当表中有数据时,数据类型不能改为自动编号,要改应选删除所有数据 |
|
数据定义查询 |
删除主键 |
Private Sub 删除主键_Click() |
数据定义查询3 |
|
|
DoCmd.RunSQL ("ALTER TABLE B班语文成绩副本 DROP CONSTRAINT PRIMARYKEY") |
|
|
|
End Sub |
|
|
增添主键 |
Private Sub 增添主键_Click() |
|
|
|
DoCmd.RunSQL ("ALTER TABLE B班语文成绩副本 ADD PRIMARY KEY (编号,学号)") |
|
|
|
End Sub |
|
|
|
说明1:删除表中主键,注意PRIMARYKEY要连写 |
|
|
|
说明2:添加表主键,注意表中存在主键则显示出错,加一个或两主键都要用括号括起。 |
|
|