ผมมีไฟล์ /db/person.mdb เก็บข้อมูล
มี 2tables 1query
table1 มี2fields คือ departmentID กับ department
table2 มี4fields คือ ID , departmentID , name และ duty
query1 มีทุกfields สัมพันธ์เชื่อมโยงด้วย departmentID
department มีชื่อท้งหมด 7 แผนก
ผมสร้างไฟล์ asp เพื่อแสดง ชื่อคนและหน้าที่ในแต่ละแผนกดัง code ข้างล่างนี้
<table border="3">
<%
Set Conndb = Server.createObject("ADODB.Connection")
Conndb.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("/db/person.mdb")%>
<%for dn=1 to 7%>
<%Sql = "SELECT * FROM query1 WHERE DepartmentID = "&dn&""
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open Sql, Conndb,1,3
%>
<tr>
<td colspan=3><center><%=Rs("Department")%></center></td>
</tr>
<%
i = 0
Do While Not Rs.Eof
i = i + 1
%>
<tr>
<td><%=i%>.</td>
<td><%=Rs("name")%></td>
<td><%=Rs("duty")%></td>
</tr>
<%Rs.MoveNext
Loop %>
<%Rs.Close
set Rs = Nothing%>
<%Next%>
<%Conndb.Close
set Conndb = Nothing
%>
</TABLE>
ผลการแสดงก็เรียบร้อยดี
แต่พอวันหนึ่งมีแผนกหนึ่งไม่มีเจ้าหน้าที่ department ที่7
จึงได้ลบชื่อในแผนกนั้นออก
ทำให้เกิด error ดังนี้
ADODB.Field error '80020009'
Either BOF or EOF is True, or the current record has been deleted.
Requested operation requires a current record.
/department.asp, line 0
ส่วนอีก6department ที่มี name ก็ยังแสดงข้อมูลอยู่
แล้วมีข้อความ error ต่อท้าย
ผมต้องเขียน code เพิ่มอย่างไรดีครับให้มันไม่ error
และไม่แสดงชื่อ department ที่ไม่มี name และ duty อยู่ในแผนกนั้นด้วยครับ
ตอนนี้แก้ขัดโดยใช้<%for dn=1 to 6%>
แต่คิดว่าน่าจะมีวิธีเขียน code ว่าถ้า departmentไหนไม่มีชื่อคน ก็ไม่ต้องแสดง department นั้นเลย
ผมลองใส่
<%if (isnull(Rs("name")) and isnull(Rs("duty")) then
else%>
....
...
....
...
<%end if%>
คร่อมส่วนที่แสดงข้อมูลก็ไม่ทำงานครับ
ขอบคุณมากครับที่ช่วยเหลือ
มือใหม่เพิ่งหัด asp ครับ