צפיות
תשובות
שאילתה חלופית בתנאי
היי!
אני צריך לעשות שאילתה בטבלה מסויימת לפי קריטריון x_id, ואם אין רשומה מתאימה בטבלה הזאת, אז שיחפש בטבלה אחרת, לפי אותו קריטריון, כמובן. עשיתי את הקוד הבא:
dim x_id, rs, sql
x_id = request.queryString ("x_id")
set rs=Server.CreateObject("ADODB.recordset")
sql = "SELECT * from table_x where x_id=" & x_id
if sql = "" then
dim sql2
sql2 = "SELECT * from table_y where x_id=" & x_id
sql = sql2
else
sql=sql
end if
rs.Open sql, conn
response.write rs("x_title")
rs.Close
set rs=Nothing
בצורה הזאת זה מבצע רק את החלק הראשון של הקוד, כלומר מחפש רק בטבלה X, אבך אם אין בו רשומה מתאימה – אני מקבל הודעת שגיאה – Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
אז איך אני גורם לזה לעבוד ולעשות את מה שצריך? אני חושב שצריך לעשות פה משהו עם הגדרת ה-EOF, אבל לא יודע איך…
תודה רבה מראש!!!
9 תשובות
איך עושים את הדבר הבא
היי לכולם!
יש לי טבלה באקסס שבנויה בצורה הבא:
_____field 1 | field 2 | option 1 | option 2 | option 3 | option 4|……… | date_field
RS1____24_|__45__|___a___|__b____|___c____|___d__|
RS2____25_|___6__|___1___|___2___|________|______|
RS3____26_|__44__|__black_|__white_|__yellow_|______|
RS4____27_|__37__|__me___|__you__|__them__|__us__|_they_|
מה שאני צריך זה שאילתא שתעבור על כל רשומה ותעשה כפתור רדיו לכל OPTION. סה"כ יש 8 OPTIONS, אבל השאילתה צריכה ליצור כפתור רק ך-OPTIONS בהם רשום משהו, לא ל-OPTION ריק. אז זה אמור להיראות משהו כזה:
a_|_1_|_black__|__me
b_|_2_|_white__|__you
c______yellow_|__them
d___________ |__us
_____________|__they
אני מניח שצריכה להיות פה איזו לולאה או משהו כזה, אבל לא בדיוק יודע איך לעשות את זה. מישהו יודע איך עושים את זה?
תודה רבה מראש!!!
נ.ב. אני בונה את הכל ב-ASP VBS
איפה אתה מסתבך?
בונים שאילתת sql שתשלוף נתונים מהטבלה. אני יוצא מנק' הנחה שאת זה כבר עשית.
שולפים את המידע לתוך recordset, וממנו לתוך מערך באמצעות . (לא חובה, אבל ברוב המקרים זה ישפר את זמן הריצה בצורה משמעותית).
רצים בלולאה על המערך, ובונים את ה html. כדי לבדוק אם התא הנוכחי מכיל ערך כלשהו, ניתן להשתמש בפונקציה len – שמחזירה 0 במקרה של מחרוזת בודדת או null.
TEST
יש פה איזו בעיה – אני לא מצליח לשלוח הודעה עם הקוד שלי
מסתבך בכל הקוד
קודם כל תודה רבה על ההתייחסות, אני מאד מעריך את זה!
עכשיו לגבי הקוד… אני מצרף קובץ טקסט עם הקוד, לרשום את הקוד בגוף ההודעה לא יצא לי. רק לשנות את הסיומת שלו ל-ASP.
עם הקוד הזה אני לא מקבל אפילו את כפתורי הרדיו שאני צריך. כאשר אני מריץ את הקוד אני מקבל את התוצאה הבאה בדף:
FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
מה FALSE פה אני לא יודע, כי לי הקוד נראה די תקין. אבל מצד שני, כמו שכבר אמרתי, אני לא מנוסה בזה.
ויש לי עוד את הבעיה של הצגת כפתורי רדיו כל עוד יש משהו בשורה… אבל בוא ננסה לפתור קודם את הבעיה של אי הצגת כפתורי הרדיו.
ושוב, תודה רבה על העזרה!
נ.ב. אני לא יודע מה זה פונקציית LEN ואיך עובדים איתה. כמו שאמרתי, אני לא חזק בכתיבת קודים…
אוקיי, פתרתי חלק מהבעיה
אולי לא הפתרון הכי אלגנטי, אבל הנה קטע הקוד הנכון:
Response.Write "<table width='100%' border='0' cellspacing='0' cellpadding='0'>"
Response.Write "<tr>"
do while not rs.EOF
dim poll_id, op1, op2, op3, op4, op5, op6, op7, op8, poll_date
poll_id=rs("poll_id")
op1=rs("poll_option1")
op2=rs("poll_option2")
op3=rs("poll_option3")
op4=rs("poll_option4")
op5=rs("poll_option5")
op6=rs("poll_option6")
op7=rs("poll_option7")
op8=rs("poll_option8")
i = 0
Response.Write "<td><form id='" & poll_id & "' method='post' action="><input name='" & poll_id & "' type='radio' value='Poll_option1'>" & op1 & "<br>"
Response.Write "<input name='" & poll_id & "' type='radio' value='Poll_option2'>" & op2 & "<br>"
Response.Write "<input name='" & poll_id & "' type='radio' value='Poll_option3'>" & op3 & "<br>"
Response.Write "<input name='" & poll_id & "' type='radio' value='Poll_option4'>" & op4 & "<br>"
Response.Write "<input name='" & poll_id & "' type='radio' value='Poll_option5'>" & op5 & "<br>"
Response.Write "<input name='" & poll_id & "' type='radio' value='Poll_option6'>" & op6 & "<br>"
Response.Write "<input name='" & poll_id & "' type='radio' value='Poll_option7'>" & op7 & "<br>"
Response.Write "<input name='" & poll_id & "' type='radio' value='Poll_option8'>" & op8 & "<br></form></td>"
rs.MoveNext
loop
Response.Write "</tr></table>"
rs.close
set rs = nothing
עכשיו זה מציג לי 8 כפתורי רדיו. אבל אני צריך שרק אם, נגיד, ב-3 מהם יש ערך כל שהוא – אז שיופיעו רק 3 כפתורי רדיו.
אז איך עושים את זה?!
תודה!
ככה:
קח בחשבון שזו לא הדרך המומלצת לבנות סקר.
עדיף לבנות טבלה אחת לשאלות וטבלה נפרדת לתשובות.
יש באתר על בניית סקר פשוט, אני ממליץ לך לקרוא אותו.
Response.Write "<table width='100%' border='0' cellspacing='0' cellpadding='0'>"
Response.Write "<tr>"
do while not rs.EOF
poll_id=rs("poll_id")
op1=rs("poll_option1")
op2=rs("poll_option2")
op3=rs("poll_option3")
op4=rs("poll_option4")
op5=rs("poll_option5")
op6=rs("poll_option6")
op7=rs("poll_option7")
op8=rs("poll_option8")
i = 0
Response.Write "<td><form id='" & poll_id & "' method='post' action="><input name='" & poll_id & "' type='radio' value='Poll_option1'>" & op1 & "<br>"
if len(op2)>0 then
Response.Write "<input name='" & poll_id & "' type='radio' value='Poll_option2'>" & op2 & "<br>"
end if
if len(op3)>0 then
Response.Write "<input name='" & poll_id & "' type='radio' value='Poll_option3'>" & op3 & "<br>"
end if
if len(op4)>0 then
Response.Write "<input name='" & poll_id & "' type='radio' value='Poll_option4'>" & op4 & "<br>"
end if
…..
…..
…..
rs.MoveNext
loop
Response.Write "</tr></table>"
rs.close
set rs = nothing
תודה ענקית!!!
עכשיו הכל עובד בדיוק כמו שרציתי שזה יעבוד! ובדרך למדתי גם פונקציה חדשה…
באמת שחשבתי שצריכה להיות פה לולאה, אבל אין לי שום בעיה שזה יעבוד כמו שזה כרגע!
אגב, בלי לקרוא את המאמר על הסקרים שהמלצת עליו, עשיתי בדיוק מה שכתוב שם (למעט שינויים קטנים שיתאימו לצרכים שלי) – שאלות בטבלה אחת, תשובות – בשניה. כל הכבוד לי!
תודה רבה לך על העזרה! מעריך את זה מאד!
דבר שני, בשביל לבדוק אם שאילתה כלשהיא לא מחזירה ערך, אתה חייב להריץ אותה.
תיקון לקוד שלך:
dim x_id, rs, sql, bRecordFound
bRecordFound = false
x_id = request.queryString ("x_id")
sql = "SELECT * from table_x where x_id=" & x_id
sql2 = "SELECT * from table_y where x_id=" & x_id
set rs=Server.CreateObject("ADODB.recordset")
rs.Open sql, conn
if not rs.eof then
response.write rs("x_title")
bRecordFound = true
end if
rs.close
if not bRecordFound then
rs.Open sql, conn
if not rs.eof then
response.write rs("x_title")
end if
rs.Close
end if
set rs=Nothing
ותודה שוב!

פתרת לי עוד בעיה! תודה רבה לך!!!