0

我正在寻找 asp classic 中的 vb 脚本,如下所示:

我在 MSSQL2005 数据库中有一张名为“出席”的表,其中有一些记录。该表包括 2 列 ( sname, sdate)。

我的问题是如何显示所有记录,如考勤登记册,这意味着所有日期都应该在水平列中作为顶部的标题(如果月份有 31 个日期,然后是 31 列,则基于所选年份的月份)。

在下一行:在日期列下方,如果标题日期与字段中的日期匹配,sdate则它应该显示"P"或应该显示"A"。它基本上是一个没有日期名称的日历。

不幸的是,即使是彻底的搜索也没有找到我任何内置的解决方案

4

1 回答 1

1

在这里,我将向您展示如何通过使用vbscript 和 ASP Classic传递单个月份和年份值来显示出勤记录

本文可能对正在寻找相同解决方案的其他人有所帮助。

我有 2 个表格,如下所示

  1. 员工:包含有关员工用户的信息,如(staff_id,Aname,...)
  2. Staff_attendance:员工用户的出勤情况保存在此表中,并带有日期唯一的行。表有 3 列(staff_Aid、staff_attn_dt、staff_Att_takenby)

现在我将向您展示如何通过从“staff”表中检索记录作为考勤记录来检索“Staff_attendance”表中的所有记录(见下图)

在此处输入图像描述

<!--#include file="connection.asp"-->
<%
' above include file is to bring data connection which is "MM_connDUdirectory_STRING"
Dim MyMonth 'Month of calendar
Dim MyYear  'Year of calendar
Dim FirstDay 'First day of the month.  0 = Sunday
Dim CurrentDay 'Used to print dates in calendar
Dim Col 'Calendar column
Dim Row 'Calendar row
MyMonth = request.Form("imonth") 
MyYear = request.Form("iyear")

If MyMonth = 0 then MyMonth = Month(Date)
if MyYear = 0 then MyYear = Year(Date)

response.write "<b>" & MonthName(MyMonth) & " " & MyYear & "</b>"
%>

<table width="100%" style="border: #6F6F6F 1px solid; text-align: center;">
<tr>
<td nowrap style="border-bottom: #6F6F6F 1px solid; text-align: center;">&nbsp;&nbsp;Faculty Name&nbsp;&nbsp;</td> 
<%
FirstDay = DateSerial(MyYear, MyMonth, 1)
CurrentDay = 1
For Col = 0 to 30
if CurrentDay > LastDay(MyMonth, MyYear) then
%>

<td style="border: #6F6F6F 1px solid; text-align: center;">&nbsp;</td>
<% else %>
<td style="border: #6F6F6F 1px solid; text-align: center;"><font face='Arial, Helvetica, sans-serif' size='2'><%= CurrentDay %></font></td>

<%
CurrentDay = CurrentDay + 1
End If
Next
'Below i have added additional column header for number of persent (NOP)
%>
<td style="border-bottom: #6F6F6F 1px solid; background-color: #505050; color: #ffffff;"><b>NOP</b></td>
</tr>
<%          
dim Objrs1, str1, objCmd1
Set objCmd1 = Server.CreateObject("ADODB.Command")
Set Objrs1   = Server.CreateObject("ADODB.Recordset")
str1 = "SELECT * FROM staff ORDER BY Aname Asc"
With objCmd1
.ActiveConnection = MM_connDUdirectory_STRING
.CommandText = str1
.CommandType = adCmdText
end with 
Objrs1.open objCmd1, , 1, 2

if Objrs1.EOF then
%>
<div class="information-box round">Sorry! Record(s) not Found</div>
<% else %>
<% while not objrs1.EOF %>
<tr>
<td nowrap style="padding: 5px 0 5px 0;border-bottom: #6F6F6F 1px solid;background-color: #F8F9FA; font-size: 13px;">&nbsp;&nbsp;<b><%= objrs1("Aname") %></b>&nbsp;&nbsp;</td>
<%
FirstDay = DateSerial(MyYear, MyMonth, 1)
CurrentDay = 1
For Col = 1 to 31
if CurrentDay > LastDay(MyMonth, MyYear) then
%>
<td style="border: #6F6F6F 1px solid; text-align: center;">&nbsp;</td>
<% else %>
<td style="border: #6F6F6F 1px solid; text-align: center;background-color: #FFFCCC;"><font face='Arial, Helvetica, sans-serif' size='2'>
<%
'below code to match above retrieved staff record in "Staff_attendance" table
dim Objrs1x, str1x, objCmd1x
Set objCmd1x = Server.CreateObject("ADODB.Command")
Set Objrs1x   = Server.CreateObject("ADODB.Recordset")
str1x = "SELECT staff_Aid, staff_attn_dt, staff_Att_takenby FROM Staff_attendance where staff_Aid=? and day(staff_attn_dt)=? and Month(staff_attn_dt)=? and Year(staff_attn_dt)=?"
With objCmd1x
.ActiveConnection = MM_connDUdirectory_STRING
.CommandText = str1x
.CommandType = adCmdText
.Parameters.Append(.CreateParameter("@param4gk1", adInteger, adParamInput, ,objRs1("Aid")))
.Parameters.Append(.CreateParameter("@param4gk22", adVarChar, adParamInput, len(MyYear)))
.Parameters.Append(.CreateParameter("@param4gk2", adVarChar, adParamInput, len(MyMonth)))
.Parameters.Append(.CreateParameter("@param4gk21", adVarChar, adParamInput, len(MyYear)))

.Parameters("@param4gk1").Value = objRs1("Aid")
.Parameters("@param4gk22").Value = Col
.Parameters("@param4gk2").Value = MyMonth
.Parameters("@param4gk21").Value = MyYear
end with 
Objrs1x.open objCmd1x, , 1, 2

if not Objrs1x.EOF then
%>
<span style="color: #0000ff;" title="Taken by user: <%=Objrs1x("staff_Att_takenby")%>"><b>P</b></span></font>
<% else %>
<span style="color: #ff0000;"><b>A</b></span></font>
<%
End If
Objrs1x.close
Set Objrs1x = Nothing
Set objCmd1x = Nothing
%>      
</td>
<%
CurrentDay = CurrentDay + 1
End If
%>
<%
Next
'Below code to show Number of persent (NOP) in column
%>
<td style="border-bottom: #6F6F6F 1px solid; background-color: #505050; color: #ffffff;">
<%
dim Objrs1xq, str1xq, objCmd1xq
Set objCmd1xq = Server.CreateObject("ADODB.Command")
Set Objrs1xq   = Server.CreateObject("ADODB.Recordset")
str1xq = "SELECT count(staff_Aid) as nop FROM Staff_attendance where staff_Aid=? and Month(staff_attn_dt)=? and Year(staff_attn_dt)=?"
With objCmd1xq
.ActiveConnection = MM_connDUdirectory_STRING
.CommandText = str1xq
.CommandType = adCmdText
.Parameters.Append(.CreateParameter("@param4gk1x", adInteger, adParamInput, ,objRs1("Aid")))
.Parameters.Append(.CreateParameter("@param4gk2x", adVarChar, adParamInput, len(MyMonth)))
.Parameters.Append(.CreateParameter("@param4gk21x", adVarChar, adParamInput, len(MyYear)))

.Parameters("@param4gk1x").Value = objRs1("Aid")
.Parameters("@param4gk2x").Value = MyMonth
.Parameters("@param4gk21x").Value = MyYear
end with 
Objrs1xq.open objCmd1xq, , 1, 2

if not Objrs1xq.EOF then
%>
<b><%=Objrs1xq("nop")%></b>
<%
End If
Objrs1xq.close
Set Objrs1xq = Nothing
Set objCmd1xq = Nothing
%>      
</td>
</tr>
<%
Objrs1.MoveNext()
Wend
%>
<%
end if
Objrs1.Close
Set Objrs1 = Nothing
%>
</table>
<%
Function MonthName(MyMonth)
Select Case MyMonth
Case 1
MonthName = "January"
Case 2
MonthName = "Febuary"
Case 3
MonthName = "March"
Case 4
MonthName = "April"
Case 5
MonthName = "May"
Case 6
MonthName = "June"
Case 7
MonthName = "July"
Case 8
MonthName = "August"
Case 9
MonthName = "September"
Case 10
MonthName = "October"
Case 11
MonthName = "November"
Case 12
MonthName = "December"
Case Else
MonthName = "ERROR!"
End Select
End Function

Function LastDay(MyMonth, MyYear)
' Returns the last day of the month. Takes into account leap years

Select Case MyMonth
Case 1, 3, 5, 7, 8, 10, 12
LastDay = 31

Case 4, 6, 9, 11
LastDay = 30

Case 2
If IsDate(MyYear & "-" & MyMonth & "-" & "29") Then LastDay = 29 Else LastDay = 28

Case Else
LastDay = 0

End Select
End Function
%>
于 2015-04-09T09:12:30.217 回答