שלח תשובה

זירת השאלות

322
צפיות
11
תשובות

שאלה נוספת

,‏ 8 בספטמבר, 2005

אני בונה מערכת סקרים, ואני רוצה לדעת כמה אנשים סה"כ הצביעו בסקר מסוים.
אז אני בונה את הקוד הבא:


id = request.querystring("id")
set rscounter = Server.CreateObject("ADODB.recordset")
sql2 = "select * from pl_answer where question_id = " & id


rscounter.open sql2,conn
counterhits=rscounter.recordcount


וכשאני מריץ, אני מקבל את השגיאה הבאה:
Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] ‏‏‎‏‏שגיאת תחביר (אופרטור חסר) בביטוי השאילתה ‘question_id =’.
/cms/PollResults.asp, line 17

שורה 17: rscounter.open sql2,conn

תגיות:

11 תשובות

  1. ליאור1989 הגיב:

    מצטער, זה היה אמור להשתרשר
    לנושא שכבר יש לי בדף זה…

  2. eLisHa הגיב:

    אני לא יודע איך המערכת שלך בנויה,
    אבל אני הייתי סופר את מס’ ההצבעות עם פונקצית SUM במסד נתונים
    דוגמה:


    SELECT
    SUM (PollVoters)
    FROM
    TBL_Poll_Questions
    WHERE
    PollID = x

    PollVoters – שדה שמכיל את מס’ ההצבעות לאותה תשובה
    PollID – מס’ הסקר.

    יחזיר לך את מס’ ההצבעות לסקר x.

    מומלץ לעבוד עם זה בעיקר כשאתה עובד עם מסד חזק.. כמו SQL SERVER, שם אתה יכול לקבל את השאלה, התשובות ומס’ ההצבעות לאותה תשובה ובכלל עם SP אחד.

    אם אתה עובד עם מסד נתונים אחר, עדיף לספור את הקולות בדף עצמו.
    מה שאתה עשית – counterhits=rscounter.recordcount לא נכון, כי הוא יחזיר לך את מס’ התשובות שקיימות לשאלה מסויימת, לא מס’ ההצבעות.

    כדי לספור את מס’ ההצבעות תעבור על המערך שמתקבל מהרקורדסט ותוסיף את מס’ ההצבעות באותה שאלה למשתנה שיכיל את מס’ ההצבעות הכולל.

  3. ליאור1989 הגיב:

    הבנתי תודה. עוד משהו
    אני רוצה לקרוא נתונים מ-4 טבלאות שונות בדף אחד.
    כשאני קורא מטבלה אחת ופותח את הרקדורסט הכל טוב.
    ברגע שאני מנסה לפתוח רקורדסט נוסף, ככה:


    set rs=server.CreateObject("adodb.recordset")
    sql="select * from group order by points"
    rs.Open sql

    אחרי שלפני זה עשיתי rs = nothing
    אני מקבל את השגיאה הבאה:
    Error Type:
    ADODB.Recordset (0x800A0E7D)
    ‏‏אין אפשרות להשתמש בחיבור כדי לבצע פעולה זו. חיבור זה סגור או שאינו חוקי בהקשר זה.
    /israel/menu2.asp, line 54

    כיצד ניתן לפתור את הבעיה?

  4. eLisHa הגיב:

    לא ככה


    set rs = server.CreateObject ("adodb.recordset")
    rs.open sql, akDb

    rs.close
    rs.open sql2, akDb

    rs.close
    rs.open sql3, akDb
    rs.close
    set rs = nothing

  5. adventureboy הגיב:

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

    2. בנוגע לבעיה שלך: תבדוק שאכן עבר id (תעשה את זה ע"י הדפסת השאילתא שלך  למסך ותראה מה היא מכילה). והאם id שלך הוא שדה מספר? אם לא אתה צריך לתחום אותו בין ”

  6. ליאור1989 הגיב:

    בקשר לזה
    אני יכול לפתוח רקורדסט אחד לפני שאני סוגר את השני?
    ונגיד אני רוצה לעשות כמה שאילתות, אז איך?
    כאילו כככה?


    set rs = server.createobject("adodb.recordset")
    sql = "select * from tbl"
    rs.open sql
    ————–
    rs.close
    sql2 = "select * from tbl2"
    rs2.open sql2
    —————-

  7. eLisHa הגיב:

    כן, אתה יכול
    אבל בשם אחר… מה שלא מומלץ אם לא חייבים.

  8. ליאור1989 הגיב:

    בקשר ל recordcount
    ראיתי שיש את הבעיה הזאת לעוד כמה ולא הצלחתי לפתור:
    כשאני מנסה להדפיס את הערך שאני מקבל ב recordcount אני מקבל 1-…

  9. BuildHome הגיב:

    תשובה
    rscounter.open sql2,conn,3,1
    יש אפילו FAQ על זה אם אני לא טועה..

  10. ליאור1989 הגיב:

    שגיאה
    Error Type:
    ADODB.Recordset (0x800A0BB9)
    ‏‏הארגומנטים הם מסוג שגוי, נמצאים מחוץ לטווח הקביל או מתנגשים אלה באלה

    וזה הקוד הרלוונטי:


    <%
    sql2="select * from comments where id = " & id
    rs.open sql2,3,1
    counter = rs.recordcount
    rs.close
    %>

    אם אני מוריד את ה 3,1 אז אני מקבל את ה1-…

  11. ליאור1989 הגיב:

    שאלה על response.reidrect
    האם בפקודה response.redirect אפשר לפתוח את החלון בגודל מסוים בוחלון חדש? כאילו לתת פקודה של window.open?

שלח תשובה