שלח תשובה

זירת השאלות

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

בעיה עם ערך מקסימאלי בבסיס נתונים .

,‏ 8 באוגוסט, 2005

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

קיבלתי תשובה : "SELECT TOP 1 MAX(id) AS id FROM [tbl]"  

הבעיה שלי היא שלאחר שאני מוסיף ערך לבסיס נתונים ומחפש את הערך המקסימאלי שבעצם אני אמור לקבל את ערך של הרשומה שהוספתי אך אני מקבל את הערך של רשומה אחת לפני רשומה זו .. מה עליי לעשות ?

תגיות:

8 תשובות

  1. BuildHome הגיב:

    מה שאר הקוד שלך?
    אחרי שאתה מוסיף אתה אמור לעשות את השאילתה הזאת ולא אמורה להיות בעיה איתה בכלל.

  2. יכול להיות שאתה לא משתמש באותו
    חיבור כדי לבצע גם את ההוספה וגם את שליפת ה- ID האחרון.
    רק כאשר הפעולות מבוצעות באותו חיבור יש תוצאה רצויה.
    בכל אופן כדאי שתדביק את הקוד שלך כך נוכל להבין את הבעיה יותר טוב במקום ההשערות האלה.

  3. yarono הגיב:

    ב – SQL SERVER זה פשוט לאללה
    פשוט משתמשים ב:


    @@IDENTITY

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

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

    ב MSSQL פתרו את זה מצויין עם ()SCOPE_IDENTITY שמחזירה את ה IDENTITY האחרון שהוכנס באותו scope, כלומר אותו "גולש" – ככה שהבעייה שתוארה קודם לא קיימת.

    יש גם ('IDENT_CURRENT('TblName שמחזירה את ה IDENTITY האחרון באותה טבלה, בלי קשר ל scope.

  5. yarono הגיב:

    מה שנכון נכון.
    סחתיין על הבקיאות.

  6. Logo הגיב:

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

  7. Logo הגיב:

    קטע קוד …

    mySQL= "INSERT INTO messages(message_title ,message,writer,message_date,topic_id,permit) VALUES (" & "'" & FormatStr(request.form("message_title")) & "'" & "," &_
    "'" & FormatStr(request.form("message")) &"'"& "," &_
    "'" & user_id.fields("id") &"'"&  "," &_
    "'" & formatdatetime(now,2) &"'"&  "," &_
    "'" & cint(request.querystring("topic_id")) &"'"

    if request.querystring("system")=1 then

    find_msg_id = "SELECT TOP 1 MAX(message_id) as id FROM messages"
    set find_msg_id = oConn.execute(find_msg_id)

    msg_id = find_msg_id.fields("id")

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

שלח תשובה