整个
Project Report
应用程序的原始程序代码都内含在单一
ASP
网页中,这使用一种回传窗体来处理使用者的报告自订选项。由于本文着重于移植
ASP
应用程序至
ASP.NET
,故并未涵盖
ASP
程序代码运作的方式。我们假设您具备如何将
ASP
及
ADO
数据存取用于建置现今的应用程序的相关知识。
下列程序代码显示在
Microsoft Access
数据库建立并开启的
ADO Connection
对象。
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = _
"PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & _
Server.MapPath("Projects.mdb") & ";"
objConn.Open
Department
数据表中的每一数据列都是含有
Name
及
DepartmentID
的数据录集
(Recordset)
。此数据录集的内容之后会显示在清单方块中。
Set objDeptListRS = Server.CreateObject("ADODB.Recordset")
objDepartmentListingRS.Open "Department", objConn, _
adOpenForwardOnly, adLockReadOnly, adCmdTable
'
重复整个数据录集
Response.Write "<b>Department:</b> " & _
"<select size=""1"" name=""lstDepartmentID"">"
Response.Write "<option value=""-1"">" & _
"-- Show All Departments --</option>" & vbCrLf
Do While Not objDeptListRS.EOF
Response.Write "<option value=""" & _
objDepartmentListingRS("DepartmentID") & """"
'
我们需要将项目变成「已选取」状态吗?
If CInt(objDepartmentListingRS("DepartmentID")) = _
CInt(iDepartmentID) then
Response.Write " selected"
End If
Response.Write ">" & objDeptListRS("DepartmentName") &_
"</option>"
objDeptListRS.MoveNext
Response.Write "</select>" & vbCrLf & vbCrLf
接下来,将依使用者所选取的选项建构动态
SQL
查询。请注意在下列程序代码中建立了
SQL
查询的
WHERE
子句,让它永远只撷取那些从前一年开始的项目。
WHERE
子句可根据使用者的选项更进一步扩充。
iDepartmentID
和
strProjectView
变量是先前定义且指派给使用者所选取的清单方块值。
strSQL = "SELECT D.DepartmentName, ProjectName, " & _
"StartDate, EstimatedEndDate, ActualEndDate, " & _
"Priority, ProjectDescription " & _
"FROM Project P " & _
"INNER JOIN Department D ON " & _
"D.DepartmentID = P.DepartmentID " & _
"WHERE StartDate >= #" & _
DateAdd("yyyy", -1, Date()) & "# "
'
如有需要现在可以建构额外的 WHERE 子句
If CInt(iDepartmentID) <> -1 then
'Add a clause for the department ID
strSQL = strSQL & " AND P.DepartmentID = " & _
iDepartmentID
End If
'
我们想要检视哪种项目?
Select Case strProjectView
Case "ongoing":
strSQL = strSQL & " AND ActualEndDate IS NULL"
Case "completed":
strSQL = strSQL & " AND ActualEndDate IS NOT NULL"
End Select
建立的另一个
Recordset
对象,
objProjectsRS
,会填入上列动态
SQL
查询结果。最后,此数据录集会一直重复并显示为
HTML
表格。
'
输出 HTML table 标记和 th 标记
Response.Write "<p><table align=""center"" " & _
"border=""1"" cellspacing=""1"">" & vbCrLf
Response.Write "<tr><th>Project</th><th>StartDate</th>" &_
"<th>Estimated Completion</th><th>Actual " & _
"Completion</th><th>Priority</th>" & _
"<th>Description</th></tr>" & vbCrLf
'
重复整个数据录集
Do While Not objProjectsRS.EOF
'
显示数据录集信息
objProjectsRS.MoveNext '
移到下一笔记录
Response.Write "</table>" & vbCrLf & vbCrLf