
本站地址:http://www.bajiao123.com

用Delphi开发动态Web Server程序
通常情况下,用户通过浏览器在Web
站点上看到的网页大多是静态的,随着Internet/Intranet
的飞速发展和普遍应用,静态网页已远远不能满足用户的实际需求,
用户希望更多地看到根据要求而动态生成的网页。例如响应用户输入(选择)进行数据库查询、动态生成报表等。就目前而言,采用运行在Web
Server 端的CGI、ISAPI/NSAPI
应用程序是一种主要的动态生成网页的方式。
下面就通过一个简单的例子来介绍如何开发一个响应用户输入的数据库查询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.WebModule1WebActionItem1 Action(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 +1'< 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、Tdatas
本站地址:http://www.bajiao123.com

