⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 025.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题文档-数据库应用-->利用Delphi开发响应用户输入的数据库查询Web Server程序</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题文档-数据库应用 利用Delphi开发响应用户输入的数据库查询Web Server程序">
<META NAME="description" CONTENT=" - DELPHI专题文档-数据库应用 - 利用Delphi开发响应用户输入的数据库查询Web Server程序">

<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index8.html">返回</a>

<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>

<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">利用Delphi开发响应用户输入的数据库查询Web Server程序</FONT></B></center> 
<hr color="#EE9B73" size="1" width="94%"> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 通 常 情 况 下, 
用 户 通 过 浏 览 器 在Web 站 点 上 看 到 的 网 页 大 多 是 静 态 
的, 随 着Internet/Intranet 的 飞 速 发 展 和 普 遍 应 用, 静 态 网 页 
已 这 远 远 不 能 满 足 用 户 的 实 际 需 求, 用 户 希 望 更 多 地 
看 到 根 据 要 求 而 动 态 生 成 的 网 页, 例 如 响 应 用 户 输 
入( 选 择) 进 行 数 据 库 查 询、 动 态 生 成 报 表 等。 就 目 
前 而 言, 采 用 运 行 在Web Server 端 的CGI、ISAPI/NSAPI 应 用 程 序 还 
是 一 种 主 要 的 动 态 生 成 网 页 的 方 式。 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 使 用Delphi 3 for 
Client/Server 开 发Web Server 应 用 程 序 不 仅 简 单、 方 便, 而 且 其 
开 发 能 力 十 分 强 大, 因 为Delphi 3 提 供 了WebModule、WebApplication、TwebRequest、TwebResponse、TPageProducer 
等 大 量 的 组 件 和 对 象, 以 支 持Web Server 程 序 的 开 发, 能 
够 非 常 简 单 地 生 成 专 业 性 的 ISAPI/NSAI、CGI 程 序。 而 且 由 
于Delphi 强 大 的 数 据 库 开 发 能 力, 允 许DLL 来 处 理 大 量 并 
发 的、 安 全 线 程 的 数 据 库 连 接, 使 得Web Server 程 序 的 开 
发 更 是 锦 上 添 花。 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 在Delphi 3 的Demos 中 
提 供 了 简 单 的Web Server 应 用 程 序 开 发 的 范 例, 但 没 有 涉 
及 到 响 应 用 户 输 入 的 问 题。 而 响 应 用 户 的 输 入 或 选 
择, 并 通 过 数 据 库 查 询 来 返 回 查 询 结 果, 是 我 们 编 写Web 
Server 应 用 程 序 的 一 种 主 要 形 式。 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> HTML 文 档 中 用 户 
输 入 主 要 是 通 过&lt; FORM &gt; 语 句 段, 并 支 持POST、PUT、GET、HEAD 
等 方 法, 而Web Server 应 用 程 序 是 怎 样 接 收 到 客 户 端 用 户 
的 输 入( 选 择) 请 求 信 息 呢 ? 我 们 知 道, 在HTTP 协 议 
中, 浏 览 器 客 户 端 向Web Server 应 用 程 序 传 送 请 求 数 据 主 
要 是 通 过URL 和CONTENT 部 分。 例 如 在 </span></p> 
<BR> 
<pre><span style="font-size: 9pt">URL:http://www.gtgaj.gov/scripts/wdcx.dll
/runquery?gdnd=1992&amp;bgqx= 长 期 </span></pre> 
<p><font color="#ffffff"><span style="font-size: 9pt"> </span></p> 
<p><span style="font-size: 9pt">----</font> 中,gdnd=1992&amp;bgqx= 长 期 是 数 据 
参 数, 它 请 求ISAPI 程 序wdcx.dll( 对 应 的 动 作 事 件 为/runquery, 
若 使 用 确 省 动 作 事 件, 则 不 需 要 这 个 字 符 串), 把 归 
档 年 代(gdnd) 为1992 年 而 且 保 管 期 限(bgqx) 为 长 期 的 文 档 信 
息 返 回 到 浏 览 器 并 显 示, 这 种 方 法 一 般 应 用 在 数 据 量 
比 较 少 的 情 况 下, 优 点 是 比 较 容 易 输 入 参 数, 可 直 接 
在URL 中 输 入 请 求 信 息, 缺 点 是 返 回 数 据 量 不 能 太 大, 
并 影 响URL 的 显 示, 在 参 数 比 较 多 时, 将 出 现 一 个 长 串 
的URL。 而 在CONTENT 中 保 存 数 据 信 息 的 优 点 是 不 影 响URL 的 
显 示, 而 且 允 许 返 回 的 数 据 量 较 大, 缺 点 是 用 户 只 能 
使 用&lt; FORM &gt; 语 句 段 让 浏 览 器 生 成 请 求 信 息, 不 能 直 
接 在URL 中 输 入。 在POST、PUT、GET 和HEAD 四 种 方 法 中, 除 了POST 
方 法 使 用CONTENT 向Web Server 应 用 程 序 传 送 数 据 以 外, 其 它 
方 法 都 是 通 过URL 来 传 送 数 据 的。 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> Delphi 3 中 提 供 了 
装 载 浏 览 器 请 求 信 息 的TWebRequest 对 象, 利 用 该 对 象 的methodtype 
属 性 即 可 得 知HTTP 传 送 请 求 信 息 的 方 法, 再 利 用 该 对 象 
的ContentFields 或QueryFields 属 性 即 可 将HTTP 传 送 的 信 息 进 行 分 
析, 非 常 容 易 使 用。 例 如, 对 于CONTENT 中 的 数 据, 我 们 可 
直 接 使 用Request.ContentFields.Values[' 用 户 输 入 项 的 名 称'] 来 读 
取 用 户 的 输 入 信 息; 而 对 于URL 中 的 数 据, 则 可 直 接 使 
用Request.QueryFields.Values[' 用 户 输 入 项 的 名 称'] 来 读 取。 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 下 面 就 通 过 一 
个 简 单 的 例 子 来 介 绍 如 何 开 发 一 个 响 应 用 户 输 入 的 
数 据 库 查 询Web Server 程 序 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 首 先, 在Web 服 
务 器 端 安 装 数 据 库 引 擎BDE, 并 设 置 好 数 据 库 别 名wsda, 指 
向 一 个 包 含 归 档 部 门、 归 档 年 代、 卷 号、 文 件 日 期、 
文 件 字 号、 文 件 作 者、 标 题 等 字 段 的 数 据 库 文 件wsdak.dbf。 
</span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 接 着 建 立 一 个HTML 
文 件wsdacx.htm, 放 在Web 服 务 器 的 确 省 目 录 下( 如c:\webshare), 
wsdacx.htm 的 内 容 如 下: </span></p> 
<BR> 
<pre><span style="font-size: 9pt">&lt; HTML &gt;&lt; HEAD &gt;&lt; TITLE &gt;文书档案查询&lt; /TITLE &gt;
&lt; /HEAD &gt;
&lt; BODY &gt;
&lt; h1 &gt;文书档案查询卡&lt; /h1 &gt;
&lt; HR &gt;
&lt; FORM action=&quot;/scripts/wdcx.dll&quot; method=post &gt;
请输入标题关键词:&lt; input type=&quot;text&quot;
size=&quot;16&quot; Maxlength=&quot;16&quot; name=&quot;btgjc&quot; &gt;&lt; BR &gt;
&lt; INPUT TYPE=SUBMIT VALUE=&quot;查询&quot; &gt;
&lt; INPUT TYPE=RESET VALUE=&quot;重填&quot; &gt;
&lt; /FORM &gt;
&lt; HR &gt;
&lt; /BODY &gt;&lt; /HTML &gt;</span></pre> 
<p><font color="#ffffff"><span style="font-size: 9pt"> </span></p>
<p><span style="font-size: 9pt">----</font> ( 在 本 例HTML 的&lt; FORM &gt; 语 句 
中, 使 用 的 是POST 方 法, 可 改 为 其 他 方 法 而 无 需 修 改 下 
面 的ISAPI 源 程 序, 为 简 单 计, 本 例 只 列 出 了 一 个 用 户 输 
入 项)。 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 在Delphi 中 新 建 
一 个 基 于ISAPI 的Web Server Application, 增 加 一 个 确 省 的 的 动 作 
事 件, 其 代 码 如 下: </span></p> 
<BR> 
<pre><span style="font-size: 9pt">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']&lt; &gt;'' then
begin
MyDB := TDatabase.Create(nil);
MyQuery := TQuery.Create(nil);
try
MyDB.AliasName := 'wsda';
MyDB.DatabaseName := 'wsda';
MyQuery.DatabaseName := MyDB.DatabaseName;
response.content:=
'&lt; HTML &gt;&lt; HEAD &gt;&lt; TITLE &gt;查询结果
&lt; /TITLE &gt;&lt; /HEAD &gt;'#13+
'&lt; BODY &gt;'#13+
'&lt; H2 &gt;&lt; font face=&quot;隶书&quot; color=&quot;green&quot; &gt;
查询结果信息:&lt; /font &gt;&lt; /H2 &gt;'#13+
'&lt; table border=1 &gt;'#13+
'&lt; tr &gt;'#13+
'&lt; th &gt;卷号&lt; /th &gt;'#13+
'&lt; th &gt;文件日期&lt; /th &gt;'#13+
'&lt; th &gt;文件字号&lt; /th &gt;'#13+
'&lt; th &gt;标题&lt; /th &gt;'#13+
'&lt; tr &gt;'#13;  //#13是换行符
Myquery.sql.clear;
Myquery.sql.add('select * from wsdak.dbf '+
'where (标题 like &quot;%'+input.values['btgjc']+'%&quot;)');
Myquery.open;
Myquery.first;
Count:= 0;
while not MyQuery.eof do
begin
response.content:=response.content+'&lt; tr &gt;'#13+
'&lt; td &gt;'+MyQuery.FieldByName('卷号')
.AsString+'&lt; /td &gt;'#13+
'&lt; td &gt;'+MyQuery.FieldByName
('文件日期').AsString+'&lt; /td &gt;'#13+
'&lt; td &gt;'+MyQuery.FieldByName('文件字号')
.AsString+'&lt; /td &gt;'#13+
'&lt; td &gt;'+MyQuery.FieldByName
('标题').AsString+'&lt; /td &gt;'#13+
'&lt; tr &gt;'#13;
count:=count+1;
MyQuery.Next;
end;
response.content:=response.content+
'共查询到'+inttostr(count)+'条信息&lt; br &gt;';
finally
response.content:=response.content+'
&lt; /table &gt;&lt; /BODY &gt;&lt; /HTML &gt;';
MyQuery.Close;
MyDB.Close;
MyQuery.Free;
MyDB.Free;
end;
end
else response.content:='请先输入标题关键词:';
end;</span></pre> 
<p><font color="#ffffff"><span style="font-size: 9pt"> </span></p>
<p><span style="font-size: 9pt">----</font> 需 要 注 意 的 是: 必 须 在 本 单 
元 文 件 的uses 子 句 中 手 工 添 加db 与dbtables 单 元。 为 简 单 
计, 本 例 并 没 有 使 用TTable、Tquery、Tdatasource、TpageProducer、TqueryProducer 
等 组 件, 有 兴 趣 的 读 者 不 妨 一 试。 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 将project 存 为wdcx.dpr, 
编 译 后 放 到Web 服 务 器 的 可 执 行 文 件 路 径( 如C:\WebShare\Scripts\), 
即 可 响 应HTML 文 件wsdacx.htm 的 用 户 输 入, 并 返 回 数 据 库 查 
询 结 果。 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 以 上 程 序 代 码 
在Windows 95B2(OSR) 的 个 人 Web 服 务 器PWS/Windows NT 4.0 的IIS、Microsoft 
Internet Explorer 4.0、Delphi3 Client/Server 下 调 试 通 过。 </span></p> 
<BR> 
<hr color="#EE9B73" size="1" width="94%"> 
 
</TD> 
 
</TR> 
</table> 
</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -