שלח תשובה

זירת השאלות

791
צפיות
8
תשובות

הזמנות

,‏ 4 ביוני, 2006

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

תגיות:

8 תשובות

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

    בגלל זה לא עובדים בצורה הזו…
    הצורה הנכונה לעבודה היא לפצל את הטבלאות לטבלת הזמנות וטבלת פריטי הזמנה:

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

  2. danbar הגיב:

    תודה רבה
    זו פעם ראשונה שאני עובד עם ASP ועם ACCESS, למעשה גם אתר שלם ראשון שאני בונה. תודה רבה על העזרה.

  3. danbar הגיב:

    עוד בעיה…
    עכשיו מערכת ההזמנות עובדת (הקשרים בין הטבלאות נמצאים בתמונה המצורפת).
    כשאני מוסיף הזמנה אחת הכל בסדר. כשאני מזמין את השניה מגיעה הבעיה. אני מקבל את השגיאה הבאה:
    Microsoft JET Database Engine (0x80004005)
    The changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the field or fields that contain duplicate data, remove the index, or redefine the index to permit duplicate entries and try again.
    הקטע של ההוספה בנוי כך:


        MySQL="INSERT INTO orders(userID) VALUES("& Session("ID") &")"
        Set Rs=con.execute(MySQL)
        Set Rs=con.execute("SELECT * FROM orders")
        orderID=Rs.Fields("orderID")
        For Each Key In dictCart
            MySQL="INSERT INTO orderproducts(orderID, productID, productCount) VALUES("& orderID &", "& Key &", "& dictCart(Key) &")"
            Set Rs=con.execute(MySQL)
        Next

    הבעיה היא בשורת ההוספה ל-orderproducts, כי ההזמנה כן נוספת לטבלת orders.

    נ.ב. יש לי עוד בעיה: כשניסיתי להוסיף את התאריך הנוכחי הוא נתן לי שגיאה, משהו כמו:
    Object required: '05/06/2006 18:13:27'

    בתודה מראש,
    דן.

  4. gilad123 הגיב:

    לא הבנתי
    הודעת השגיאה היא שאתה מנסה להכניס רשומה עם מפתחות שכבר קיימים, תנסה להדפיס את השאילתות למסך במקום ל SQL כדי לראות מה אתה בדיוק מנסה לעשות.

    אני לא הצלחתי לעקוב אחרי ההגיון,
    אתה מכניס לטבלת orders רשומה עם ערך אחד בלבד userID, לפי איך שזה נראה מהציור (ומההגיון) גם orderID הוא חלק מהמפתח (או שיש לו מספור אוטומטי).
    בכל אופן, אתה שולף את כל הרשומות (למה?) וכל העמודות (למה?) מתוך orders למרות שאתה צריך רק עמודה אחת (orderID) ואתה משתמש רק בשורה הראשונה, אם ניחשתי נכון ואתה משתמש במספור אוטומטי, אתה צריך רק את הרשומה האחרונה, בטח לא את כולם, אם אתה לא משתמש במספור אוטומטי, אמור להיות לך את מספר ההזמנה גם בלי למשוך אותו מה DB

    כנראה מזה הבעיה, כל ההזמנות שלך נ orderproducts נרשמות על אותה הזמנה ראשונה (SELECT *) ולכן בפעם השניה שאתה מזמין את אותו המוצר יש לך כפילות

    ועוד משהו קטן

    Set Rs=con.execute(MySQL)

    מה אתה מצפה שיכנס ל Rs, INSERT INTO לא ממש מחזיר רקורד סט, אפשר לוותר על החלק השמאלי מה = ושמאלה

  5. danbar הגיב:

    כן, זה באמת מבולגן
    אני לא תכננתי ממש איך אני הולך לעבוד עם המסד  נתונים, כך שכל פעם שהוספתי אפשרות לאתר הוספתי משהו למסד נתונים. איך שאני רציתי להוסיף את ההזמנות זה כך:
    טבלת הזמנות-orders בה יש מס' הזמנה ומס' משתמש, זו השורה בה אני פשוט מוסיף מס' משתמש ומס' ההזמנה מתקבל ע"י מספור אוטומטי.
    אחר כך שלפתי את המספר שהתקבל מהמספור האוטומטי והכנסתי אותו יחד עם כל מס' פריט שהיה באותה הזמנה בטבלת orderproducts. כאן הגיע מה שאני לא מבין: שני המפתחות בטבלה שהם orderID ו-productID יכולים להיות עם כפילויות. אך בכ"ז אני מקבל את השגיאה על הכפילויות. אז מאיפה מגיעה הכפילות?

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

  6. danbar הגיב:

    בעע אני אידיוט
    שכחתי להוסיף בשאילתה שזו תהיה הרשומה האחרונה:


    Set Rs=con.execute("SELECT LAST(orderID) AS last_order FROM orders")

  7. gilad123 הגיב:

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

  8. danbar הגיב:

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

שלח תשובה