ASP 篇 (四)
在 上 一 期 中 作 者 向 诸 位 简 要 介 绍 了 ASP 脚 本 语 言 之 一 VBScript 的 一 些 基 本 常 识,本 期 将 继 续 给 大 家 讲 解 VBScript 的 脚 本 编 写 方 法,并 通 过 展 示 VBScript 在 ASP 程 序 编 写 过 程 中 的 一 系 列 实 例 使 大 家 对 VBScript 有 更 进 一 层 的 理 解。
大 家 在 学 习 了 脚 本 语 言 VBScript 的 变 量、常 量 和 过 程 的 基 本 概 念 后,本 期 将 继 续 向 各 位 介 绍 VBScript 的 函 数 和 语 法。
函 数 和 过 程 一 样 都 是 命 名 了 的 代 码 块,但 它 们 却 有 很 大 的 区 别,过 程 完 成 程 序 任 务,函 数 则 返 回 值。我 们 可 以 这 样 理 解,过 程 象 一 个 完 整 的 句 子,而 函 数 则 象 一 个 单 词。举 个 例 子,当 你 想 获 取 某 个 数 的 平 方 根,你 只 要 将 该 数 传 给 VBScript 的 Sqr() 函 数,此 函 数 会 立 即 返 回 该 数 的 平 方 根。如:
A=sqr(9)
则 A=3。熟 练 掌 握 脚 本 语 言 的 函 数 将 给 你 编 写 ASP 程 序 带 来 极 大 的 方 便,就 以 上 一 期 结 尾 处 作 者 布 置 给 大 家 的 课 后 练 习 来 说,如 果 你 对 脚 本 语 言 的 函 数 掌 握 不 够 全 面,那 么 解 决 如 此 之 小 的 一 个 问 题 将 很 有 可 能 花 费 你 相 当 大 的 精 力。现 在 让 我 们 来 回 顾 一 下 这 道 课 后 练 习。
“作 者 正 在 用 ASP 制 作 一 套 基 于 WEB 的 BBS 系 统,希 望 能 在 其 中 添 加 一 项 特 殊 功 能,即 当 任 何 用 户 登 陆 该 BBS 后 都 能 够 查 阅 近 七 天 来 所 有 新 发 布 的 信 息。”
如 果 你 不 熟 悉 VBScrip,就 不 会 知 道 VBScrip 本 身 提 供 了 一 个 用 来 取 得 日 期 之 间 的 差 或 和 的 函 数 DateSerial,它 的 语 法 如 下:
DateSerial(year, month, day)
如 果 你 要 指 定 一 个 日 期,例 如:1998 年 11 月 10 日,那 么 DateSerial 函 数 中 每 个 参 数 的 取 值 范 围 都 应 该 是 可 接 受 的,即 日 的 取 值 应 在 1 和 31 之 间,月 的 取 值 应 在 1 和 12 之 间。但 是,也 可 以 使 用 表 示 某 日 之 前 或 之 后 的 年、月、日 数 目 的 数 值 表 达 式 为 每 个 参 数 指 定 相 对 日 期。以 下 样 例 中 使 用 了 数 值 表 达 式 代 替 绝 对 日 期。在 这 里,DateSerial 函 数 返 回 1998 年 11 月 10 日 之 前 二 十 年 (1990-20) 零 两 个 月 (11-2) 又 一 天 (10-1) 的 日 期:即 1978 年 9 月 9 日。程 序 如 下:
Datep=DateSerial(1998-20, 11-2,10-1)
对 于 year 参 数,若 取 值 范 围 是 从 0 到 99,则 被 解 释 为 1900 到 1999 年。对 于 此 范 围 之 外 的 year 参 数,则 使 用 四 位 数 字 表 示 年 份(例 如 1800 年)。当 任 何 一 个 参 数 的 取 值 超 出 可 接 受 的 范 围 时,则 会 适 当 地 进 位 到 下 一 个 较 大 的 时 间 单 位。例 如,如 果 指 定 了 35 天,则 这 个 天 数 将 被 解 释 成 一 个 月 加 上 多 出 来 的 日 数,多 出 来 的 日 数 取 决 于 其 年 份 和 月 份。但 是 如 果 参 数 值 超 出 -32,768 到 32,767 的 范 围,或 者 由 三 个 参 数 指 定(无 论 是 直 接 还 是 通 过 表 达 式 指 定)的 日 期 超 出 了 可 以 接 受 的 日 期 范 围,就 会 发 生 错 误。
当 我 们 了 解 并 掌 握 了 函 数 DateSerial 的 使 用 方 法 后,再 来 看 看 作 者 布 置
的 这 道 题 目,一 切 就 迎 刃 而 解 了。下 面 我 将 程 序 中 的 此 部 分 代 码 公 布 如 下:
itemp=DateSerial(Year(date), month(date), day(date)-7)
itemp=DateValue(itemp)
sql="Select * from message Where message.creatime
Between #"&date&"# And #"&itemp&"# "
在 这 里 我 们 又 接 触 到 了 一 组 函 数 Year,month,day,它 们 是 用 来 得 到 一 个 日 期 的 年、月、日。date 是 常 数,表 示 今 天 日 期,而 函 数 DateValue 则 是 将 字 符 串 变 量 转 化 为 日 期 格 式 的 变 量。在 本 段 程 序 的 第 三 行,我 们 第 一 次 接 触 到 了 标 准 的 SQL 查 询 语 句,这 句 语 句 是 什 么 意 思 呢?
“Select”是 标 准 的 SQL 数 据 库 查 询 命 令,通 过 SELECT 语 句 我 们 可 以 在 数 据 库 中 检 索 数 据,并 将 查 询 结 果 提 供 给 用 户,此 处 的“*”表 示 查 询 该 名 为“message”的 数 据 库 中 的 所 有 记 录,而“where”的 作 用 是 设 定 一 个 查 询 条 件,是 为 了 将 数 据 库 中 符 合 条 件 的 记 录 取 出 来,“message.creatime”是 一 个 储 存 了 数 据 库 中 记 录 创 建 日 期 的 变 量。将 整 句 语 句 连 起 来 理 解 就 是:查 询 名 为 message 的 数 据 库 中 的 所 有 记 录,并 将 其 中 创 建 日 期 在 今 天 和 今 天 以 前 七 日 以 内 的 所 有 记 录 存 储 在 变 量 sql 中。可 能 由 于 大 家 第 一 次 接 触 SQL 语 句,一 时 间 无 法 完 全 理 解 它 的 作 用,不 过 不 用 担 心 在 今 后 的 章 节 中 作 者 将 专 门 用 一 期 给 大 家 介 绍 SQL 的 使 用 方 法。
通 过 上 面 的 学 习,大 家 应 该 已 经 能 够 理 解 函 数 在 程 序 中 的 作 用,当 然 我 们 不 必 去 死 背 函 数,但 要 做 到 熟 练 运 用 只 有 一 条 捷 径 -- 多 实 践。接 下 来 让 我 们 来 看 看 VBScript 的 基 本 语 法。
了 解 编 程 语 言 的 朋 友 一 定 知 道 在 程 序 中 控 制 程 序 流 程 的 语 句 主 要 可 以
分 为 条 件 语 句 和 循 环 语 句,在 VBScript 中 可 使 用 以 下 条 件 语 句: If...Then...Else 语
句
Select Case 语 句
If...Then...Else 语 句 用 于 计 算 条 件 是 否 为 True 或 False,并 且 根 据 计 算 结 果 指 定 要 运 行 的 语 句。通 常,条 件 是 使 用 比 较 运 算 符 对 值 或 变 量 进 行 比 较 的 表 达 式,If...Then...Else 语 句 可 以 按 照 需 要 进 行 嵌 套。
让 我 们 来 创 建 两 个 范 例 文 件:if1.asp 和 if2.asp
将 以 下 语 句 剪 贴 到 记 事 簿 中,并 保 存 为 if1.asp( 注 意:请 将 程 序
中“<”后 的 空 格 去 掉 ) < html>
< head>
<
TITLE>if1.asp< /TITLE>
< /head>< body
bgcolor="#FFFFFF">
< form action="if2.asp" method=get>
Your
First Name< INPUT NAME="FirstName" MaxLength=20>< p>
Your Last
Name< INPUT NAME="LastName" MaxLength=20>< p>
< INPUT
TYPE=submit>< INPUT TYPE=reset>
< /form>
<
/body>
< /html>
将 以 下 语 句 剪 贴 到 记 事 簿 中,并 保 存 为 if2.asp
< html>
< head>
< TITLE>ifrespond.asp<
/TITLE>
< /head>
< %
fname=request.querystring("Firstname")
lname=request.querystring("Lastname")
If
fname="George" and lname="Washington" then %>
Hi.You must be the first
president!
< % else %>
Hi!Nice to Meet You
< %end if
%>
< /body>
< /html>
asp1.asp 产 生 一 个 文 本 输 入 框,要 求 用 户 输 入 姓、名,如 下 图:
asp2.asp 则 是 用 IF 语 句 判 断 用 户 输 入 的 姓 名 是 否 为“George Washington”, 并 做 出 相 应 的 反 馈。在 此 我 们 遇 到 了 一 个 ASP 的 内 建 对 象 request,通 过 使 用 request 对 象 可 以 访 问 任 何 用 HTTP 请 求 传 递 的 信 息,包 括 从 HTML 表 格 中 用 POST 方 法 或 GET 方 法 传 递 的 参 数、cookie 和 用 户 认 证。而 QueryString 集 合 检 索 HTTP 查 询 字 符 串 中 变 量 的 值,HTTP 查 询 字 符 串 由 问 号 (?) 后 的 值 指 定。如:
http://localhost/if2.asp?Firstname=George&Lastname=Washington
生 成 值 为 "Firstname=George&Lastname=Washington" 的 变 量 名 字 符 串。关 于 ASP 对 象 作 者 将 在 今 后 的 几 篇 里 重 点 讲 述。
If...Then...Else 语 句 的 一 种 变 形 允 许 您 从 多 个 条 件 中 选 择,即 添 加 ElseIf 子 句 以 扩 充 If...Then...Else 语 句 的 功 能,使 您 可 以 控 制 基 于 多 种 可 能 的 程 序 流 程。
我 们 将 asp2.asp 的 程 序 部 分 扩 充 如 下: <
%
fname=lcase(request.querystring("Firstname"))
lname=lcase(request.querystring("Lastname"))
If
fname="george" and lname="washington" then %>
Hi.You must be the first
president!< p>
< % elseIf fname="ronald" and lname="reagan" then
%>
Hi.You must be the actor president!< p>
< % elseIf
fname="jimmy" and lname="carter" then %>
Hi.You must be the peanut
farmer president!< p>
< % elseIf fname="naoko" or fname="charles"
then %>
Hi.Your name reminds me of someone,but I am not sure who!<
p>
< % else %>
Hi!Nice to Meet You
< % end if
%>
可 以 添 加 任 意 多 个 ElseIf 子 句 以 提 供 多 种 选 择。但 使 用 多 个 ElseIf 子 句 经 常 会 使 程 序 变 得 很 累 赘。在 多 个 条 件 中 进 行 选 择 的 更 好 方 法 是 使 用 Select Case 语 句。
Select Case 结 构 提 供 了 If...Then...ElseIf 结 构 的 一 个 变 通 形 式,可
以 从 多 个 语 句 块 中 选 择 执 行 其 中 的 一 个。Select Case 语 句 提 供 的 功 能 与 If...Then...Else 语
句 类 似,但 是 可 以 使 代 码 更 加 简 练 易 读。Select Case 结 构 在 其 开 始 处 使 用 一 个 只 计 算 一 次 的 简
单 测 试 表 达 式。表 达 式 的 结 果 将 与 结 构 中 每 个 Case 的 值 比 较。如 果 匹 配,则 执 行 与 该 Case 关 联 的
语 句 块,我 们 同 样 可 以 用 Select Case 语 句 来 写 asp2.asp 文 件: <
%
fname=lcase(request.querystring("Firstname"))
lname=lcase(request.querystring("Lastname"))
name=fname+lname
Select
case name
case "georgewashington"
response.write "Hi.You must be the
first president!< p>"
case "ronaldreagan"
response.write "Hi.You
must be the actor president!< p>"
case
"jimmycarter"
response.write "Hi.You must be the peanut farmer
president!< p>"
case "naokocharles"
response.write "Hi.Your name
reminds me of someone,but I am not sure who!< p>"
case
else
response.write "Hi!Nice to Meet You"
End Select
%>
请 注 意 Select Case 结 构 只 计 算 开 始 处 的 一 个 表 达 式,并 且 只 计 算 一 次,而 If...Then...ElseIf 结 构 计 算 每 个 ElseIf 语 句 的 表 达 式,这 些 表 达 式 可 以 各 不 相 同。因 此 仅 当 每 个 ElseIf 语 句 计 算 的 表 达 式 都 相 同 时,才 可 以 使 用 Select Case 结 构 代 替 If...Then...ElseIf 结 构。Select Case 语 句 也 是 可 以 是 嵌 套 的,每 一 层 嵌 套 的 Select Case 语 句 必 须 有 与 之 匹 配 的 End Select 语 句。
以 上 给 大 家 介 绍 的 脚 本 语 言 VBScript 的 函 数 和 条 件 语 句 的 使 用 方 法,由 于 篇 幅 的 缘 故 不 能 详 细 展 开,希 望 各 位 有 志 学 习 ASP 的 朋 友,能 在 课 后 进 行 一 定 程 度 的 自 学 和 练 习。在 日 常 开 发 ASP 应 用 程 序 的 过 程 中 作 者 本 人 日 渐 体 会 到 了 脚 本 语 言 的 重 要 性,灵 活 运 用 脚 本 语 言 将 非 但 可 以 大 大 提 高 ASP 应 用 程 序 的 开 发 过 程,给 广 大 网 站 制 作 人 员 节 省 大 量 的 时 间,而 且 还 能 够 增 强 ASP 应 用 程 序 的 执 行 效 率 和 功 能。欲 善 其 事 必 先 利 其 器,因 此 作 者 在 此 强 烈 建 议 诸 君,熟 练 掌 握 脚 本 语 言,这 将 对 你 的 ASP 程 序 开 发 大 有 帮 助。由 于 本 文 不 是 VBScript 教 程,因 此 只 能 用 较 小 的 篇 幅 给 大 家 简 要 介 绍 一 些 VBScript 基 本 常 识,在 下 一 期 介 绍 完 VBScript 的 循 环 语 句 后,我 们 将 正 式 开 始 学 习 ASP 的 内 建 对 象,要 深 入 VBScript,建 议 大 家 找 些 教 材 进 行 自 学。如 果 你 在 看 完 本 文 后 有 任 何 问 题 请 及 时 Mail 我,如 果 你 有 什 么 好 的 建 议 也 请 来 信 告 知,谢 谢。