שלח תשובה

זירת השאלות

450
צפיות
27
תשובות

שאלה לגבי ממשק ניהול

,‏ 25 במרץ, 2004

ערב טוב,

יש לי טבלה, אם אפשרות לביצוע עדכון דרך ממשק.
הבעיה היא שהקוד הבא:


<input type="text" name=vName value=<%=rs("Name")%>>

מניב את המילה הראשונה בלבד(!) ( NAME הוא מסוג טקסט)
שימוש ב- response.write מביא להצגת התוכן כולו !!!
כששיניתי את השורה הזו לtextarea התוכן מוצג במלואו.

למישהו יש הסבר?

תגיות:

27 תשובות

  1. אוריקס הגיב:

    כן,
    עשה כך:


    <input type="text" name=vName value="<%=rs("Name")%>">

  2. אוריקס הגיב:

    וההסבר הוא שאם אין מרכאות הוא לוקח
    את המילה הראשונה בלבד. לכן החליטה שבXHTML אין דבר כזה בלי מרכאות

  3. apricot הגיב:

    שוב, תודה ! ושאלה נוספת ….
    בניתי ממשק ניהול שמציג מספר רשומות מטבלה. ליד כל רשומה יש checkbox ובנוסף קיים dropdown list שבו ניתן לבחור מה לעשות עם הרשומות שנבחרו: הסתרה, מחיקה, עדכון (נעזרתי בבנייה במאמר מהאתר).
    עבור בחירה בעדכון – יש מעבר על כל הרשומות שנבחרו, בלולאה שאמורה להציג כל רשומה בטופס, עם הערכים הנוכחיים שלה ולחיצה על SUBMIT מבצעת עדכון.
    עד כאן הכל טוב ויפה. הבעיה שלי היא – איך לשלב בתוך לולאה: הצגת רשומה בטופס, שליחה ל-DB לצורך עדכון, ומעבר לפריט הבא בלולאה – ניסיתי לבצע את פעולת העדכון בטופס ASP נוסף ואז לחזור לדף ה- ASP הראשי שבו רצה הלולאה ע"י שימוש ב-Redirect – מה שגרם לכל הרשומות להיות מוצגות ברצף בדף אחד!
    מה הלוגיקה הנכונה לביצוע משימה כזו (האם יש דרך לגרום ללולאה "לחכות" עד ביצוע ה-SUBMIT של הרשומה לפני המעבר לרשומה הבאה?) ??

    תודה ושבת שלום.

  4. apricot הגיב:

    מצורף הקוד:
    מצורף הקוד של הדף בו מוצג הטופס – נראה לי שיש לי איזושהיא בעיה עם הלוגיקה, כי הטופס מוגדר (בעצם) מחוץ ל-ASP ….

    <%
    dim Con, rs, sql

    Set Con = Server.CreateObject("ADODB.Connection")
    Con.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("mysitedbMyTips.mdb")
    set rs=Server.CreateObject("adodb.recordset")

    sql="select * from Tips WHERE ID IN (" & Request.Form("toDel") & ")"
    rs.Open sql, con

    do until rs.EOF
    TR = rs("Transaction")
    CAT = rs("Category")
    COMN = rs("Comments")
    LINK = rs("Link")
    DESC = rs("Description")
    ID = rs("ID")
    %>
    <form name=updateForm action="update1.asp" method="post">
    <p>טרנזקציה:
    <br><input type=text name=tipTransaction value=<%response.write TR %> size=100 >
    <p>קטגוריה:
    <br><input type="text" name=tipCategory value="<%response.write CAT%>" size=100>
    <p> הערות:
    <br><input type="text" name=tipComments value="<%response.write COMN%>" size=100>
    <p> תיאור:
    <br><TEXTAREA name=tipDescription id=tipDescription Rows=5 cols=100><%response.write DESC%></TEXTAREA>
    <input type=submit value=שלח onClick="return confirm('האם את/ה רוצה לעדכן את הטיפ?')"> <input type=reset value=נקה><p>
    <p> קישור:
    <br><input type=text name=tipLink value=<%response.write LINK%> size=100>

    <INPUT type="hidden" name="tipID" value=<%response.write ID%>>

    </form>
    <%
    rs.MoveNext
    loop
    %>

    האם באמת יש צורך בדף ASP נוסף, שיכלול את פקודת העדכון?
    אם כן, האם יש צורך בהגדרת connection חדש?
    האם יש אפשרות לבצע את העדכון דרך אירוע ה-onclick שמבוצע ברגע שלוחצים SUMIT בטופס.

  5. ניר טייב הגיב:

    זו הלוגיקה!
    לתת לכל ה-checkBox אותו שם ובכך אתה יוצר קבוצה (אותו דבר גם לדבי תיבת סלקט על מולטיפל) הערכים של הקבוצה שנשלחים מופרדים בפסיק ולאחר מכן אפש לחלק את המחרוזת שהתקבלה המופרדת בפסיקים למערך ובכך לבצע לולאה על המערך ובלולאה לבצע את הפעולות

  6. apricot הגיב:

    לא כל כך הבנתי …
    אם כל התיבות מקבלות את אותו השם – מה מבדיל ביניהן, ואילו ערכים נשלחים במחרוזת? (האם תוכל לתת דוגמא לפי הקוד שצירפתי?)
    לגבי המערך – האם זה נעשה בדף ASP נפרד, בו מפרקים את אותה מחרוזת , ואז כל רשומה מופיעה בנפרד או שכולן מופיעות ביחד ולחיצה אחת על SUBMIT מעדכנת אותן בלולאה?

  7. אוריקס הגיב:

    לא ממש הבנתי
    אבל למה לא לכתוב את כל העדכונים, למבמט, ואז ה Request הופך לקולקשיין ואפשר בקלות לבדוק במה היה שינוי ובמה לא.

  8. apricot הגיב:

    סליחה, אבל
    הידע שלי לא רחב דיו, בינתיים….
    בקוד שצירפתי – מופיעות כל הרשומות שסומנו, ברצף, בדף אחד (למרות שלא זאת היתה כוונת המשורר …) באופן שניתן לערוך את כולן. ואז ללחוץ על SUBMIT.
    הבעיה היא איך ניתן להעביר את משתנה הקולקשיין + הערכים המתאימים לכל רשומה ורשומה לדף ה-ASP הבא כך שיהיה אפשר לערוך את העדכון בלולאה.
    (אלא אם כן יש רעיון יעיל יותר – אשמח ללמוד דברים חדשים !)

    שוב, תודה ושבוע טוב לכולם

  9. ניר טייב הגיב:

    אני אסביר שוב עם קצת קודים
    בעיקרו נותנים לכל ה-checkBoxים אותו NAME והקליטה שלהם נעשית ע"י הפרדה של כל ערך בפסיק (,)

    ///// rs.Fields("name") line 1 = "nir1"
    //// rs.Fields("name") line 2 = "nir2"
    /// rs.Fields("name") line 3 = "nir3"
    <input type="checkBox" name="cb" value="nir1" />
    <input type="checkBox" name="cb" value="nir2" />
    <input type="checkBox" name="cb" value="nir3" />

    //////////// AFTER SEND

    <% =Reques.Form("cb")() %>
    ////////////// output = nir1,nir2,nir3

    ///////////// split the string with split method of JS
    var cntNir = Request.Form("cb")().value
    var nirArr = cntNir.split(",");
    ////////// outPut : var nirArr = new Array("nir1","nir2","nir3")

    ///// looping on the length of the Array
    for (var i=0;<nirArr.length;++){
    oConn.execute("delete from tbl where name="" + nirArr[i] + """)
    }

    0

    אם משה לא מובן תשאל (השארתי הערות על הקוד מצטער שהוא ב-JS כי שכחתי איך עובים עם VBS… חחח)

  10. apricot הגיב:

    הודעת שגיאה
    מדוע על קטע הקוד הבא:


    Set Con = Server.CreateObject("ADODB.Connection")
    Con.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("mysitedbMyTips.mdb")
    set rs=Server.CreateObject("adodb.recordset")

    sql="select * from Tips WHERE ID IN (" & Request.Form("toDel") & ")"
    rs.Open sql, con

    מתקבלת השגיאה הבאה:


    Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

    [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'ID IN ()'.

    השורה אליה מתייחסת הודעת השגיאה היא השורה בה מתבצע rs.open
    הוספתי בדיקת הערך של sql: וקיבלתי קוד נכון …….


    === select * from Tips WHERE ID IN (45); ===

  11. MasterMind הגיב:

    תשמע אני אולי לא יודע הכול
    על ASP אבל מה שאני יודע שאם זה נותן לך שורה שבא יש את הטעות תמיד תדע שזו השורה שלפניה
    עובדה !!!!
    אמרו לך שהבעיה היא ב ID IN()
    ואתה אומר שהבעיה היא ב SELECT

    Syntax error (missing operator) in query expression 'ID IN ()'.

    זה היה סתם טיפ שתדע לעתיד

  12. apricot הגיב:

    תודה על ההערה ובכל זאת …
    ממה נובעת השגיאה?

  13. אוריקס הגיב:

    לא זאת הכוונה
    הפרדה ע"י פסיק לא מומלצת ויקרה


    for (var i=0;i<Request("nir").Count;i++){
    //Some code with Request("nir")(i)
    }

  14. apricot הגיב:

    אני אנסה את זה, אבל בינתיים …
    יש לי בעיה עם הודעת שגיאה לא ברורה (הוספתי הודעה למעלה, כנראה נבלעה בין שלל התגובות) אז שוב:

    קטע הקוד הבא:


    Set Con = Server.CreateObject("ADODB.Connection")
    Con.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("mysitedbMyTips.mdb")
    set rs=Server.CreateObject("adodb.recordset")

    sql="select * from Tips WHERE ID IN (" & Request.Form("toDel") & ")"
    rs.Open sql, con

    גורם לשגיאה הבאה:


    Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

    [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'ID IN ()'.

    הוספתי בדיקת הערך של sql: וקיבלתי קוד נכון…….
    לדוגמא:

    === select * from Tips WHERE ID IN (1,3,45); ===

    אז, מה לא בסדר כאן ?

  15. אוריקס הגיב:

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

  16. מה פתאום?
    בהחלט אפשר להשתמש ב-IN לשליפה.

  17. apricot הגיב:

    שאלה עקרונית, בנושא לולאות
    ערב טוב !

    האם ניתן לקרוא, בתוך לולאה לדף ASP שמכיל טופס עם נתונים מה-DB (לצורך עדכון) , אשר קורא לדף נוסף – בו מתבצע עדכון ב-DB, וחוזר לתוך הלולאה המקורית?

    נסיון המחשה:

    Main.ASP:
    Loop from 1 to N
    Call Update1.ASP
    Next

    Update1.ASP:
    Form with data from the DB for selected record
    Update fields
    Sumbit (via Update2.ASP)

    Update2.ASP
    Update the record in DB
    Redirect to Main.ASP

    האם ניתן לבצע משהו כזה, כלומר הפנייה מחדש מקובץ Update2 ללולאה בקובץ Main?

  18. הכל


    SELECT * FROM tbl WHERE ID IN (1,4,8,22)
    SELECT * FROM tbl WHERE ID IN (SELECT fld FROM tbl2)
    SELECT * FROM tbl WHERE fld IN ('red','blue','green')

  19. apricot הגיב:

    אם כך …
    הנושא הזה חדש עבורי, ולכן השאלה שלי היא:

    מה קורה אם בתוך הלולאה יש הגדרה + הפעלה של טופס שהולך לעיבוד בדף נוסף?
    האם מבצעים בהגדרת הטופס, משהו כמו:


    < form name= … action=Server.Execute "file2.asp" >

    או שבפעולת ה-Submit יש לבצע משהו כמו:


    onclick=Server.Execute "file2.asp

    "
    או שאני בכלל לא בכיוון?

    העיקר שלאחר הזנת נתונים בטופס + עדכון – התכנית תחזור ללולאה לפריט הבא …

    תודה ויום נעים

שלח תשובה