צפיות
תשובות
בעיה במערכת פורומים בסיסית
<%@Language=VBScript codepage=1255%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html dir="rtl">
<head>
<meta http-equiv="content-language" content="he">
<meta http-equiv="content-type" content="text/html; charset=windows-1255">
<title>פורומים</title>
</HEAD>
<BODY link="#0099FF" vlink="#3399FF" alink="#00FFFF">
<CENTER><font style="font-size:12pt;" face="arial"><B>
</FONT>
<font style="font-size:15pt;text-decoration:underline" face="arial">פורום</FONT><font style="font-size:12pt;" face="arial"><font style="font-size:15pt;" face="arial">
</font><BR><BR><BR>
<TABLE BORDER="1" width="100%">
<%
'הצגה מהדטה בייס
Set MyConn = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("forumdata.mdb")
MyConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
SQL_query = "SELECT * FROM cat ORDER BY id DESC"
Set RS = MyConn.Execute(SQL_query)
WHILE NOT RS.EOF
%>
<TR>
<TD bordercolor="#0099FF" bgcolor="#3399FF" bordercolorlight="#33CCCC" bordercolordark="#003399"><font face="Tahoma"></font><B><font face="Tahoma" color="#000066"></font> <%=RS("Name")%></CENTER></B></font></TD>
</TR>
<%
'הצגה מהדטה בייס
Set MyConn = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("forumdata.mdb")
MyConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
SQL_query = "SELECT * FROM forums WHERE cat='"& RS("Name") &"'"
Set RS = MyConn.Execute(SQL_query)
WHILE NOT RS.EOF
%>
<TR>
<TD> <A HREF="forum.asp?id=<%=RS("id")%>" title="<%=RS("name")%>"><%=RS("name")%></A></TD>
</TR>
<%
RS.MoveNext
WEND
%>
<%
RS.MoveNext
WEND
%>
</TABLE>
</BODY>
</HTML>
אני יודע שזה קצת ארוך…
זה נותן לי את הארור הבא:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
/selekt/images/index.asp, line 48
ניסיתי כבר כל מה שאני יודע ואין לי מושג איך לסדר את זה…
תודה לעוזרים ![]()

13 תשובות
ושורה 48 היא…?
אלי ענתבי
הWEND השני
<%
RS.MoveNext
WEND //שורה 48
%>
אממ..
אתה לא יכול להגדיר פעמיים את RS ולשנות אותו אם אתה מצפה ממנו להמשיך לרוץ בלולאה החיצונית…
בלולאה הפנימית שלך אתה צריך להגדיר משתנה RS שונה.
אלי ענתבי
עזרה?
תשובה
כמו שהשפוי ענה לך ולא שמתי לב לתגובתו,
אין אפשרות להגדיר RS פעמיים כשאתה בלולאה בתוך לולאה, שאגב ממש לא יעילה.
בעזרת LEFT JOIN אפשר להציג את כל הקטגוריות והפורומים ביחד בשאילתה אחת בלבד, לולאה אחת בלבד.
"החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
http://Www.Torec.Net * http://Www.Torec.In
כנס שנייה
אתה יכול לתת לי קוד או להסביר לי איך לעשות?
כי אני די מתחיל בASP
תשובה
אם אתה מתחיל, אולי מוטב שתמשיך בדרך בה התחלת.
אתה קודם צריך ללמוד שאילתות JOIN.
דוגמא לשאילתה:
SELECT ….. FROM category INNER JOIN forums ON (category.id=forums.cat_id) ORDER BY category.name, forums.name
בצורה כזאת אתה עושה לולאה אחת שמציגה את הקטגוריה והפורומים.
אפשר לסדר בתוך הלולאה עם משפט תנאי פשוט שזה יציג את כל הפורומים מתחת לקטגוריה הנכונה.
משהו כזה:
lastCategory = "" 'לפני תחילת הלולאה
Do while not rs.EOF
If lastCategory <> rs("cat_name") Then
Response.Write rs("cat_name")
lastCategory = rs("cat_name")
End If
Response.Write rs("forum_name") &" <br>"
rs.MoveNext : Loop
ככה אפשר לעשות הכל בתוך לולאה אחת וביעילות טובה יותר.
זו רק דוגמא בסיסית.
"החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
http://Www.Torec.Net * http://Www.Torec.In
הקוד שנוצר
<%
'הצגה מהדטה בייס
Set MyConn = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("forumdata.mdb")
MyConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
SQL_query = "SELECT * FROM cat INNER JOIN forums ON (cat.ID=forums.Cat) ORDER BY cat.Name, forums.N ame"
lastCategory = "" 'לפני תחילת הלולאה
Do while not rs.EOF (פה נמצאת שורה 22)
If lastCat <> rs("name") Then
Response.Write rs("name")
lastCategory = rs("name")
End If
Response.Write rs("name") &" <br>"
rs.MoveNext : Loop
%>
<TR>
<TD bordercolor="#0099FF" bgcolor="#3399FF" bordercolorlight="#33CCCC" bordercolordark="#003399"><font face="Tahoma"></font><B><font face="Tahoma" color="#000066"></font> <%=RS("Name")%></CENTER></B></font></TD>
</TR>
<TR>
<TD> <A HREF="forum.asp?id=<%=RS("id")%>" title="<%=RS("name")%>"><%=RS("name")%></A></TD>
</TR>
<%
RS.MoveNext
%>
אבל זה עדיין נותן לי שגיאה כזאת:
Microsoft VBScript runtime error '800a01a8'
Object required: "
/index.asp, line 22
תשובה
לא פתחת RS בכלל…
rs.Open SQL_query, MyConn
"החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
http://Www.Torec.Net * http://Www.Torec.In
אופס
הקוד עכשיו כזה:
<%
'הצגה מהדטה בייס
Set MyConn = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("forumdata.mdb")
MyConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
SQL_query = "SELECT * FROM cat INNER JOIN forums ON (cat.ID=forums.Cat) ORDER BY cat.Name, forums.N ame"
lastCategory = "" 'לפני תחילת הלולאה
rs.Open SQL_query, MyConn
Do while not rs.EOF
If lastCat <> rs("name") Then
Response.Write rs("name")
lastCategory = rs("name")
End If
Response.Write rs("name") &" <br>"
rs.MoveNext : Loop
%>
וזה נותן לי את השגיאה הזאת:
Microsoft VBScript runtime error '800a01a8'
Object required: "
/index.asp, line 22
קצת מוזר
הוא אומר שגיאה בשורה 22 ומה שהבאת זה רק 18 שורות…
בכל אופן, אתה צריך ללמוד לאתר את הבעיה בעצמך, דיבוג,
אולי יכול לקחת לך זמן אבל ככה לומדים הכי טוב.
ואם אתה לא מסוגל כרגע לעשות מה שהצעתי, תישאר
בדרך בה התחלת ועם הזמן שתדע יותר טוב ויהיה לך ניסיון
רב יותר, תוכל להמשיך ולייעל את הקודים הקיימים שלך.
בהצלחה.
"החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
http://Www.Torec.Net * http://Www.Torec.In
שורה 22 היא השורה של הRS שנתת לי
תשובה
אתה הגדרת בכלל RS…. ?
תחליף את השורה לזאת:
Set rs = MyConn.Execute(SQL_query)
"החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
http://Www.Torec.Net * http://Www.Torec.In