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

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

ODBC中的同步与异步执行模式-Delphi资料 SQL编程常见问题-Delphi资料 第11章 中级SQL-Delphi资料 第10章 SQL基础-Delphi资料 SQL语句中的删除和改变-Delphi资料 TDataLink类别的说明-Delphi资料 TDBGrid控件中对多个记录的处理-Delphi资料 安装BDE需要的东东-Delphi资料 保存DBGrid中栏的字段名及尺寸-Delphi资料 动态生成定义数据库-Delphi资料 动态组成SQL速句-Delphi资料 多层C/S的客户端调用服务器端的方法-Delphi资料 关于dephi数据库的动态建立-Delphi资料 基 于WEB 的 数 据 库 查 询-Delphi资料 计算数据库某字段的值-Delphi资料 计算字段值-Delphi资料 建立应用软件注册安全机制-Delphi资料 建立自己的数据字典库-Delphi资料 将BLOB字段的BMP图显示出来-Delphi资料 将图像放入数据库中-Delphi资料 解 决sybase 用 户 数 据 库 不 能 进 入 故 障 的 一 种 方 法-Delphi资 解决sybase用户数据库不能进入故障的一种方法-Delphi资料 解决一个DBF表时的"Index not found.."错误-Delphi资料 精简Delphi数据库应用系统 精简Delphi数据库应用系统-定制BDE驱动程序 精简数据库应用系统-Delphi资料 开 发 基 于ORACLE7 数 据 库 的 管 理 信 息 系 统-Delphi资料 开 发AS/400 应 用 系 统: PB5 与Delphi3 的 比 较 利 用Delphi 开 发 响 应 用 户 输 入 的 数 据 库 查 询Web Server 程 利用Delphi开发响应用户输入的数据库查询Web Server程序 利用Tbatch组件完成数据批处理-Delphi资料 支持北京伸奥的朋友,进来签个名吧! 怎样截获一个应用程序的消息? 数据结构得答案 大连的软件人员工作环境怎么样? 不好意思,小弟又来麻烦大家了! 上次的文章到那儿去了? enmity,进来,我给你结帐 enmity,进来,我给你结帐!! 各位侠客帮忙啊,重新装系统出了问题! 将10进制转换成16进制的函数是什么啊? VC高手,怎样以编程的方法实现磁带机的Backup 和 Restore. enmity,进来,我给你结帐.共200分 支援白菜300分,支持白菜个人网站建设:))) CMM 的缩写是什么? 想和大家讨论一下怎样系统的编制软件 如何实现和Word、CorelDRAW同样效果缩放位图 请问各位大哥大爷大妈大。。。。。。。。。。。。。哪里有支持 ASP 的服务器软件下载 我该如何控制IP地址??高手请进。。。 弱弱地问:关于SQL server中的中括号。 各位侠客帮忙啊,重新装系统出了问题!! 一点点小问题????? 请问在 WINDOWS98 下面,除了IIS,还有没有支持 PHP 的服务器软件呢? 在ADO中如何获取表名 关于ASN树的问题(snmp中的MIB的拓扑树) 你是高手你进来!!!!! 各位的顶级域名都在哪申请?价格/速度如何?大家都来说说! DirectX8的MultiFileReader过滤器怎么找不到? 关于用VB显示ado数据库中的图像字段问题 大家来谈谈Msdn如何有效利用 请各位帮忙查看我这段程序错在哪里 , 我是照书上做的 , 可就是无法保存. SQL plus 为何无法登录?? 谁要下载msdn? 紧急求救!寻找工作! 最新新消息~~~~~~~台灣地區中午地震最大震度花蓮市5級 有没有大连的公司要俺? 请教大家!!!java如何实现多重继承?接口该如何使用?份数可以再加,只要我明白了 怎样以编程的方法实现磁带机的Backup. 愿者请进,请各位留下自己的QQ或E-mail,以后大家可以多多交流!!! solaris unix8 的一个问题 asp是用什么软件的阿?我用了interdev,可是开始新建项目时就不行,叫你输入serve时,总是不对?应该输什么啊? 关于字符集 哪里有好的LAN管理软件??? 一个去美国的机会,保签(替朋友贴的,信誉没问题) 打印没有输出? 动态分配内存 因为本人准备过一段时间出去找软件开发工作,本人手头有一张高级程序员资格证书,但没有本科学历请问?? delphi6.0中 data access中怎么没有ttable 和tquery部件了, 该怎么办? 在w2k 下多用户的自动登录。。请指教? SubclassWindow的问题,急,多谢!!!! 高分求购高程经验 一个留学美国的机会,保签 负三分之一加四分之一减六分之五加七分之三 怎么算 用初一的方法 体温计为什么要甩几下,不甩有什么后果,我想知道原因,希望大家帮个忙! 天气冷了,你要盖好被子,不用依靠谁的体温 英文翻译 六分之五减四分之一加三分之一怎么算 水银体温计刻度值只能为35—42度吗?有没有刻度为36-42的水银温度计?不要讲道理.请直接说答案.有个人逼着我回答啊.必须今天搞定这个问题! 补充句子,天气越来越冷,湖面上结了厚厚的冰,天越来越( ),( )人越来越( ),( )天越来越冷,湖面结了冰,天越来越( ( 天越来越( )( 天越来越( ( ) 7又六分之五加负五又三分之一加2又四分之一加负四又四分之三 怎么甩体温计?我一甩那个体温计就从42度下降到38.5度.本来我是38.5度的.体温计越甩越高? 人体在一天中什么时候体温最高,什么时候体温最低?它的变化趋势是怎样的? 求(1+1/2+1/2+1/4+1/5)*1-(1+1/2+1/3+1/4)的计算过程. 体温计的最高温度是42度? 人体在一天中体温怎么变化在一天中,正常体温范围上午大概是多少,中午是多少,下午,晚上又是多少 3/5-(1/2-1/4)计算, 体温计的范围体温计的测量范围是多少 什么是黄金分割率? 2又4/5*[1/(3又1/3-2.4)] 计算 体温计量程一定是35——42吗?分度值一定是0.我 问的是:是不是一定一定一定是 这个值?还有个问题:体温计一定是水银的吗? 什么是黄金分割比例?教我分 计算:(1)3.5÷(-2分之7)×/-2分之1/ 体温计的量程为什么,分度值为什么 黄金分割的比例率是多少? (2.5+3/4)÷1/8列式计算, [紧急求助]常见体温计量程和分度值是多少?若想利用点燃的蜡烛、光具座、光屏来测量凸透镜的焦距,写出实验方案 黄金分割率 列式计算 9/10÷[1/2×(6/5-3/10)] 用普通温度计测液体的温度进行读数时,玻璃泡不能离开液体,用体温计测时,则可以离开人体进行读数,为什越快越好 ,越准确越好,我不希望有重复的 黄金分割的比例是多少?是1比多少啊? 5+6 用普通温度计测液体的温度进行读数时,玻璃泡不能离开液体,用体温计测时,则可以离开人体进行读数,是因它有一个(?)只要填一个词 黄金分割比例是什么的拉速度快解放;阿生的纠纷了爱上的话卡都是法律框架爱上对方空间哈斯地方爱的身份和 45-多少+13等于28 用一支原来示数为38℃的体温计,未经下甩,便去测量一个正常人的体温,如果当时气温是35℃,那么?体温计的示数为 为什么体温计的玻璃泡比温度计的玻璃泡长 180°-23°13′6〃*4等于几 用一支原来示数是38℃,未甩便去测量一个正常人的体温.当时气温是35℃,那么体温计的示数是( )℃ 体温计可以离开人体读数 是因为什么的作用 角1是36度,求角2 一支示数为38°的体温计,没有甩用它直接去测量一个人的体温,当天的气温为28°,那温度计度数为?用一支示数为38°的体温计,没有甩便用它直接去测量一个正常人的体温,如果当天的气温为28°, 人的体温是由“下丘脑”中特殊的神经细胞控制的,他对人体的体温的变化很敏感.脑温度高于37度时,人体散热机制(如血管舒张、出汗等)就还活跃起来.已知37度时蒸发18g汗水所需能量是4320j 计算3分之一加四分之一时 有没有学的好的同学回答一下这个问题:气温高于三十八度的时候,如果我把体温计甩到三十五度,能测出气温吗我想问一下,有没有学的好的同学回答一下这个问题:气温高于三十八度的时候, 下列关于人体在寒冷环境中维持体温恒定的叙述中,正确的是( )A.寒冷时,酶活性自然增强,因而代谢加快,产热增加B.寒冷时,肾上腺素分泌减少,代谢降低C.寒冷时,人体产热多,散热少,以维持 -3又3分之1-2又四分之一-(-2又三分之一)+(-4又四分之一) 怎么算 普通酒精温度计可精确到__摄氏度,体温计可精确到__摄氏度. 当人体处于寒冷环境时,保持体温恒定的方式A.增加产热,散热不变B.增加散热,产热不变C.增加产热,减少散热D.增加产热,增加散热 计算:(-四分之一)^5*(四分之一)^3*(-四分之一)^2(a^2)^3*a*(a^4)^2 3(a^3)^4+a^9*a^3-2(a^2)^6 (-2a^2)^3-(-3a^3)^2 10^m-1*10^n-1*10^3 (x^2y^3)^3+(-2x^3y^2)^2*y^5 (四分之一)^2006*2^4010 (-3a)^3-(-a)*(-3a)^2 用一示数是39摄氏度的体温计,没甩就量病人38摄氏度的体温,当时气温36摄氏度,则示数是多少?A.36摄氏度B.38摄氏度C.39摄氏度 为什么人体的温度是37度,室外的温度39度左右,人会感觉到那么热哎?比如说你去接触一个38度的东西,你却不是好热,但是为什么天气才39度就会决的很人勒? 修一条路,前3天修了这条路的四分之一,平均每天修了这条路的几分之几?照这样计算,修往这条路,需要几天. 体温计是否可以离开人体读数?为什么? 当人的体温是37度时,华氏温度是多少 (-3又四分之一)+(-1又十二分之一) 为什么体温计可以离开人体读数 l理由 - 胳膊天气越热反而越冷怎么回事好像是月子病 但不是很清楚若有怎样治疗的话那就更好了 负三又四分之一加负一又十二分之一= 负三又四分之一加负一又十二分之一=几 使用体温计测量人的体温时,体温计可以离开被测人体后读数.这是因为9)这是因为() 为什么天气越热 井水越冷 四分之一里有几个十二分之一?一又四分之一里有几个二十四分之一? 体温计之所以可以离开人体读数,是因为? 为什么天气越来越冷,又越来越热
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn