שמירת ראשי משני

יעל51366

New member
שמירת ראשי משני

יש לי מסד המנוהל בקוד , ויש בו טבלאות בקשר רבים לרבים . הקוד על טבלת האב עובד מצין . אבל הקוד על טבלת הבן לא עובד.
rs2.MoveFirst rs2.Move num If rs2.EOF = False And rs2.BOF = False Then rs2.Fields(0).Value = Val(txtFields(1).Text) ' קוד הזמנה Dim r3 As ADODB.Recordset ' מוצרים Set r3 = New ADODB.Recordset 'MsgBox lblProduct(num).ListIndex + 1 MsgBox p(num) r3.Open "select * from Products where ProductCode=" & Val(p(num)), db, adOpenStatic, adLockBatchOptimistic rs2.Fields(1).Value = r3.Fields(0) ' lblProduct(num).List(lblProduct(num).ListIndex) 'קוד מוצר rs2.Fields(2).Value = Val(lblAmount(num).Text) 'כמות rs2.Update 'MsgBox rs2.Fields(1).Value r3.Close Set r3 = Nothing End If 'MsgBox rs2.Fields(0).Value 'MsgBox rs2.Fields(1).Value 'MsgBox rs2.Fields(2).Value rs2.Update​
כפי שניתן לראות בMSGBOX הרי שהערכים שנשלחו למסד היו תקינים. מדוע הם לא נשמרים , כמו בכל שאר הפרויקט ? (יש לי הרבה טפסים כאלו )
 
תגובה

1. מציע לשנות טיפה את הקוד ל:
rs2.Fields(1).Value = r3.Fields(0).Value
2. מה הקוד לפתיחה של rs2? אם הוא פתוח על adOpenStatic ו adLockBatchOptimistic, נראה לי שצריך לבצע אחרי כל ה Updateים גם UpdateBatch.
 

יעל51366

New member
פשוט אין מילים

1. השינוי הראשון לא עזר. 2. עזר גם עזר. (אגב הפרמטרים של פתיחת RS2 היו כפי שאמרת ) ואם כבר , אז כבר מה ההבדל בין 2 הUPDATE ?
 
ככה זה כשעובדים disconnected

בגדול - אם עובדים disconnected אז צריך לעשות בסוף UpdateBatch. מציע לך לקרוא עם צורות הפתיחה של ה connection ושל ה recordset. יש המון מאמרים באינטרנט. לגבי השינוי הראשון - אני מציע לבדוק שוב ושוב את הקוד. זה נראה שזו בעיה בקוד עצמו או בעיה בטבלאות ב DB (קשרי גומלין וכו'). אגב, למה את עושה * select ? עדיף לרשום את שמות השדות עצמם (ובמקרה הנ"ל - שדה אחד בלבד). יתכן שכאן הבעיה. ובכל מקרה - מציע לך לרשום את שמות השדות במקום המספרים. למשל:
MyRecordset.Fields("MyCuteField").Value = TheNewValue​
 
למעלה