全面掌握MS ACCESS SQL(45)
时 间:2018-01-26 11:29:14
作 者:Big Young ID:252 城市:襄阳
摘 要: 用PARAMETERS声明参数查询实例详解。
正 文:
第二节 用PARAMETERS声明参数查询实例详解
参数查询是指在设计与数据库链接并访问时,在需要数值或数据的地方,使用参数来给值。下面我们分别针对不同的SQL操作,在ACCESS中用PARAMETERS来实现创建不同类型的参数查询,我们还是以系统自带的罗斯文示例数据库为例来说明问题。
一、建立参数化的选择查询
在ACCESS SQL的Select(选择)查询中,表名和字段名是不能用参数代替的,参数只能在Where条件子句或GROUP BY…HAVING子句中指定条件的值。例如在罗斯文示例数据库中,我们将以针对“员工”表创建一个参数化的选择查询,我们想根据不同的姓氏进行查询,SQL语句如下:
PARAMETERS LastName TEXT(50);
Select * FROM 员工 Where 姓氏=[LastName];
这里“LastName”就是一个参数,也就是程序设计中所说的变量,查询在运行时会弹出一个对话框,要求用户指定其值,这是的类型是文本,代表姓氏。这个语句也可以这样写:
Select * FROM 员工 Where 姓氏 = ?;
就是省略了PARAMETERS子句,直接用“?”(英语的问号)代替。
对于这样写的参数查询,大家可能会有一些疑问,如果有多个参数怎么办呢?如:
Select *
FROM 员工
Where 姓氏 = ? AND 名字 = ?;
一个查询中的参数都是问号,这样如何识别那个参数是对应哪个啊?
其实“?”是参数占位符,并不是真正的参数本身,多个参数出现是有的次序的,其对应顺序应是从左往右一一对应。在VBA编程中,如果要引用参数查询,这是的“?”从其到右一一对应到Parameters集合里的元素,只要按顺序引用就可以了。
二、创建参数化交叉表查询
参数化交叉表查询与前面的选择查询相似,或者说就是参数化选择查询的进一步应用,例如:
PARAMETERS prmYear Short;
TRANSFORM Count(订单.[订单 ID]) AS 订单合计
Select 姓氏 & 名字 AS 姓名
FROM 员工 INNER JOIN 订单 ON 员工.ID = 订单.[员工 ID]
Where (((DatePart("yyyy",[订单日期]))=[prmYear]))
GROUP BY 姓氏 & 名字
ORDER BY 姓氏 & 名字
PIVOT DatePart("q",订单日期);
三、创建参数化追加查询
在ACCESS SQL的参数化追加查询中,参数只能应用于VALUES子句中指定将要插入的具体值。例如我们要向客户表中插入一条新的记录,SQL语句如下:
PARAMETERS FirstName TEXT(50), LastName TEXT(50);
Insert INTO 客户 (名字, 姓氏)
VALUES (FirstName, LastName);
当然,语句也可以这样写:
Insert INTO 客户 (名字, 姓氏)
VALUES (?, ?);
四、创建参数化更新查询
我们还是以上面的例子来说明,例如我们不是插入客户数据而是要修改某一个客户的数据,参数查询应该是这样的了:
PARAMETERS FirstName TEXT(50), LastName TEXT(50), CustomerID SHORT;
Update 客户
SET 名字 = FirstName, 姓氏 = LastName
Where ID = CustomerID;
此语句也可以省略掉PARAMETERS子句,写成这样:
Update 客户
SET 名字 = ?, 姓氏 = ?
Where ID = ?;
从示例中我们可以看出,在参数化的更新查询中,参数除了与前面的一样可以应用在对记录筛选的Where及HAVING子名中用于指定条件数据,同时也可以应用于给要更新的列赋值。
五、创建参数化的删除查询
对于参数化的删除查询,参数也只是应用于Where条件子句中,用于进行记录的筛选,例如:
PARAMETERS FirstName TEXT(50), LastName TEXT(50);
Delete *
FROM 客户
Where 名字 = FirstName AND 姓氏 = LastName;
或者:
Delete *
FROM 客户
Where 名字 = ? AND 姓氏 = ?;
在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成 SQL 指令的编译后,才套用参数运行,因此就算参数中含有恶意的指令,由于已经编译完成,就不会被数据库所运行。有部份的开发人员可能会认为使用参数化查询,会让程序更不好维护,或者在实现部份功能上会非常不便,然而,使用参数化查询造成的额外开发成本,通常都远低于因为SQL注入攻击漏洞被发现而遭受攻击,所造成的重大损失。通过这些实例我们会发现,其实参数查询的创建是比较简单的,创建后应用也较为灵活方便,不仅可以大大提高查询效率,而且也增强了数据库的安全性。
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access判断多条明细的配方或订...(11.30)
- 如何让后台数据库在局域网共享时,且...(11.29)
- 【Access月初月末日期设置方法...(11.29)
- 【Access IIF函数嵌套示例...(11.26)
- Access快速开发平台--使用组...(11.25)
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)