0

以下のように、asp classic で vb スクリプトを探しています。

MSSQL2005 データベースに「出席」という名前のテーブルがあり、いくつかのレコードがあります。表には 2 つの列があります ( sname, sdate)。

私の質問は、出席簿などのすべてのレコードを表示するにはどうすればよいかということです。つまり、すべての日付を上部のヘッダーとして水平列にする必要があります (月に 31 の日付があり、次に 31 の列がある場合は、選択した年の月に基づいています)。

次の行: 日付列の下で、ヘッダーの日付がフィールドの日付と一致する場合、sdateそれが表示"P"されるか、表示される必要があります"A"。これは基本的に、曜日のないカレンダーです。

残念ながら、徹底的な検索でもまだ組み込みのソリューションは見つかりませんでした

4

1 に答える 1

1

ここでは、 vbscript と ASP Classicを使用して 1 つの月と年の値を渡して出席簿を表示する方法を紹介します。

この記事は、同じ解決策を探している他の人に役立つかもしれません.

以下に書かれているように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 に答える