SQL ו ADODB.Recordset

A Pig in a Cage

New member
SQL ו ADODB.Recordset

אני מבצע query על מסד נתונים כלשהו ומקבל את התוצאה בתוך ADODB.Recordset. בסוף הפעולה אני רוצה לעדכן את מסד הנתונים, ללא שימוש ב SQL. האם אפשר לעשות את זה?
 
בעקרון כן

ניתן לעדכן את ה- DB רק ע"י אובייקט ADODB.Recordset, בתנאים הבאים: 1. לפני פתיחת הרקורדסט (כלומר לפני ה- Open), עליך לשנות את המאפיינים CursorType ל- Dynamic או KeySet ; ואת LockType ל- Optimistic או Pessimistic. 2. הרקורדסט צריך לקבל את הנתונים ע"י השיטה Open (לפעמים הוא מקבל את הנתונים ע"י שיטת Execute של האובייקט ADODB.Command, למשל). 3. כעת, כאשר הרקורדסט פתוח, תוכל להוסיף רשומות (ע"י השיטה AddNew), למחוק רשומות (ע"י השיטה Delete) או פשוט לעדכן רשומות, ע"י עדכון השדות באופן ישיר בקוד (כמו למשל: rs!fieldname=newvalue) או ע"י שינויים שנעשים בטופס. 4. עדכון ה- DB מתבצע ע"י השיטה Update. זה העקרון באופן כללי. אני מניח שאם יש לך עוד שאלות נקודתיות, משתתפי הפורום ישמחו לענות. בהצלחה, רון
 
כן

יש להשתמש במאפיין Filter למשל:
rs.Filter="state=´CA´"​
ואז, כדי להסיר את הסינון:
rs.Filter=adFilterNone​
 

A Pig in a Cage

New member
תודה רבה!

ועוד שאלה: האם יש הבדלי מהירות משמעותיים בין עדכון בשיטה זו לבין SQL UPDATE? (בהנחה שעובדים עם טבלאות של אלפי ועשרות-אלפי רשומות)
 
תגובה

שיטת SQL-Update עלולה ליצור תנועת רשת אדירה ומוגזמת עבור עדכון אלפי רשומות בנפרד, לכן אני לא ממליץ עליה. מצד שני, פתיחת ה- RS כ- Dynamic או KeySet מעמיסה מאוד על ה- DB. פשרה בנושא היא Disconnected Recordset . בעקרון זה עובד ככה: פתיחת connection ל- DB הגדרת RS כראוי ופתיחתו סגירת ה- connection עבודה עם ה- RS כאילו באוף-ליין עם סיום העבודה – פתיחת ה- connection שוב, ובפקודה אחת – עדכון ה- DB (בצורה יעילה). יישום הדברים הנ"ל יכול להתבצע ב- ADO וגם עם RDO. אני ממליץ לקרוא על כך ב- MSDN. בהצלחה, רון
 
למעלה