דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. DataSet

DataSet

מתוזמן נעוץ נעול הועבר ארכיון code613m
6 פוסטים 2 כותבים 373 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ש מנותק
    ש מנותק
    שמואל
    כתב ב נערך לאחרונה על ידי
    #1

    איך אני מוסיף שורה חדשה לטבלת הרבים בדטה סט
    כאשר באותו רגע נתון אני גם מוסיף כשורה חדשה את שורת האב לטבלת היחיד וגם את שורת הבנים לטבלת הרבים
    וכמובן שבזמן זה עדיין אין לי את ה-ID של היחיד כדי לייחס אלין את השורה בטבלת הרבים

    פורסם במקור בפורום CODE613 ב07/12/2013 22:58 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

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

      המסקנות הם: בSQL SERVER ובמסדי נתונים דומים, זה באמת קל, אם כי צריך להגדיר שהדטה סט יתחכם לעדכן את הבנים במס' של האבות.
      אבל באקסס, אי אפשר, כלומר מוכרחים לאחזר את המספר ידנית ולקבוע אותו בשורה שמועמדת להיות הבן...
      כך יצא לי לבינתיים.
      מחר אולי אפרט, ואף אולי אשאל את השאלה ליתר ביטחון בפורום Stackoverflow.

      פורסם במקור בפורום CODE613 ב10/12/2013 18:16 (+02:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      0
      • ש מנותק
        ש מנותק
        שמואל
        כתב ב נערך לאחרונה על ידי
        #3

        תודה רבה!
        @דוד ל.ט.

        ואף אולי אשאל את השאלה ליתר ביטחון בפורום Stackoverflow.

        מתי יתחילו לעלות לכאן שאלות שמתקשים בהם ב - Stackoverflow ?...

        פורסם במקור בפורום CODE613 ב10/12/2013 20:24 (+02:00)

        תגובה 1 תגובה אחרונה
        0
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #4

          @שמואל

          תודה רבה!
          @דוד ל.ט.
          ואף אולי אשאל את השאלה ליתר ביטחון בפורום Stackoverflow.

          מתי יתחילו לעלות לכאן שאלות שמתקשים בהם ב - Stackoverflow ?...

          🙂

          ובכן היום גמרתי את החקירה והדרישה.

          דבר ראשון, קוד שפותר את הבעיה:

          private void UpdateX2(RelationDataSet ds)
          {
              var daCat = new RelationDataSetTableAdapters.CategoriesTableAdapter();
              var connOleDb = daCat.Connection;
              var cmdRetId = new System.Data.OleDb.OleDbCommand("SELECT @@IDENTITY", connOleDb);
          
              connOleDb.Open();
          
              foreach (var row in ds.Categories.Where(r => r.RowState == System.Data.DataRowState.Added))
              {
                  //מכניס שורות שנוספו אחת אחת ומבצע שאילתה לקבל את הקוד
                  daCat.Update(row);
                  row.ID = (int)cmdRetId.ExecuteScalar();
                  row.AcceptChanges();
          		
          		//עדכון בנים
                  foreach (var childRow in row.GetProductsRows() )
                  {
                      childRow.Category = row.ID;
                  }
              }
              
              //לעדכון שאר השורות (נמחקו/שונו)
              daCat.Update(ds.Categories);
          
              connOleDb.Close();
          }
          

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

          טוב, עכשיו נשארת השאלה למה הצרה הזו עם אקסס?
          תשובה: בניגוד לSQL SERVER והרבה מסדי נתונים אחרים, באקסס פקודת SQL חייבת מורכבת מפקודה אחת בלבד.
          ממילא חייבים להריץ כזו שאילתה נפרדת. כיון שזה נפרד, אין שום מנגנון פנימי שיקבל את התוצאות ויציב אותם בדטה סט.

          עוד משהו:
          כל זה נדרש במספור אוטומטי צד מסד.
          כלומר במידה ואסור לתוכנה לקבוע את המספר, בגלל שלמשל יש כמה משתמשים בו זמנית (התנגשות מספרים).
          אחרת ניתן לקבוע עדכון גם לשורת הID, ולקבוע את הערכים של המספור אוטומטי לגידול של1 (במקום -1 לשורות זמניות), ולקבוע בפקודת הInsert גם את הID.
          במידה וכך, אז החיים ממש פשוטים.

          פורסם במקור בפורום CODE613 ב11/12/2013 13:34 (+02:00)

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          תגובה 1 תגובה אחרונה
          0
          • ש מנותק
            ש מנותק
            שמואל
            כתב ב נערך לאחרונה על ידי
            #5

            @דוד ל.ט.

            (private void UpdateX2(RelationDataSet ds
            {
            var daCat = new RelationDataSetTableAdapters.CategoriesTableAdapter();

            "SELECT @@IDENTITY"
            

            תודה רבה

            האם תוכל להסביר לי מה הפרמטר שהפונקציה מקבלת
            מה הכנסת למשתנה הראשון? (קשר גומלין או מה בדיוק לא הבנתי)
            כמו"כ להסביר את משפט הSQL הקטן הזה

            פורסם במקור בפורום CODE613 ב12/12/2013 14:14 (+02:00)

            תגובה 1 תגובה אחרונה
            0
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              כתב ב נערך לאחרונה על ידי
              #6

              א. הפרמטר RelationDataSet זה שם הדטה סט ששימש את המחקר..
              ב. מקוה שאתה מבין מה המשתנה הראשון. אם לא הבנת נסה שוב.
              ג. השאילתה הנ"ל מחזירה את הID האחרון ש"הומצא" ע"י המערכת בתקשורת (Connection) הנוכחית.

              פורסם במקור בפורום CODE613 ב12/12/2013 14:21 (+02:00)

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              0

              בא תתחבר לדף היומי!
              • התחברות

              • אין לך חשבון עדיין? הרשמה

              • התחברו או הירשמו כדי לחפש.
              • פוסט ראשון
                פוסט אחרון
              0
              • דף הבית
              • קטגוריות
              • פוסטים אחרונים
              • משתמשים
              • חיפוש
              • חוקי הפורום