Find Consultant部分

Find Consultant部分位于fconsult子目录，其中包含有3个ASP页（见图29.17）。在第一页中，用户可以输入寻找申请者的搜寻准则。在第二页搜寻结果将被显示。最后，在第三页上，用户可查看通过寻找所得的申请者的履历。

图29.17 Find Consultant部分

fconsult.asp fconsult2.asp fconsult3.asp

Find Consultant页

Find Consultant页包含有用于输入搜寻准则的HTML表单（见图29.18）。用户可以基于他们的地理位置来查询申请者。例如，你可以只查询住在California,Fresno的申请者，或者你可以寻找在法国的申请者。

进一步，一个用户可以搜找具有特别技能的求职者。这个表单可被用于确定合计三条技能的查询。例如，你可以查找懂得如何使用Delphi和JScript的求职者。

你也可以使用表单来确定不同的布尔操作符。例如，你可以查找那些同时会用Delphi 和JScript或者会使用两者之一的求职者。

图29.18 Find Consultant页

Find Consultant Results 页

查寻的结果在Find Consultant Results页上显示（见图29.19）。所有工作在这个ASP页中完成。在这个页里，一个SQL查询字符串将被产生用于动态查询resumes表。

图29.19 Find Consultant Results页

表29.3显示了整个Find Consultant Results页的完整代码：

表29.3 fconsult2.asp的代码：

<!-- #INCLUDE VIRTUAL="ADOVBS.INC" -->

<%

' Shows Matching Job Skills In Red

SUB ShowSkills

DIM SkillA,SkillB,SkillC

SkillA=Request.Form("SkillA")

SkillB=Request.Form("SkillB")

SkillC=Request.Form("SkillC")

FOR i=0 TO RS.Fields.Count-1

IF RS(i).type=vbBoolean THEN

IF RS(i) THEN

IF RS(i).NAME=SkillA OR RS(i).NAME=SkillB or RS(I).NAME=SkillC THEN

Response.Write("<FONT COLOR=""#FF0000""><B>"&RS(i).Name&"</B></FONT> ")

ELSE

Response.Write(RS(i).Name&" ")

END IF

END IF

End IF

NEXT

END SUB

%>

<HTML>

<HEAD><TITLE> Find A Consultant </TITLE></HEAD>

<BODY BGCOLOR="#FFFFFF" ALINK="#FF0000">

<!-- Create Title Banner Table -->

<TABLE BGCOLOR="#00aaff" WIDTH="100%">

<TR><TD VALIGN=CENTER>

<FONT FACE=ARIAL SIZE=+4> &nbsp;ASP Job Site</FONT><FONT SIZE=+2> &nbsp;&nbsp;<I> Find Consultant </I></FONT>

</TD></TR>

</TABLE>

<!-- Create Main Body Table -->

<TABLE HEIGHT="100%" CELLPADDING=20>

<TR>

<!-- The Left Cell Of The Body Table Contains The Navigation Strip -->

<TD ALIGN=CENTER VALIGN=TOP BGCOLOR="#D0D0D0" WIDTH=100>

<B>

<P><A HREF="../default.asp">Home</A>

<P><HR>

<P>Consultants

<P><A HREF="/fjob/fjob1.asp">Find A Job</A>

<P><A HREF="/nresume/nresume1.asp">Post A Resume</A>

<P><A HREF="/uresume/uresume1.asp">Update Your Resume</A>

<P><HR>

<P>Employers

<P><FONT COLOR="#808080">Find A Consultant</FONT>

<P><A HREF="/njob/njob1.asp">Post A Job</A>

<P><A HREF="/ujob/ujob1.asp">Update Job Information</A>

</B>

</TD>

<!-- The Right Cell Of The Body Table Contains The Page Contents -->

<TD ALIGN=CENTER VALIGN=CENTER>

<TABLE HEIGHT="100%" ALIGN=CENTER CELLSPACING=50>

<TR><TD>

<%

' Create The Search String

MySQL="SELECT * FROM resumes "

IF Request.Form("City")<>"" THEN Loc="City='"&Request.Form("City")&"' AND "

IF Request.Form("State")<>"" THEN Loc=Loc&"State='"&Request.Form("State")&"' AND "

IF Request.Form("Country")<>"" THEN Loc=Loc&"Country='"&Request.Form("Country")&"' AND "

IF LEFT(Request.Form("SkillA"),1)<>"" THEN

Match=Request.Form("SkillA")&"=1 "

END IF

IF LEFT(Request.Form("SkillB"),1)<>"" THEN

IF Match<>"" THEN Match=Match&Request.Form("AndOrB")&" "

Match=Match&Request.Form("SkillB")&"=1 "

END IF

IF LEFT(Request.Form("SkillC"),1)<>"" THEN

IF Match<>"" THEN Match=Match&Request.Form("AndOrC")&" "

Match=Match&Request.Form("SkillC")&"=1 "

END IF

IF Loc<>"" OR Match<>"" THEN

MySQL=MySQL&"WHERE "&Loc

IF Match<>"" THEN

MySQL=MySQL&"("&Match&")"

ELSE

MySQL=LEFT(MySQL,LEN(MySQL)-4)

END IF

MySQL=MySQL&" ORDER BY EntryDate"

END IF

' Create ADO Objects

Set MyConn=Server.CreateObject("ADODB.Connection")

MyConn.Open Application("ConnectionString")

Set RS=MyConn.Execute(MySQL)

' Check For No Matches

IF RS.EOF THEN

%>

<FONT SIZE=+2><i>No consultants matched your criteria.</i></FONT>

<P>

<FORM ACTION="fconsult1.asp">

<INPUT TYPE="SUBMIT" VALUE="Search Again">

</FORM>

<%

ELSE

%>

<FONT SIZE=+2>Consultants:</FONT>

<%

' Show All Matches

WHILE NOT RS.EOF

%>

<HR WIDTH=80 ALIGN=LEFT>

<B>Name: </B><%=RS("FullName")%>

<BR><B>Location: </B><%=RS("City")&" "&UCASE(RS("State"))&" "&RS("Country")%>

<BR><B>Skills: </B><%ShowSkills%>

<BR><A HREF="fconsult3.asp?UserID=<%=RS("UserID")%>">View Resume</A>

<%

RS.MoveNext

WEND

%>

<P>

<FORM ACTION="fconsult1.asp">

<INPUT TYPE="SUBMIT" VALUE="Search Again">

</FORM>

<%

END IF ' For No Match

RS.Close

MyConn.Close

%>

</TD></TR></TABLE>

</TD></TR>

</TABLE>

</BODY>

</HTML>

用于查找resumes 表的SQL查寻字符串在Create The Search String代码段创建。查寻字符串来自用户在Find Consultant页HTML表单中输入的信息组合而成。

这个查询字符串返回一个记录集，如果记录集为空，用户将被告之没有特定的求职者与搜寻准则相应匹配，否则将显示一个匹配条件的求职者信息列表。

当这些求职者被列出时，他们的技能也同时列出。符合查寻准则的申请者的技能用红色字体列出，其它技能以黑色字体列出，这通过ShowSkills过程来实现。

ShowSkills过程使用了一个技巧，它通过检测字段的数据类型来区分判断resumes表中的技能字段。ADO字段对象的Type属性返回一列的数据类型。在resumes表中，技能被存储在BIT列中（VBScript是布尔列vbBoolean）。一个申请者可能有技能或者没有，因此，ShowSkills过程只显示BIT列的名字和值。

对于每个所列出的申请者，同时也对应一个View Resume热链接。这个链接由以下代码产生：

<BR><A HREF=

“fconsult3.asp?UserID=<%=RS(“UserID”)%>”>View Resume</A>

文本View Resume用来链接到ASP 页fconsult3.asp。这是View Resume页，当用户单击View Resume查看特定申请者信息时，这个申请者的UserID由字符串传递给View Resume页。

View Resume页

View Resume页显示了一个简历表（见图29.20）。这页显示匹配由UserID字符串传递过来的UserID的申请人的简历，如果这页没有收到一个查询字符串的话，将对用户发出警告。

表29.4显示了View Resume页的完整代码。

图29.20 View Resume页

表29.4 View Resume页:fconsult3.asp的代码。

<!-- #INCLUDE VIRTUAL="ADOVBS.INC" -->

<%

' Shows A Part Of A Resume Only If It Exists

SUB ShowIt(theCol,theVar)

IF RS(theVar)<>"" THEN

%>

<B><%=theCol%></B> <%=RS(theVar)%><BR>

<%

END IF

END SUB

' Loops Through All Skills In Resume

SUB ShowSkills

FOR i=0 TO RS.Fields.Count-1

IF RS(i).type=vbBoolean THEN

IF RS(i) THEN Response.Write("<LI>"&RS(i).Name)

End IF

NEXT

END SUB

%>

<HTML>

<HEAD><TITLE> View Resume </TITLE></HEAD>

<BODY BGCOLOR="#FFFFFF" ALINK="#FF0000">

<!-- Create Title Banner Table -->

<TABLE BGCOLOR="#00aaff" WIDTH="100%">

<TR><TD VALIGN=CENTER>

<FONT FACE=ARIAL SIZE=+4> &nbsp;ASP Job Site</FONT><FONT SIZE=+2> &nbsp;&nbsp;<I> Find Consultant </I></FONT>

</TD></TR>

</TABLE>

<!-- Create Main Body Table -->

<TABLE HEIGHT="100%" CELLPADDING=20>

<TR>

<!-- The Left Cell Of The Body Table Contains The Navigation Strip -->

<TD ALIGN=CENTER VALIGN=TOP BGCOLOR="#D0D0D0" WIDTH=100>

<B>

<P><A HREF="../default.asp">Home</A>

<P><HR>

<P>Consultants

<P><A HREF="/fjob/fjob1.asp">Find A Job</A>

<P><A HREF="/nresume/nresume1.asp">Post A Resume</A>

<P><A HREF="/uresume/uresume1.asp">Update Your Resume</A>

<P><HR>

<P>Employers

<P><FONT COLOR="#808080">Find A Consultant</FONT>

<P><A HREF="/njob/njob1.asp">Post A Job</A>

<P><A HREF="/ujob/ujob1.asp">Update Job Information</A>

</B>

</TD>

<!-- The Right Cell Of The Body Table Contains The Page Contents -->

<TD ALIGN=CENTER VALIGN=CENTER>

<TABLE HEIGHT="100%" ALIGN=CENTER CELLSPACING=50>

<TR><TD>

<%

' Create ADO objects

Set MyConn=Server.CreateObject("ADODB.Connection")

MyConn.Open Application("ConnectionString")

' Create SQL SELECT String

MySQL="Select * FROM resumes WHERE UserID="&Request.QueryString("UserID")

Set RS=Server.CreateObject("ADODB.RecordSet")

' A Static Cursor Must Be Used To Retrieve The TEXT fields

RS.Open MySQL,Myconn,adOpenStatic

' Checks For Leap To Page From Nowhere

IF RS.EOF THEN

%>

<FONT SIZE=+2><I>You cannot retrieve this page directly.</I>

<BR>Click the Back button to return to the Find Consultant Page.</FONT>

<P>

<FORM ACTION="fconsult1.asp">

<INPUT TYPE="SUBMIT" VALUE="BACK">

</FORM>

<% ELSE %>

<!-- Show The Resume -->

<FONT SIZE=+2 FACE="Arial"><I><%=RS("FullName")%></I></FONT>

<P>

<FONT SIZE=+1><I>Contact Information:</I></FONT>

<BLOCKQUOTE>

<% ShowIt "Name:","FullName" %>

<B>Email:</B>

<A HREF="MAILTO:<%=RS("Email")%>"><%=RS("Email")%></A><BR>

<% ShowIt "Phone:","Phone" %>

<% ShowIt "City:","City" %>

<% ShowIt "State:", "State" %>

<% ShowIt "Country:","Country" %>

</BLOCKQUOTE>

<% IF RS("Goals")<>"" THEN %>

<P>

<FONT SIZE=+1><I>Work Goals:</I></FONT>

<BLOCKQUOTE>

<%=RS("Goals")%>

</BLOCKQUOTE>

<% END IF %>

<% IF RS("Experience")<>"" THEN %>

<P>

<FONT SIZE=+1><I>Experience:</I></FONT>

<BLOCKQUOTE>

<%=RS("Experience")%>

</BLOCKQUOTE>

<% END IF %>

<P>

<FONT SIZE=+1><I>Proficiencies:</I></FONT>

<BLOCKQUOTE>

<UL>

<% ShowSkills %>

</UL>

</BLOCKQUOTE>

<% IF RS("MoreScript")<>"" THEN %>

<P>

<FONT SIZE=+1><I>Scripting Language Experience:</I></FONT>

<BLOCKQUOTE>

<%=RS("MoreScript")%>

</BLOCKQUOTE>

<% END IF %>

<% IF RS("MoreProg")<>"" THEN %>

<P>

<FONT SIZE=+1><I>Programming Language Experience:</I></FONT>

<BLOCKQUOTE>

<%=RS("MoreProg")%>

</BLOCKQUOTE>

<% END IF %>

<% IF RS("MoreWeb")<>"" THEN %>

<P>

<FONT SIZE=+1><I>Web Server Experience:</I></FONT>

<BLOCKQUOTE>

<%=RS("MoreWeb")%>

</BLOCKQUOTE>

<% END IF %>

<% IF RS("MoreData")<>"" THEN %>

<P>

<FONT SIZE=+1><I>Database Experience:</I></FONT>

<BLOCKQUOTE>

<%=RS("MoreData")%>

</BLOCKQUOTE>

<% END IF %>

<%

END IF

RS.Close

MyConn.Close

%>

</TD></TR>

</TABLE>

</TD></TR>

</TABLE>

</BODY>

</HTML>

申请者的简历从 resumes 表从提取。一个包含有单个所匹配用户简历记录的记录集将被打开。注意，这个记录集不是以向前光标的形式打开。如果你使用一个向前光标来提取文本字段信息，会发生意想不到的怪事。

View Resume页使用同以前页相同的技巧来显示简历中的技能。记录中BIT列通过ADO字段对象的Type属性来检测，所有在简历中的技能都通过ShowSkills过程自动显示。