עבודה ב- Triger

אלון_פ

New member
עבודה ב- Triger

יש לי בעיה:(SQL 2000+ Access2000) בניתי טבלה A - ועליה טריגרים אשר בכל שינוי בה - מוסיפים נתונים בטבלה B (B מהווה מעין לוג שינויים ל-A) כאשר אני מוסיף רשומה ל - A ה- ACCESS מודיע לי ששונו נתונים בטבלה - והיא כאילו נמחקת - כל השדות מופיע DELETED. רק שאני עושה רענון לטבלה (F9) אז אני רואה את הנתון החדש (בטבלה B הנתונים נוספים כמו שצריך) למה!!
 
פתרונות....

1. לאחר העדכון לעשות את הדבר הבא:
Dim sSQL as String sSQL = Me.RecordSource Me.RecordSource = sSQL​
פעולה זאת מקבלת את מקור הרשומות של הטופס וטוענת מחדש אותו לטופס.... 2. לאחר העדכון לעשות רענון לטופס - Me.Requery אני אישית מעדיף את הדרך הראשונה..... ולגבי למה זה קורה.... אז ככה, אתה מעדכן את הטבלה המקושרת לטופס. הטופס כבר לא רואה את הנתונים ולכן הוא נותן לך עדכים לא מזוהים..... ולכן צריך לרענן לו את הנתונים.
 

אלון_פ

New member
לא בדיוק

זה בדיוק העניין - שאני מעדכן טבלה אחרת - אני בכלל לא מעדכן את נתוני הטבלה המקורית. אז מדוע אני צריך לרענן את נתוני הטבלה - הם בכלל לא משתנים! ומדוע אני מקבל תגובה כזו - שהאקסס מציג לי Deleted מיד לאחר שאני עושה Refesh לאחר הכנסת הנתונים?
 
טוב, אז בוא ונעבוד מסודר....

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

אלון_פ

New member
הנה זה

עבור טבלת DOCLINE אני מעדכן את טבלת LOG:
Create TRIGGER DocLineLog ON dbo.DocLine For INSERT, UPDATE, DELETE AS insert into Tlog(ID,Qty,Price,total) select Case When I.ID is null Then D.ID Else I.ID end , ISNULL(i.Qty,0)-ISNULL(d.qty,0) , Case When I.Price is null Then D.Price Else I.Price end , ISNULL(i.total,0)-ISNULL(d.total,0) from inserted I full join Deleted D on I.DocLID= D.DocLID​
ותודה על העזרה אלון
 

אלון_פ

New member
במוסף,

בבדיקה נוספת אני רואה שהבעיה עולה רק כאשר על חלק מהשדות בטבלה הראשית יש Default values אם אין - זה עובד בסדר למישהו יש רעיון?
 
למעלה