שלח תשובה

זירת השאלות

585
צפיות
9
תשובות

שאילתה חלופית בתנאי

,‏ 20 בנובמבר, 2006

היי!

אני צריך לעשות שאילתה בטבלה מסויימת לפי קריטריון 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 תשובות

  1. יגאל55555 הגיב:

    איך עושים את הדבר הבא
    היי לכולם!

    יש לי טבלה באקסס שבנויה בצורה הבא:


    _____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

  2. זהר פלד הגיב:

    איפה אתה מסתבך?
    בונים שאילתת sql שתשלוף נתונים מהטבלה. אני יוצא מנק' הנחה שאת זה כבר עשית.
    שולפים את המידע לתוך recordset, וממנו לתוך מערך באמצעות getRows. (לא חובה, אבל ברוב המקרים זה ישפר את זמן הריצה בצורה משמעותית).

    רצים בלולאה על המערך, ובונים את ה html. כדי לבדוק אם התא הנוכחי מכיל ערך כלשהו, ניתן להשתמש בפונקציה len – שמחזירה 0 במקרה של מחרוזת בודדת או null.

  3. יגאל55555 הגיב:

    TEST
    יש פה איזו בעיה – אני לא מצליח לשלוח הודעה עם הקוד שלי

  4. יגאל55555 הגיב:

    מסתבך בכל הקוד
    קודם כל תודה רבה על ההתייחסות, אני מאד מעריך את זה!

    עכשיו לגבי הקוד… אני מצרף קובץ טקסט עם הקוד, לרשום את הקוד בגוף ההודעה לא יצא לי. רק לשנות את הסיומת שלו ל-ASP.

    עם הקוד הזה אני לא מקבל אפילו את כפתורי הרדיו שאני צריך. כאשר אני מריץ את הקוד אני מקבל את התוצאה הבאה בדף:


    FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse

    מה FALSE פה אני לא יודע, כי לי הקוד נראה די תקין. אבל מצד שני, כמו שכבר אמרתי, אני לא מנוסה בזה.

    ויש לי עוד את הבעיה של הצגת כפתורי רדיו כל עוד יש משהו בשורה… אבל בוא ננסה לפתור קודם את הבעיה של אי הצגת כפתורי הרדיו.

    ושוב, תודה רבה על העזרה!

    נ.ב. אני לא יודע מה זה פונקציית LEN ואיך עובדים איתה. כמו שאמרתי, אני לא חזק בכתיבת קודים…  

  5. יגאל55555 הגיב:

    אוקיי, פתרתי חלק מהבעיה
    אולי לא הפתרון הכי אלגנטי, אבל הנה קטע הקוד הנכון:


        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 כפתורי רדיו.
    אז איך עושים את זה?!

    תודה!

  6. זהר פלד הגיב:

    ככה:
    קח בחשבון שזו לא הדרך המומלצת לבנות סקר.
    עדיף לבנות טבלה אחת לשאלות וטבלה נפרדת לתשובות.
    יש מאמר באתר על בניית סקר פשוט, אני ממליץ לך לקרוא אותו.

        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

  7. יגאל55555 הגיב:

    תודה ענקית!!!
    עכשיו הכל עובד בדיוק כמו שרציתי שזה יעבוד! ובדרך למדתי גם פונקציה חדשה…  
    באמת שחשבתי שצריכה להיות פה לולאה, אבל אין לי שום בעיה שזה יעבוד כמו שזה כרגע!

    אגב, בלי לקרוא את המאמר על הסקרים שהמלצת עליו, עשיתי בדיוק מה שכתוב שם (למעט שינויים קטנים שיתאימו לצרכים שלי) – שאלות בטבלה אחת, תשובות – בשניה. כל הכבוד לי!  

    תודה רבה לך על העזרה! מעריך את זה מאד!

  8. זהר פלד הגיב:

    קודם כל, שרשר שאלותיך.
    דבר שני, בשביל לבדוק אם שאילתה כלשהיא לא מחזירה ערך, אתה חייב להריץ אותה.
    תיקון לקוד שלך:

    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

  9. יגאל55555 הגיב:

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

שלח תשובה