490
צפיות
צפיות
8
תשובות
תשובות
בעיה עם ערך מקסימאלי בבסיס נתונים .
הודעה שלא מזמן שלחתי .. "יש לי בעיה קטנה , אני עובד עם שתי טבלאות , ויש מקרים שאני רוצה לקשר רשומה אחת בטבלה אחת לרשומה אחרת בטבלה השנייה לשם כך אני צריך את הערך האוטומאטי שבחר האקסס כי הוא בעצם הID של הרשומה אצלי .. השאלה היא בעצם : איך אני מוצא ערכים אוטומאטיים שבחר האכסס של רשומה שהוספתי מיד אחרי שהוספתי אותה ..? "
קיבלתי תשובה : "SELECT TOP 1 MAX(id) AS id FROM [tbl]"
הבעיה שלי היא שלאחר שאני מוסיף ערך לבסיס נתונים ומחפש את הערך המקסימאלי שבעצם אני אמור לקבל את ערך של הרשומה שהוספתי אך אני מקבל את הערך של רשומה אחת לפני רשומה זו .. מה עליי לעשות ?
8 תשובות
מה שאר הקוד שלך?
אחרי שאתה מוסיף אתה אמור לעשות את השאילתה הזאת ולא אמורה להיות בעיה איתה בכלל.
יכול להיות שאתה לא משתמש באותו
חיבור כדי לבצע גם את ההוספה וגם את שליפת ה- ID האחרון.
רק כאשר הפעולות מבוצעות באותו חיבור יש תוצאה רצויה.
בכל אופן כדאי שתדביק את הקוד שלך כך נוכל להבין את הבעיה יותר טוב במקום ההשערות האלה.
ב – SQL SERVER זה פשוט לאללה
פשוט משתמשים ב:
@@IDENTITY
זה יעבוד גם באקסס
IDENTITY@@ עובד מצויין גם בלי טרנזאקציה, הבעייה היא שהוא לא תמיד יעבוד כמו שאתה רוצה שהוא יעבוד. IDENTITY@@ יחזיר לך את המספור האוטומטי האחרון שהוכנס לטבלה. נכון שהכל עניין של מילישניות, אבל ברגעי עומס יכול להיות שמישהו אחר הכניס נתונים ל DB שבריר שנייה אחריך ואתה תקבל IDENTITY@@ אחר ממה שציפית.
ב MSSQL פתרו את זה מצויין עם ()SCOPE_IDENTITY שמחזירה את ה IDENTITY האחרון שהוכנס באותו scope, כלומר אותו "גולש" – ככה שהבעייה שתוארה קודם לא קיימת.
יש גם ('IDENT_CURRENT('TblName שמחזירה את ה IDENTITY האחרון באותה טבלה, בלי קשר ל scope.
מה שנכון נכון.
סחתיין על הבקיאות.
בקשר לתגובה
בקשר למה שאמרת , אותה הבעיה קיימת גם ע"י שליפת ערך מקסימאלי בצורה שכתבתי בהודעה .. אבל זה לא מה שמפריע לי .. ואם תוסיף קוד שאני אוכל להשתמש בו עם ה – @@identity אני אשמח ..
קטע קוד …
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")
הנה החלק הרלוואנטי מהקוד(אני יודע שהוא קצת מסורבל , פשוט יותר נוח לי לעבוד ככה) .. כפי שאתם רואים ביצעתי שליפת ערך מקסימאלי לאחר שהוספתי רשומה .. הבעיה היא שאני מקבל ערך של רשומה אחת לפני , יש למשהו פיתרון לבעיה ?
הסתדרתי .. לא רלוואנטי יותר ..