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

利用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 下 调 试 通 过。

最新版本的Hive 0.13发布,增加ACID特性 开发中的“软”与“硬”:高画质移动游戏开发之道 从国际编码竞赛来看编程语言受众度 AMD迎接变革:加速OpenCL的未来 角逐Hadoop市场,Cloudera与Hortonworks竞争白热化 OpenStack将提供对Docker的支持 Facebook Q1财报:营收25.02亿美元、59%来自于移动 黑客们盯上了卫星,IOActive的惊人发现 开发汽车应用之前,你必须了解的7件事 埃森哲:智能电视潮流,势不可挡 直接拿来用!Facebook移动开源项目大合集 高大上Hadoop技术培训:Hadoop在企业中的应用实战 【走近讲师】新浪丛磊:通过MAE构建企业内部私有PaaS平台 API增长新趋势 消息应用类独占鳌头 软件项目为何会失败? 严澜:搭建高可用的MongoDB集群(二) 微软、思科、Google、Facebook等联合推出CII 狙击“Heartbleed” 这是个神奇的国度:细数五大印度裔IT牛人CEO Atmel CMO Sander Arts眼中的创客运动 Unity“三巨头”:全心全意为开发者服务 全球移动广告现状报告:哪种平台、应用最赚钱? 《近匠》Smart Wallit,钱包找不到了?给它“打个电话”吧 Mozilla新CTO:JavaScript、 Firefox OS专家Andreas Gal 李彦宏发布百度大数据引擎,及与谷歌、亚马逊等类似项目对比 大数据领域,实时打击欺诈犯罪的4个战场 一周消息树:谷歌Project Ara,将开启下一个智能手机时代 数据恢复服务商的6个最佳实践 【走近讲师】谭晓生:魔高一尺道高一丈,360基于大数据的网络攻击检测 一周热点:摩尔定律让位于贝索斯定律 阿里巴巴集团CTO王坚确认出席第六届中国云计算大会 【走近讲师】青云甘泉:混合云的构建及其对企业的帮助 指点!在PB中怎样用程序作成一张动态的交叉表 编辑控件怎样才能显示那些怪字符? 有没有人喜欢郑智化 大家推荐好听的几首歌吧! 请教:怎么学c++? 高手点拨! 各位网络高手.如何在程序里讲ip地址转化为域名 有什么方法,可使表单内的组件背景变成透明的而文字不透明,请看例子: 编辑控件怎样才能显示那些怪字符???? swall(壹心) 你还在深圳特区吗? 如何设置Session的密码?请高手指点迷经^^^^^ 哪位可以解释一下下面的代码? perl 的人气太差。罢了罢了。找本perl自己搞定 MsSQL7.0 当日志文件大小未限制而变得很大时,怎样清日志文件,使其减小? 请教诸位牛兄牛姐牛夫人---有难度哦(着急出活!) 基本问题:如何将一个.txt中的内容读入到内存再从内存中读出并存为另一个文件?谢了先!!!! 高手帮帮忙!!!!!!!!!!!!!! 又有台风了。。。。 在zip包中加入ASP推荐的PAD File有用吗????? PB连接SQL数数库,为什么显示的表会不全 如何把一个文件file.dat里的数据写入软盘0磁道0磁头1扇区. 我要骂人! chris2001(牛虻),不是东西 华为工程师 谁知道 vb 的序列号?????? VS.NET 有开了个新铺子。为什么我的ejb/j2ee还没有开张。气愤。 老大们:我是菜鸟,有问题要问,不过不要笑我。一定给分的 再次发问:关于在SQL SERVER中的某张表上建立触发器...... 没有有这样的病毒,或者文件 各位老大,如果有asp、sql基础学jsp和php是不是比较容易一些呀?言者有分哦! dll中怎样调用主程序中的函数? 新手请教接口聚合!!!!!!!!! 高分求教!有没有谁编写过WEB服务器程序? 微软OfficeXp女孩 请教一个报表问题? 小技巧!!! delphi中调用MessageBox出错,高手指点一下。 大家好,这是我提的第一个问题!我学DELPHI才两周!对您的指点,小弟万分感激! 请问sybase12。0中,游标能不能用动态sql申请 紧急求助:如何调用父对话框的函数 各位好,我在VB下做了一个ACTIVE 控件,但是加不到CBUILDER 上,但能加到VB里,为什么? 婚介所 关于C++打开文件的问题? 请教一下关于多表查询的问题 求助:中文Delhpi帮助 为什么我的rose装好后没有html帮助?还有安装时应该选择client还是administrator? cathy0505;chenkane;zhangshicun;swall;(_2_);riluo;wt13;MonkeyLin;seedundersnow;qancy_chen;cathy0505;acute 一个很简单的问题,怎样把一个php字符串变量转为实型变量 用过2K/NT DDK的大侠:如何在2000的内核里编程向硬盘里写文件,如:写c:\a.txt到C上,给我一段代码? 我急需一个“医院生殖中心病历管理软件”,sbf2000@363.net 怎样在vb中用insert ,updata语句进行数据库操作?????????? ra和rm 及ram格式有何区别呢 管道压力表、真空压力表一般与何种阀门连接?现在有两种阀门Z43F-16C Q41F-16C 压力表一般和哪种阀门连接啊. 0.1mol的铜与足量的浓硫酸反应生成SO2的体积约为22.4 L 氢气为什么在测定1mol气体体积被选为被测气体 φ76的管道,压力0.5Mpa每分钟流多少方水 常温常压下 1mol二氧化硫的体积小于22.4l这句话正确,为什么 用化学反应气体体积测定仪测定1mol氢气的体积,实验数据记录如下:镁带质量为0.120g,注入10ml稀硫酸,液体量瓶的读数为130.0ml.则(1)该温度下,1mol氢气的体积测定值为___ 管道φ219,压力0.4-0.5MPa流量150m3/h需提高压力1.0mpa用多大管道增压泵 在20度温度下,压强为101kpa时1mol的氧气和1mol的二氧化碳为什么所含的分子数相等?不是2和3吗? 用化学反应气体体积测定仪测定1mol H2体积时,向气体发生器加料口注射稀硫酸后,拔出注射器时针头脱落而仍然扎在橡皮塞上,使结果偏大还是偏小?为什么? 给水管道试验压力是如何确定说明其合格标准 1mol氢气和0.5mol氧气在相同状况下混合,求混合气体中氢气的体积分数,物质的量分数和质量分数 测定1mol气体的体积误差分析请给我这个实验所有可能的误差分析,怎样怎样做使结果偏小、怎样怎样做使结果偏大,用这种形式给我写出来.认真回答, 反应釜机械密封压力怎样调节,使用什么测量,依据什么来调整 请问进气管道压力5MPa 管子直径10毫米,忽略阻力,求1小时流量是多少?出口0.1MPa,空气,管道长度1米 同温同压下,分别为1mol的氢气和氧气,它们的〔 〕(A)质量相同,体积不同 (B)分子个数相同,质量不同 (C)体积相同,分子数不同 (D)体积相同,分子数也相同 为什么不是D? 溢流阀的选择 我做实验用的,液体压力要维持在3mpa,4mpa,6mpa等,溢流阀选哪种合适呢,可调可控就是我设定一个值,到达那个值后就溢流,不到继续上压 差压变送器测流量用的温压补偿公式设计温度和设计压力是怎么来的?有没有通用数值的?我们厂的煤气管道就是露天的,夏天最高有45度,冬天最低-5度吧.另外是不是说不同的管道这2个参数不同 下列物质中所含微粒物质的量最多的是A 3.01×10∧23个镁原子 B 1mol氮气 C 4克氢气 D 36克氧气 在精馏操作中,塔釜压力为什么是一个重要的参数?塔釜压力与什么因素有关? 孔板流量计为什么要加压力补偿和温度补偿 标准状态下,1mol的水体积是多少?存在22.4升的水蒸气吗?化学里面的确是说标准状况下没水蒸气没错,但是物理题目里动不动就来个“标准状况下1mol的水蒸气体积是22.4升,请问此时水分子间的 很多地方提到高压反应釜,到底承受多少压力才算是高压反应釜.有高压就有中压和低压吧,如何区分? 孔板流量计上的NM3是什么单位 1mol水的体积和1mol冰的体积哪个大 酯化反应釜操作压力问题我设计的反应釜酸酐进料压力0.1Mpa,醇进料压力i0.1Mpa,出料0.9Mpa.1.搅拌釜内操作压力是0.2Mpa还是0.9Mpa呢?2.夹套内用水蒸气加热,工作压力是该温度下水蒸气的饱和蒸汽压 谁讲一下跟孔板流量计相关的知识, 1. 1mol的二氧化碳和1mol的水在相同状态下体积一定相等吗? 1mol的二氧化碳和1mol的水在相同状态下体积一定相等吗?不同的气体,若体积不等,则它们所含的分子数一定不等吗? 搪瓷反应釜、搪玻璃反应釜的性能 请问孔板流量计的测量原理? 1mol的氧气、1mol的水和1mol的铁哪个体积大 压力反应釜正负压怎么做 孔板流量计安装条件孔板流量计(流量计油表)安装管道在安装的时候有没有什么条件 0.1mol氢气和0.1mol水所含的分子数相同,在标准状况占体积都约是2.24L ;0.1mol任何气体标况下V都是2.24L这两句话 哪句错了啊? 请说下理由 谢谢! 什么样的压力容器需要型式试验,搪玻璃反应釜需要吗?新容规上说蓄能器等需要做型式试验,这个等包括反应釜吗? 在标准状况下1mol任何气体的体积都是22.4L那么在标准状况下11.2L氢气中的分子数是多少个 葡萄糖发生加成反应? 带夹套的不锈钢反应釜是不是需要检测的压力容器?蒸汽加热,需要温度105 容器内为常压,所需蒸汽压力2公斤请提供解释或依据夹套内为水蒸气,容器内为水和肉(猪肉、牛肉或羊肉),它是低压 在标准状况下,1mol任何气体的体积都是22.4L.那么,在标准状况下,11.2L氢气中的分子数是几个 酯和氢气能否发生加成反应,条件是什么 搪瓷反应釜是几类压力容器 在标准状况下1moL水的体积是22. 葡萄糖与氢气反应的化学方程式 半管加热的反应釜是否属于压力容器? 标准状况下1mol的混合气体的体积怎么是22.4L.分子间有较大的间隔.像酒精和水一样混合了不是会体积减少么 1mol苯可以与多少摩尔氢气发生加成反应?还有,氧化铝和氧化铁是不是两性化合物? 甲醇对20号压力容器用钢材有没有腐蚀性? 是不是当1mol气体的体积为22.4L时,它就一定处在标况下麽?1mol水蒸气在标况下的体积是22. 1mol萘最多与几mol氢气发生加成反应 求一反应釜各管道连接图 标准状况下,1mol任何气体所占的体积为22.4L 在标况下,1mol任何体积所占的体积约为22.4L多了一个约,为什么不同的题目上都对 1mol有机物能与1mol氢气发生加成反应,产物是,此有机物的结构简式可能有? 压力表连在管道上,为什么压力表与管道连接处之间管道是弯成一个圆的样子 标况下,1mol三氧化硫的体积为22.4L 1mol苯乙烯与氢气完全发生加成反应需要几mol氢气啊苯环只有5个H啊,为什么还需要3mol, 管道压力表怎样装 1MOL SO2在20度 体积大于22.4L为什么是错的? 1mol维生素A分子最多可跟几mol氢气发生加成反应 请问有没有关于化工设备(比如精馏塔,反应釜,管道等)的国家标准可查? 这种说法对吗?1mol三氧化硫和1mol二氧化硫体积均为22.4L如题 下列测定常温下1mol氢气体积的操作中,使测定结果偏大的是()?A.装置接口处有气体漏出B.称好镁带后用砂皮擦去表面的氧化膜C.硫酸注入量不足10mL,使镁带有剩余D.计算液体体积时,液体量瓶
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn