<HTML> <HEAD><TITLE>信息查询</TITLE></HEAD> <BODY> <H3 ALIGN="CENTER">信息网站</H3> <table border> <TR BgColor="White"> <TH>汽车</TH><TH>房屋</TH><TH>人才</TH><TH>其它</TH> <!-显示表格的标题---> </TR> <tr> <!-------每一个<tr>和</tr>对定义表格的一行内容--------> <!-------每一个<td>和</td>对定义表格的一个单元格的内容--------> <td><a HREF="PGrid_src.dll/runquery?QIC">二手汽车</a></td> <!-- PGrid_src.dll为脚本文件名,runquery 为入口路径,QIC 为查询参数---> <td><a HREF="PGrid_src.dll/FWQuery?fwz">房屋租赁</td> <td><a HREF="PGrid_src.dll/RCQuery?Rcz">人才招聘</a></td> <td><a HREF="PGrid_src.dll/OtherQuery?SHC">商场超市</a></td> </tr> <tr> <td><a HREF="PGrid_src.dll/runquery?Qjx">汽车驾校</a></td> <td><a HREF="PGrid_src.dll/FWQuery?XZL">写字楼租赁</td> <td><a HREF="PGrid_src.dll/RCQuery?Qiz">求 职</a></td> <td><a HREF="PGrid_src.dll/OtherQuery?DIQ">电器专卖店</a></td> </tr> <tr> <td><a HREF="PGrid_src.dll/runquery?Qmr">汽车美容</a></td> <td><a HREF="PGrid_src.dll/FWQuery?Lop">楼盘信息</td> <td><a HREF="PGrid_src.dll/RCQuery?JLZ">人才交流中心</a></td> <td><a HREF="PGrid_src.dll/OtherQuery?SHJ">手机专卖店</a></td> </tr> <tr> <td><a HREF="PGrid_src.dll/runquery?Qwx">汽车维修</a></td> <td>..</td> <td>..</td> <td><a HREF="PGrid_src.dll/OtherQuery?JIC">建材装饰</a></td> </tr> <tr> <td><a HREF="PGrid_src.dll/runquery?Jyz">汽车加油站</a></td> <td>..</td> <td>..</td> <td><a HREF="PGrid_src.dll/OtherQuery?ZHX">装修公司</a></td> </tr> <tr> <td><a HREF="PGrid_src.dll/runquery?Qzl">汽车租赁</a></td> <td>..</td> <td>..</td> <td><a HREF="PGrid_src.dll/OtherQuery?QIJ">清洁公司</a></td> </tr> <tr> <td><a HREF="PGrid_src.dll/runquery?Qsc">汽车市场</a></td> <td>..</td> <td>..</td> <td><a HREF="PGrid_src.dll/OtherQuery?HKS">航空售票处</a></td> </tr> </table> </BODY> </HTML> library PGrid_Src;//注意:使用不同的Delphi版本,所使用文件和数量有差别(本例使用Delphi 7创建)!!! uses ActiveX, ComObj, WebBroker, ISAPIThreadPool, ISAPIApp, UGrid_Src in 'UGrid_Src.pas' {QueryWebModule: TWebModule}; {$R *.RES} exports GetExtensionVersion, HttpExtensionProc, TerminateExtension; begin Application.Initialize; Application.CreateForm(TQueryWebModule, QueryWebModule); Application.Run; end. unit UGrid_Src; interface uses //定义使用系统单元文件 Windows, Messages, SysUtils, Classes, HTTPApp, Db, DBTables, DBWeb, HTTPProd; type TQueryWebModule = class(TWebModule) //说明Web模块上使用的所有组件和事件处理过程 Information_Query_Root: TPageProducer; QiCheQuery: TQuery; QiCheDetailQuery: TQuery; FangWuQuery: TQuery; FangWuDetailQuery: TQuery; RenCaiQuery: TQuery; RenCaiDetailQuery: TQuery; //如下是事件处理过程的说明 procedure TQueryWebModuleInfoQueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure TQueryWebModuledetailqueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure TQueryWebModuleRootAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure QueryWebModuleFangWuQueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure QueryWebModuleFangWuDetailQueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure QueryWebModuleRenCaiDetailQueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure QueryWebModuleRenCaiQueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure QueryWebModuleOtherQueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure QueryWebModuleOtherDetailQueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); private { Private declarations } public { Public declarations } end; var QueryWebModule: TQueryWebModule; implementation {$R *.DFM}procedure TQueryWebModule.TQueryWebModuleRootAction(Sender: TObject;Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);//缺省动作项的事件处理过程,它为用户提供选择画面begin response.content:=Information_Query_Root.content; //调用页面生成组件的content方法,形成响应Web客户请求的页面end;procedure TQueryWebModule.TQueryWebModuleInfoQueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); //查询汽车信息动作项的事件处理过程,它形成汽车简要信息的Web页面, //并为用户进一步查询详细信息提供超级链接。 var i:integer; CaptionStr,colstr1,colstr2,colstr3,str1:string; begin i:=0; //由于Delphi的Case语句不支持字符类型的分支,所以需将客户请求的参数 //转换成相应的序数值 if Request.query='QIC' THEN i:=0; if Request.query='Qjx' THEN i:=1; if Request.query='Qmr' THEN i:=2; if Request.query='Qwx' THEN i:=3; if Request.query='Jyz' THEN i:=4; if Request.query='Qzl' THEN i:=5; if Request.query='Qsc' THEN i:=6; //为了减少程序的壅余、精炼程序,对与汽车有关的所有查询都采用同一个查询组件, //实现动态查询和动态生成响应客户请求的HTML表格 QiCheQuery.close; //关闭当前查询 QiCheQuery.sql.clear; //清除当前查询的SQL语句 case i of 0:begin //修改汽车的访问次数(客户每访问一次,访问次数加1) //根据客户请求参数转换的序号生成响应的SQL语句和HTML表的显示标题 CaptionStr:='二手汽车'; QiCheQuery.sql.add('select * from QiChe where 编号 like '''+'QIC%'''); colstr1:='品牌'; colstr2:='型号'; colstr3:='车辆类型'; end; 1:begin CaptionStr:='汽车驾校'; QiCheQuery.sql.add('select * from QiChejx where 编号 like '''+'Qjx%'''); colstr1:='名称'; colstr2:='地址'; colstr3:='交通'; end; 2:begin CaptionStr:='汽车美容'; QiCheQuery.sql.add('select * from QiChemr where 编号 like '''+'Qmr%'''); colstr1:='名称'; colstr2:='保养项目'; colstr3:='地址'; end; 3:begin CaptionStr:='汽车维修'; QiCheQuery.sql.add('select * from QiChewx where 编号 like '''+'Qwx%'''); colstr1:='名称'; colstr2:='维修类型'; colstr3:='服务时间'; end; 4:begin CaptionStr:='汽车加油站'; QiCheQuery.sql.add('select * from Jiayouz where 编号 like '''+'Jyz%'''); colstr1:='名称'; colstr2:='品种'; colstr3:='服务时间'; end; 5:begin CaptionStr:='汽车租赁'; QiCheQuery.sql.add('select * from QiChezl where 编号 like '''+'Qzl%'''); colstr1:='名称'; colstr2:='服务项目'; colstr3:='服务时间'; end; 6:begin CaptionStr:='汽车市场'; QiCheQuery.sql.add('select * from QiChesc where 编号 like '''+'Qsc%'''); colstr1:='名称'; colstr2:='服务项目'; colstr3:='地址'; end; end; QiCheQuery.open; //打开动态查询 QiCheQuery.First; {形成HTML表的标题和表头信息,在该表中有四列信息,前三列为基本信息,第四列用于形成完成显示详细信息而必须的超级链接和条件,此处的条件是完成查询当前记录的 信息后部分} Response.content:='<HTML><HEAD><TITLE>汽车信息</TITLE></HEAD><BODY>'#13+ '<H3 ALIGN="CENTER">'+CaptionStr+'</H3>'#13+'<table border>'#13;Response.content:=Response.content+'<TR BgColor="White"><TH>'+colstr1+'</TH><TH>'+colstr2+'</TH><TH>'+colstr3+ '</TH><TH>其它</TH></TR>'; while not QiCheQuery.EOF do //当表的记录指针不在末尾时,获取当前表的所有前三个字段 begin Response.content:=Response.content+Format('<tr><td>%s</td><td>%s</td><td>%s</td><td><a HREF="%S/rundetail?%s">%s</a></td></tr>'#13,[QiCheQuery.fields[1].AsString,QiCheQuery.fields[2].AsString,QiCheQuery.fields[3].AsString,Request.ScriptName,QiCheQuery.fields[0].AsString,'详细']); //获取下一个记录 QiCheQuery.Next; end; Response.content:=Response.content+'</table></BODY></HTML>'#13; //最终完成响应客户请求的HTML表格 end;procedure TQueryWebModule.TQueryWebModuledetailqueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); //查询汽车的详细信息动作项的事件处理过程,它形成汽车详细信息的Web页面, //并为用户进一步查询详细信息提供超级链接。 var i:integer; CaptionStr:string; begin i:=0; //IF语句根据客户请求参数判别下一步应执行的查询。 if pos('QIC',Request.query)>0 THEN i:=0; if pos('Qjx',Request.query)>0 THEN i:=1; if pos('Qmr',Request.query)>0 THEN i:=2; if pos('Qwx',Request.query)>0 THEN i:=3; if pos('Jyz',Request.query)>0 THEN i:=4; if pos('Qzl',Request.query)>0 THEN i:=5; if pos('Qsc',Request.query)>0 THEN i:=6; QiCheDetailQuery.close; //关闭当前的查询 QiCheDetailQuery.SQL.clear; //清除当前查询的SQL语句 case i of 0:begin //根据客户请求的参数,产生相应的查询语句和显示标题 CaptionStr:='二手汽车'; QiCheDetailQuery.sql.add('select * from QiChe where 编号='''+Request.Query+''''); end; 1:begin CaptionStr:='汽车驾校'; QiCheDetailQuery.sql.add('select * from QiChejx where 编号='''+Request.Query+''''); end; 2:begin CaptionStr:='汽车美容'; QiCheDetailQuery.sql.add('select * from QiChemr where 编号='''+Request.Query+''''); end; 3:begin CaptionStr:='汽车维修'; QiCheDetailQuery.sql.add('select * from QiChewx where 编号='''+Request.Query+''''); end; 4:begin CaptionStr:='汽车加油站'; QiCheDetailQuery.sql.add('select * from Jiayouz where 编号='''+Request.Query+''''); end; 5:begin CaptionStr:='汽车租赁'; QiCheDetailQuery.sql.add('select * from QiChezl where 编号='''+Request.Query+''''); end; 6:begin CaptionStr:='汽车市场'; QiCheDetailQuery.sql.add('select * from QiChesc where 编号='''+Request.Query+''''); end; end; QiCheDetailQuery.open;response.content:= '<html><body><head<title>'+CaptionStr+'</title></head>'#13+'<table border><center>'#13; {信息分成两屏显示,在第一屏中显示三个字段内容,而第二屏是从第四个字段开始显示. 表格显示形式为字段名和字段值,每个字段显示一行,用字段的总数(QiCheDetailQuery.fieldcount)控制循环次数} for i:=1 to QiCheDetailQuery.fieldcount-3 do response.content:=response.content+'<tr><td>'+ QiCheDetailQuery.fields[i].fieldname+'</td>'#13+'<td>'+ QiCheDetailQuery.fields[i].asstring+'</td></tr>'#13; response.content:=response.content+'</center></table><hr>'#13 +'</body></html>'#13; //最终完成响应客户请求的HTML表格 End;procedure TQueryWebModule.QueryWebModuleFangWuQueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); //房屋信息动作项的事件处理过程,并形成响应客户的Web页面 //并为用户提供房屋的详细信息提供超级链接 var i:integer; CaptionStr,colstr1,colstr2,colstr3:string; begin i:=0; //为了减少程序的壅余、对与房屋有关的所有查询都采用同一个查询组件, //实现动态查询和动态生成响应客户请求的HTML表格 if Request.query='fwz' THEN i:=0; if Request.query='XZL' THEN i:=1; FangWuQuery.close; FangWuQuery.sql.clear; case i of 0:begin CaptionStr:='房屋租赁'; FangWuQuery.sql.add('select * from Fwzl where 编号 like '''+'fwz%'''); colstr1:='楼盘名称'; colstr2:='区域'; colstr3:='地址'; end; 1:begin CaptionStr:='写字楼租赁'; colstr1:='名称'; colstr2:='面积'; colstr3:='地址'; FangWuQuery.sql.add('select * from Xzlz where 编号 like '''+'XZL%'''); end; end; FangWuQuery.open; {形成HTML表的标题和表头信息,在该表中有四列信息,前三列为基本信息,第四列用于形成完成显示详细信息而必须的超级链接和条件,此处的条件是完成查询当前记录的 信息后部分} Response.content:='<HTML><HEAD><TITLE>房屋信息</TITLE></HEAD><BODY>'#13+ '<H3 ALIGN="CENTER">'+CaptionStr+'</H3>'#13+'<table border>'#13; Response.content:=Response.content+'<TR BgColor="White"><TH>'+colstr1+ '</TH><TH>'+colstr2+'</TH><TH>'+colstr3+'</TH><TH>其它</TH></TR>'; while not FangWuQuery.EOF do //当表的记录指针不在末尾时,获取当前表的所有前三个字段, begin Response.content:=Response.content+Format('<tr><td>%s</td><td>%s</td><td>%s</td><td><a HREF="%S//FWDetailQuery?%s">%s</a></td></tr>'#13, [FangWuQuery.fields[1].AsString,FangWuQuery.fields[2].AsString,FangWuQuery.fields[3].AsString,Request.ScriptName,FangWuQuery.fields[0].AsString,'详细']); FangWuQuery.Next; //获取下一个记录 end; Response.content:=Response.content+'</table></BODY></HTML>'#13; //最终完成响应客户请求的HTML表格end;procedure TQueryWebModule.QueryWebModuleFangWuDetailQueryAction( Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); //查询房屋详细信息动作项的事件处理过程,形成响应Web客户的页面 var i:integer; CaptionStr:string; begin i:=0; //IF语句根据客户请求参数判别下一步应执行的查询。 if pos('fwz',Request.query)>0 THEN i:=0; if pos('XZL',Request.query)>0 THEN i:=1; FangWuDetailQuery.close; FangWuDetailQuery.SQL.clear; case i of 0:begin CaptionStr:='房屋租赁'; FangWuDetailQuery.sql.add('select * from Fwzl where 编号='''+Request.Query+''''); end; 1:begin CaptionStr:='写字楼租赁'; FangWuDetailQuery.sql.add('select * from Xzlz where 编号='''+Request.Query+''''); end; end; FangWuDetailQuery.open; response.content:= '<html><body><head<title>'+CaptionStr+'</title></head>'#13+ '<table border><center>'#13; {信息分成两屏显示,在第一屏中显示三个字段内容,而第二屏是从第四个字段开始显示.表格显示形式为字段名和字段值,每个字段显示一行,用字段的总数(FangWuDetailQuery.fieldcount)控制循环次数} for i:=1 to FangWuDetailQuery.fieldcount-3 do response.content:=response.content+ '<tr><td>'+FangWuDetailQuery.fields[i].fieldname+'</td>'#13+'<td>'+ FangWuDetailQuery.fields[i].asstring+'</td></tr>'#13; response.content:=response.content+ '</center></table><hr>'#13+'</body></html>'#13; //最终完成响应客户请求的HTML表格end;procedure TQueryWebModule.QueryWebModuleRenCaiDetailQueryAction( Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);//人才详细信息查询 var i:integer; CaptionStr:string; begin i:=0; //IF语句根据客户请求参数判别下一步应执行的查询。 if pos('Rcz',Request.query)>0 THEN i:=0; if pos('Qiz',Request.query)>0 THEN i:=1; if pos('JLZ',Request.query)>0 THEN i:=2; RenCaiDetailQuery.close; RenCaiDetailQuery.SQL.clear; case i of 0:begin CaptionStr:='人才招聘'; RenCaiDetailQuery.sql.add('select * from RenCaizp where 编号='''+Request.Query+''''); end; 1:begin CaptionStr:='求 职'; RenCaiDetailQuery.sql.add('select * from Qiuzhi where 编号='''+Request.Query+''''); end; 2:begin CaptionStr:='人才交流中心'; RenCaiDetailQuery.sql.add('select * from Jiaoliuzx where 编号='''+Request.Query+''''); end; end; RenCaiDetailQuery.open; response.content:= '<html><body><head<title>'+CaptionStr+'</title> </head>'#13+'<table border><center>'#13; {信息分成两屏显示,在第一屏中显示三个字段内容,而第二屏是从第四个字段开始显示. 表格显示形式为字段名和字段值,每个字段显示一行,用字段的总数(RenCaiDetailQuery.fieldcount)控制循环次数} for i:=1 to RenCaiDetailQuery.fieldcount-3 do response.content:=response.content+ '<tr><td>' +RenCaiDetailQuery.fields[i].fieldname+'</td>'#13+'<td>'+ RenCaiDetailQuery.fields[i].asstring+'</td></tr>'#13; response.content:=response.content+'</center> </table><hr>'#13+'</body></html>'#13; //最终完成响应客户请求的HTML表格end;procedure TQueryWebModule.QueryWebModuleRenCaiQueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); //人才简要信息查询动作项的事件处理过程,它形成响应Web客户的页面 //并为用户提供查询人才详细信息的超级链接 var i:integer; CaptionStr,colstr1,colstr2,colstr3:string; begin i:=0; //为了减少程序的壅余、精炼程序,对与人才有关的所有查询都采用同一个查询组件 //,实现动态查询和动态生成响应客户请求的HTML表格 if Request.query='Rcz' THEN i:=0; if Request.query='Qiz' THEN i:=1; if Request.query='JLZ' THEN i:=2; RenCaiQuery.close; RenCaiQuery.sql.clear; case i of 0:begin CaptionStr:='人才招聘'; RenCaiQuery.sql.add('select * from RenCaizp where 编号 like '''+'Rcz%'''); colstr1:='招聘单位'; colstr2:='地址'; colstr3:='职位'; end; 1:begin CaptionStr:='求 职'; colstr1:='姓名'; colstr2:='所在地区'; colstr3:='求职意向'; RenCaiQuery.sql.add('select * from Qiuzhi where 编号 like '''+'Qiz%'''); end; 2:begin CaptionStr:='人才交流中心'; colstr1:='名称'; colstr2:='地址'; colstr3:='联系人'; RenCaiQuery.sql.add('select * from Jiaoliuzx where 编号 like '''+'JLZ%'''); end; end; RenCaiQuery.open;{形成HTML表的标题和表头信息,在该表中有四列信息,前三列为基本信息,第四列用于形成完成显示详细信息而必须的超级链接和条件,此处的条件是完成查询当前记录的 //信息后部分} Response.content:='<HTML><HEAD><TITLE>人才信息</TITLE></HEAD><BODY>'#13+ '<H3 ALIGN="CENTER">'+CaptionStr+'</H3>'#13+'<table border>'#13; Response.content:=Response.content+'<TR BgColor="White"><TH>'+colstr1+ '</TH><TH>'+colstr2+'</TH><TH>'+colstr3+'</TH><TH>其它</TH></TR>'; while not RenCaiQuery.EOF do //当表的记录指针不在末尾时,获取当前表的所有前三个字段 begin Response.content:=Response.content+Format('<tr><td>%s</td><td>%s</td><td>%s</td><td><a HREF="%S/RCDetailQuery?%s">%s</a></td></tr>'#13, [RenCaiQuery.fields[1].AsString,RenCaiQuery.fields[2].AsString,RenCaiQuery.fields[3].AsString,Request.ScriptName,RenCaiQuery.fields[0].AsString,'详细']); RenCaiQuery.Next; //获取下一个记录 end; Response.content:=Response.content+'</table></BODY></HTML>'#13; //最终完成响应客户请求的HTML表格end;procedure TQueryWebModule.QueryWebModuleOtherQueryAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);begin//其它项目简要信息查询end;procedure TQueryWebModule.QueryWebModuleOtherDetailQueryAction( Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);begin//其它项目详细信息查询end;end.