说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

利用Delphi开发响应用户输入的数据库查询Web Server程序

HTML文档下载 WORD文档下载 PDF文档下载
利用Delphi开发响应用户输入的数据库查询Web Server程序

---- 通 常 情 况 下,用 户 通 过 浏 览 器 在Web 站 点 上 看 到 的 网 页 大 多 是 静 态的, 随 着Internet/Intranet 的 飞 速 发 展 和 普 遍 应 用, 静 态 网 页已 这 远 远 不 能 满 足 用 户 的 实 际 需 求

用 户 希 望 更 多 地看 到 根 据 要 求 而 动 态 生 成 的 网 页, 例 如 响 应 用 户 输入( 选 择) 进 行 数 据 库 查 询、 动 态 生 成 报 表 等。 就 目前 而 言, 采 用 运 行 在Web Server 端 的CGI、ISAPI/NSAPI 应 用 程 序 还是 一 种 主 要 的 动 态 生 成 网 页 的 方 式。

---- 使 用Delphi 3 for Client/Server 开 发Web Server 应 用 程 序 不 仅 简 单、 方 便, 而 且 其开 发 能 力 十 分 强 大, 因 为Delphi 3 提 供 了WebModule、WebApplication、TwebRequest、TwebResponse、TPageProducer 等 大 量 的 组 件 和 对 象, 以 支 持Web Server 程 序 的 开 发, 能够 非 常 简 单 地 生 成 专 业 性 的 ISAPI/NSAI、CGI 程 序。 而 且 由于Delphi 强 大 的 数 据 库 开 发 能 力, 允 许DLL 来 处 理 大 量 并发 的、 安 全 线 程 的 数 据 库 连 接, 使 得Web Server 程 序 的 开发 更 是 锦 上 添 花。

---- 在Delphi 3 的Demos 中提 供 了 简 单 的Web Server 应 用 程 序 开 发 的 范 例, 但 没 有 涉及 到 响 应 用 户 输 入 的 问 题。 而 响 应 用 户 的 输 入 或 选择, 并 通 过 数 据 库 查 询 来 返 回 查 询 结 果, 是 我 们 编 写Web Server 应 用 程 序 的 一 种 主 要 形 式。

---- HTML 文 档 中 用 户输 入 主 要 是 通 过< FORM > 语 句 段, 并 支 持POST、PUT、GET、HEAD 等 方 法, 而Web Server 应 用 程 序 是 怎 样 接 收 到 客 户 端 用 户的 输 入( 选 择) 请 求 信 息 呢 ? 我 们 知 道, 在HTTP 协 议中, 浏 览 器 客 户 端 向Web Server 应 用 程 序 传 送 请 求 数 据 主要 是 通 过URL 和CONTENT 部 分。 例 如 在

URL:http://www.gtgaj.gov/scripts/wdcx.dll

/runquery?gdnd=1992&bgqx= 长 期

---- 中,gdnd=1992&bgqx= 长 期 是 数 据参 数, 它 请 求ISAPI 程 序wdcx.dll( 对 应 的 动 作 事 件 为/runquery,若 使 用 确 省 动 作 事 件, 则 不 需 要 这 个 字 符 串), 把 归档 年 代(gdnd) 为1992 年 而 且 保 管 期 限(bgqx) 为 长 期 的 文 档 信息 返 回 到 浏 览 器 并 显 示, 这 种 方 法 一 般 应 用 在 数 据 量比 较 少 的 情 况 下, 优 点 是 比 较 容 易 输 入 参 数, 可 直 接在URL 中 输 入 请 求 信 息, 缺 点 是 返 回 数 据 量 不 能 太 大,并 影 响URL 的 显 示, 在 参 数 比 较 多 时, 将 出 现 一 个 长 串的URL。 而 在CONTENT 中 保 存 数 据 信 息 的 优 点 是 不 影 响URL 的显 示, 而 且 允 许 返 回 的 数 据 量 较 大, 缺 点 是 用 户 只 能使 用< FORM > 语 句 段 让 浏 览 器 生 成 请 求 信 息, 不 能 直接 在URL 中 输 入。 在POST、PUT、GET 和HEAD 四 种 方 法 中, 除 了POST 方 法 使 用CONTENT 向Web Server 应 用 程 序 传 送 数 据 以 外, 其 它方 法 都 是 通 过URL 来 传 送 数 据 的。

---- Delphi 3 中 提 供 了装 载 浏 览 器 请 求 信 息 的TWebRequest 对 象, 利 用 该 对 象 的methodtype 属 性 即 可 得 知HTTP 传 送 请 求 信 息 的 方 法, 再 利 用 该 对 象的ContentFields 或QueryFields 属 性 即 可 将HTTP 传 送 的 信 息 进 行 分析, 非 常 容 易 使 用。 例 如, 对 于CONTENT 中 的 数 据, 我 们 可直 接 使 用Request.ContentFields.Values[' 用 户 输 入 项 的 名 称'] 来 读取 用 户 的 输 入 信 息; 而 对 于URL 中 的 数 据, 则 可 直 接 使用Request.QueryFields.Values[' 用 户 输 入 项 的 名 称'] 来 读 取。

---- 下 面 就 通 过 一个 简 单 的 例 子 来 介 绍 如 何 开 发 一 个 响 应 用 户 输 入 的数 据 库 查 询Web Server 程 序

---- 首 先, 在Web 服务 器 端 安 装 数 据 库 引 擎BDE

并 设 置 好 数 据 库 别 名wsda, 指向 一 个 包 含 归 档 部 门、 归 档 年 代、 卷 号、 文 件 日 期、文 件 字 号、 文 件 作 者、 标 题 等 字 段 的 数 据 库 文 件wsdak.dbf。

---- 接 着 建 立 一 个HTML 文 件wsdacx.htm, 放 在Web 服 务 器 的 确 省 目 录 下( 如c:\webshare)

wsdacx.htm 的 内 容 如 下:

< HTML >< HEAD >< TITLE >文书档案查询< /TITLE >

< /HEAD >

< BODY >

< h1 >文书档案查询卡< /h1 >

< HR >

< FORM action="/scripts/wdcx.dll" method=post >

请输入标题关键词:< input type="text"

size="16" Maxlength="16" name="btgjc" >< BR >

< INPUT TYPE=SUBMIT VALUE="查询" >

< INPUT TYPE=RESET VALUE="重填" >

< /FORM >

< HR >

< /BODY >< /HTML >

---- ( 在 本 例HTML 的< FORM > 语 句中, 使 用 的 是POST 方 法

可 改 为 其 他 方 法 而 无 需 修 改 下面 的ISAPI 源 程 序

为 简 单 计, 本 例 只 列 出 了 一 个 用 户 输入 项)。

---- 在Delphi 中 新 建一 个 基 于ISAPI 的Web Server Application, 增 加 一 个 确 省 的 的 动 作事 件, 其 代 码 如 下:

procedure TWebModule1.WebModule1Web

ActionItem1Action(Sender: TObject;

Request: TWebRequest; Response:

TWebResponse; var Handled: Boolean);

var

MyDB : TDatabase;

MyQuery : TQuery;

Count : Integer;

Input: TStrings;

Begin

Input:=nil;

Case request.methodtype of

mtpost: Input := request.ContentFields;

mtget

mtput

mthead: Input := request.QueryFields;

end;

if input.values['btgjc']< >'' then

begin

MyDB := TDatabase.Create(nil);

MyQuery := TQuery.Create(nil);

try

MyDB.AliasName := 'wsda';

MyDB.DatabaseName := 'wsda';

MyQuery.DatabaseName := MyDB.DatabaseName;

response.content:=

'< HTML >< HEAD >< TITLE >查询结果

< /TITLE >< /HEAD >'#13+

'< BODY >'#13+

'< H2 >< font face="隶书" color="green" >

查询结果信息:< /font >< /H2 >'#13+

'< table border=1 >'#13+

'< tr >'#13+

'< th >卷号< /th >'#13+

'< th >文件日期< /th >'#13+

'< th >文件字号< /th >'#13+

'< th >标题< /th >'#13+

'< tr >'#13; //#13是换行符

Myquery.sql.clear;

Myquery.sql.add('select * from wsdak.dbf '+

'where (标题 like "%'+input.values['btgjc']+'%")');

Myquery.open;

Myquery.first;

Count:= 0;

while not MyQuery.eof do

begin

response.content:=response.content+'< tr >'#13+

'< td >'+MyQuery.FieldByName('卷号')

.AsString+'< /td >'#13+

'< td >'+MyQuery.FieldByName

('文件日期').AsString+'< /td >'#13+

'< td >'+MyQuery.FieldByName('文件字号')

.AsString+'< /td >'#13+

'< td >'+MyQuery.FieldByName

('标题').AsString+'< /td >'#13+

'< tr >'#13;

count:=count+1;

MyQuery.Next;

end;

response.content:=response.content+

'共查询到'+inttostr(count)+'条信息< br >';

finally

response.content:=response.content+'

< /table >< /BODY >< /HTML >';

MyQuery.Close;

MyDB.Close;

MyQuery.Free;

MyDB.Free;

end;

end

else response.content:='请先输入标题关键词:';

end;

---- 需 要 注 意 的 是: 必 须 在 本 单元 文 件 的uses 子 句 中 手 工 添 加db 与dbtables 单 元。 为 简 单计, 本 例 并 没 有 使 用TTable、Tquery、Tdatasource、TpageProducer、TqueryProducer 等 组 件, 有 兴 趣 的 读 者 不 妨 一 试。

---- 将project 存 为wdcx.dpr

编 译 后 放 到Web 服 务 器 的 可 执 行 文 件 路 径( 如C:\WebShare\Scripts\),即 可 响 应HTML 文 件wsdacx.htm 的 用 户 输 入, 并 返 回 数 据 库 查询 结 果。

---- 以 上 程 序 代 码在Windows 95B2(OSR) 的 个 人 Web 服 务 器PWS/Windows NT 4.0 的IIS、Microsoft Internet Explorer 4.0、Delphi3 Client/Server 下 调 试 通 过。

能携带的网络 Anyfi 150万建网络虚拟热点 又将颠覆产业?传苹果正开发蓝牙智能手表 JavaScript社区开发者调查结果 欢乐淘、求PS大神获腾讯开放平台应用创新大赛年度金奖 2012是响应式设计之年 请问在JAVA程序中怎样设计备份数据库(ORACAL)的数据呢? 假-假-假死机 对一个有10几万个词汇的词库进行加密的话, 用那种方法好??? 请高手指点 如何利用VC读取BMP图片中每一个像素的R,G,B颜色分量,并输出保存成*.txt文件(是作业,紧急!!!最好提供源程序,以便研究) 各位大哥。我现在想学习ORACLE。请问大家有没有什么好点的书可以介绍给我啊。。谢谢大家了。 好东西有人要吗 请问那位哥哥(姐姐)知道如何用VB程序修改虚拟目录下的实际路径? 请问在HP-UX下如何查看已安装的软件(非HP-UX自带的/补丁/驱动程序)? 好东西有人要吗 S可能生成SO3S可能一步反应生成SO3吗?CH4 怎样反应才可生成SO3 SO3和h生成什么 已知,如图BA垂直AD,CD垂直AD垂足分别为A、 如何选购电动窗帘 如图所示,AD垂直于BD,BC垂直于CD,AB=a CFC 和CFCs一样吗? 有电阻为100Ω的灯泡,在电压100V的电路中能正 SO3与NH3H2O反应方程式 三名驻阿富汗英军官涉嫌私刑处决塔利班日议员质疑安倍 称应给首相出席国会次逾2.8万人白宫网站请愿 “杀光中国澳联邦贸易部长大赞华为 支持重估宽带新加坡办第四届“亚洲群英会” 特邀名林丹出战轻松赢 国羽取得开门红紧张的接力跑皮尔斯绝杀老鹰 勇士哑火负灰熊欧战有戏!热那亚未过审核失资格 米兰学习之家天之三步曲狼族之皇剑逆星穹末世杀劫番茄异世游醉观公园旅游信义会馆旅游白鹅潭风情酒吧街旅游西津古渡街旅游伯先公园旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘