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

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

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

איך יוצרים שרשור טקסט באקסס

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

    איך יוצרים שרשור טקסט באקסס?
    אני מדבר על שרשור אנכי, בעצם סוג של שאילתת GROUP BY אבל במקום SUM לכתוב TEXTJOIN או משהו כזה.

    יש אפשרות לעשות את זה בשאילתה? או אולי יש אפשרות להעלות את הנתונים לאובייקט ולעבוד על זה בVBA טהור ואח"כ לכתוב בחזרה בטבלה?

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

    A OdedDvirO 2 תגובות תגובה אחרונה
    0
    • A מנותק
      A מנותק
      avi rz
      השיב לגגד ב נערך לאחרונה על ידי avi rz
      #2

      @גגד אם הבנתי אותך נכון מקווה שזה יעזור לך,
      התוכנה בנויה לפי אבות וילדים ובשאילתה של האבות יש עוד עמודה שמציגה את כל השמות של הילדים.
      נ.ב. עשיתי לזה פעם איזה שינוי שיתאים לGROUP BY אולי (אם אני לא טועה), צריך לחפש את זה.

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

        @גגד לענ"ד הכי יעיל זה על ידי VBA כפי שציינת, לעבור על ה- RecordSet ולשרשר את ערכי השדה.
        יש פונקציה מפורסמת שכתובה מזה שנים לצורך הזה, בשם ConcatRelated.
        אמנם כאן יש מישהו שכתב אלגוריתם בשם DJoin, שיעיל יותר, בעיקר בקריאות מרובות כי הוא משתמש בקאשינג.
        בכל מקרה, אני ממליץ לך להשתמש כמה שפחות בקריאות כגון אלו, כי הם בזבזניות, ולשמור טבלת עזר עם השדה המשורשר, ולבצע הכנסה והסרה לשדה המשורשר ישירות לפי הצורך.

        תגובה 1 תגובה אחרונה
        2
        • גגדג מנותק
          גגדג מנותק
          גגד
          השיב לavi rz ב נערך לאחרונה על ידי
          #4

          @avi-rz @OdedDvir תודה רבה! עזרתם לי מאוד.

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

            הוצרכתי להעלות רמה...
            אני צריך לשרשר אנכית כנ"ל אבל בשאילתה רקורסיבית.
            לדוגמה יש לי טבלה
            מזהה, שם, אבא
            1, אברהם,
            2, יצחק, 1
            3, יעקב, 2
            4, ראובן, 3
            4, שמעון, 3
            5, לוי, 3
            6, חנוך, 4
            7, פלוא, 4
            8, חצרון, 4
            9, כרמי, 4

            ואני צריך תוצאה כזו בשאילתה:
            אברהם אבא של יצחק אבא של יעקב אבא של (ראובן אבא של (חנוך, פלוא, חצרון, כרמי), שמעון, לוי)

            יש אפשרות מובנית או שצריך להמציא את הגלגל מהתחלה?
            תודה רבה מראש!

            עריכה:
            באמת השאלה נחלקת ל2.

            1. איך לקבל את הסבא הראשון - שעל כל 9 השורות אוכל להציג את אברהם.
            2. ואיך לשרשר כמו שכתבתי - שיצא בשאילתה נתונים מקוננים (הסדר יוצא מעין קבצי JSON והשורות בשאילתה מחולקות לפי משתמש וכד').
              תודה רבה!
            גגדג מנחםמ 2 תגובות תגובה אחרונה
            0
            • גגדג מנותק
              גגדג מנותק
              גגד
              השיב לגגד ב נערך לאחרונה על ידי גגד
              #6

              לגבי השאלה הראשונה מצאתי את זה:
              https://stackoverflow.com/questions/763016/is-it-possible-to-create-a-recursive-query-in-access/32161506#32161506

              שיפרתי את הקוד שכתוב שם.
              אחרי הביצוע של
              Add a reference to the Microsoft Scripting Runtime (Tools -> References...).
              ושינוי שם מזהה ל'ID' ושינוי שם השדה המפנה לID האב ל 'ParentId'
              זה עובד מצוין (כמובן כמו שהוא כתב - אם יש לולאה אין סופית זו עדיין בעיה).

              Public Function TreeRoot_Value(ID As Long, TableName As String, NameFieldForReturn As String) As Variant
              Dim Temp As Long
              Temp = TreeRoot(ID, TableName)
              If Temp <> 0 Then TreeRoot_Value = DLookup("[" & NameFieldForReturn & "]", "[" & TableName & "]", "[ID] = " & Temp)
              End Function
              
              Public Function TreeRoot(ID As Long, TableName As String) As Long
              If Not ifTableExists(TableName) Then Exit Function
              Dim dict As Scripting.Dictionary
                  If dict Is Nothing Then
                      Set dict = New Scripting.Dictionary ' Requires Microsoft Scripting Runtime
                      Dim rs As DAO.Recordset
                      Set rs = CurrentDb.OpenRecordset(TableName, dbOpenForwardOnly, dbReadOnly)
                      Do Until rs.EOF
                          dict.Add (rs!ID), (rs!ParentId)
                          rs.MoveNext
                      Loop
                      Set rs = Nothing
                  End If
              
                  TreeRoot = ID
              
                  Do While dict(TreeRoot) <> 0    ' Note: short version for dict.item(TreeRoot)
                      TreeRoot = dict(TreeRoot)
                  Loop
              End Function
              
              Private Function ifTableExists(TableName As String) As Boolean
              ifTableExists = DCount("[Name]", "MSysObjects", "[Name] = '" & TableName & "'") = 1
              End Function
              
              תגובה 1 תגובה אחרונה
              0
              • מנחםמ מנותק
                מנחםמ מנותק
                מנחם
                השיב לגגד ב נערך לאחרונה על ידי מנחם
                #7

                @גגד אמר באיך יוצרים שרשור טקסט באקסס:

                ואני צריך תוצאה כזו בשאילתה:
                אברהם אבא של יצחק אבא של יעקב אבא של (ראובן אבא של (חנוך, פלוא, חצרון, כרמי), שמעון, לוי)

                @גגד האם מדובר רק תוצאה אחת בלבד? כי מההמשך נראה שאתה צריך 9 תוצאות

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

                תגובה 1 תגובה אחרונה
                0
                • גגדג גגד התייחס לנושא זה ב
                • OdedDvirO OdedDvir התייחס לנושא זה ב
                • חייםיודלביץח חייםיודלביץ התייחס לנושא זה ב
                • Y.Excel.AccessY Y.Excel.Access התייחס לנושא זה ב

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

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

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