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

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

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

שליפת רשומה רנדומאלית באקסס

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

    @spider

    DLookUp("עמודה", "טבלה","שם שדה בטבלה=" & "מה לחפש")
    
    

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

    S מנותק
    S מנותק
    spider
    כתב ב נערך לאחרונה על ידי
    #5

    @מלא אמר בשליפת רשומה רנדומאלית באקסס:

    @spider

    DLookUp("עמודה", "טבלה","שם שדה בטבלה=" & "מה לחפש")
    
    

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

    אני רוצה שהןא ישלוף באופן אקראי מכל העמודה,
    אז מה לרשום ב"שם שדה טבלה"?
    ומה לרשום בסינון?

    dovid123123@gmail.com

    מלאמ תגובה 1 תגובה אחרונה
    0
    • S spider

      @מלא אמר בשליפת רשומה רנדומאלית באקסס:

      @spider

      DLookUp("עמודה", "טבלה","שם שדה בטבלה=" & "מה לחפש")
      
      

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

      אני רוצה שהןא ישלוף באופן אקראי מכל העמודה,
      אז מה לרשום ב"שם שדה טבלה"?
      ומה לרשום בסינון?

      מלאמ מנותק
      מלאמ מנותק
      מלא
      כתב ב נערך לאחרונה על ידי
      #6

      @spider
      מה זה נקרא באופן אקראי, כאילו הגרלה?

      S תגובה 1 תגובה אחרונה
      1
      • מלאמ מלא

        @spider
        מה זה נקרא באופן אקראי, כאילו הגרלה?

        S מנותק
        S מנותק
        spider
        כתב ב נערך לאחרונה על ידי
        #7

        @מלא אמר בשליפת רשומה רנדומאלית באקסס:

        @spider
        מה זה נקרא באופן אקראי, כאילו הגרלה?

        כן
        רק לא מספר אלא מעמודה עם שמות

        dovid123123@gmail.com

        מלאמ תגובה 1 תגובה אחרונה
        0
        • S spider

          @מלא אמר בשליפת רשומה רנדומאלית באקסס:

          @spider
          מה זה נקרא באופן אקראי, כאילו הגרלה?

          כן
          רק לא מספר אלא מעמודה עם שמות

          מלאמ מנותק
          מלאמ מנותק
          מלא
          כתב ב נערך לאחרונה על ידי
          #8

          @spider
          הגרלה, לפי הידוע לי, אפשר לעשות רק על מספר.
          לא יודע אם יש דרך לעשות הגרלה דרך אקסס לבד, עם VBA תוכל לעשות את זה.
          אתה מכיר קצת VBA?

          S 2 תגובות תגובה אחרונה
          0
          • מלאמ מלא

            @spider
            הגרלה, לפי הידוע לי, אפשר לעשות רק על מספר.
            לא יודע אם יש דרך לעשות הגרלה דרך אקסס לבד, עם VBA תוכל לעשות את זה.
            אתה מכיר קצת VBA?

            S מנותק
            S מנותק
            spider
            כתב ב נערך לאחרונה על ידי
            #9

            @מלא אמר בשליפת רשומה רנדומאלית באקסס:

            @spider
            הגרלה, לפי הידוע לי, אפשר לעשות רק על מספר.
            לא יודע אם יש דרך לעשות הגרלה דרך אקסס לבד, עם VBA תוכל לעשות את זה.
            אתה מכיר קצת VBA?

            זה שלא.
            אני חדש בתחום

            dovid123123@gmail.com

            תגובה 1 תגובה אחרונה
            0
            • מלאמ מלא

              @spider
              הגרלה, לפי הידוע לי, אפשר לעשות רק על מספר.
              לא יודע אם יש דרך לעשות הגרלה דרך אקסס לבד, עם VBA תוכל לעשות את זה.
              אתה מכיר קצת VBA?

              S מנותק
              S מנותק
              spider
              כתב ב נערך לאחרונה על ידי
              #10

              @מלא אפשר אולי לעשות הגרלה על מספר מטבלה (ID),
              ושיביא את כל השורה בטבלה?

              ככה הוא יביא גם את הID וגם את הטקסט

              dovid123123@gmail.com

              מלאמ 2 תגובות תגובה אחרונה
              0
              • S spider

                @מלא אפשר אולי לעשות הגרלה על מספר מטבלה (ID),
                ושיביא את כל השורה בטבלה?

                ככה הוא יביא גם את הID וגם את הטקסט

                מלאמ מנותק
                מלאמ מנותק
                מלא
                כתב ב נערך לאחרונה על ידי
                #11

                @spider
                כמובן.

                תנסה את זה:

                dlookup("עמודהשם", "טבלה", "עמודהID=" &  Int((DMAX("עמודהID","טבלה")  - 1 + 1) * Rnd + 1))
                

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

                https://www.techonthenet.com/access/functions/numeric/rnd.php

                תגובה 1 תגובה אחרונה
                2
                • S spider

                  @מלא אפשר אולי לעשות הגרלה על מספר מטבלה (ID),
                  ושיביא את כל השורה בטבלה?

                  ככה הוא יביא גם את הID וגם את הטקסט

                  מלאמ מנותק
                  מלאמ מנותק
                  מלא
                  כתב ב נערך לאחרונה על ידי
                  #12
                  פוסט זה נמחק!
                  תגובה 1 תגובה אחרונה
                  0
                  • OdedDvirO מנותק
                    OdedDvirO מנותק
                    OdedDvir
                    כתב ב נערך לאחרונה על ידי
                    #13

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

                    Public Function FindRandom(RecordSetName As String, Fieldname As String) 
                     
                     Dim MyDB As Database 
                     Dim MyRS As Recordset 
                     Dim SpecificRecord As Long, i As Long, NumOfRecords As Long 
                     
                     Set MyDB = CurrentDB() 
                     Set MyRS = MyDB.OpenRecordset(RecordSetName, dbOpenDynaset) 
                     On Error GoTo NoRecords 
                     MyRS.MoveLast 
                     NumOfRecords = MyRS.RecordCount 
                     SpecificRecord = Int(NumOfRecords * Rnd) 
                     If SpecificRecord = NumOfRecords Then 
                       SpecificRecord = SpecificRecord - 1 
                     End If 
                     MyRS.MoveFirst 
                     For i = 1 To SpecificRecord 
                       MyRS.MoveNext 
                     Next i 
                     FindRandom = MyRS(Fieldname) 
                     Exit Function 
                     
                    NoRecords: 
                     If Err = 3021 Then 
                       MsgBox "There Are No Records In The Dynaset", 16, "Error" 
                     Else 
                       MsgBox "Error - " & Err & Chr$(13) & Chr$(10) & Error, _ 
                         16, "Error" 
                     End If 
                     FindRandom = "No Records" 
                     Exit Function 
                     
                    End Function 
                    

                    כעת במקור הנתונים של תיבת הטקסט תכניס את הנוסחא:

                    =FindRandom("שם_הטבלה_שלך","שם_השדה_הרצוי")
                    
                    dovidD תגובה 1 תגובה אחרונה
                    6
                    • OdedDvirO OdedDvir

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

                      Public Function FindRandom(RecordSetName As String, Fieldname As String) 
                       
                       Dim MyDB As Database 
                       Dim MyRS As Recordset 
                       Dim SpecificRecord As Long, i As Long, NumOfRecords As Long 
                       
                       Set MyDB = CurrentDB() 
                       Set MyRS = MyDB.OpenRecordset(RecordSetName, dbOpenDynaset) 
                       On Error GoTo NoRecords 
                       MyRS.MoveLast 
                       NumOfRecords = MyRS.RecordCount 
                       SpecificRecord = Int(NumOfRecords * Rnd) 
                       If SpecificRecord = NumOfRecords Then 
                         SpecificRecord = SpecificRecord - 1 
                       End If 
                       MyRS.MoveFirst 
                       For i = 1 To SpecificRecord 
                         MyRS.MoveNext 
                       Next i 
                       FindRandom = MyRS(Fieldname) 
                       Exit Function 
                       
                      NoRecords: 
                       If Err = 3021 Then 
                         MsgBox "There Are No Records In The Dynaset", 16, "Error" 
                       Else 
                         MsgBox "Error - " & Err & Chr$(13) & Chr$(10) & Error, _ 
                           16, "Error" 
                       End If 
                       FindRandom = "No Records" 
                       Exit Function 
                       
                      End Function 
                      

                      כעת במקור הנתונים של תיבת הטקסט תכניס את הנוסחא:

                      =FindRandom("שם_הטבלה_שלך","שם_השדה_הרצוי")
                      
                      dovidD מחובר
                      dovidD מחובר
                      dovid
                      ניהול
                      כתב ב נערך לאחרונה על ידי
                      #14

                      @OdedDvir אפשר ע"י שאילתה שממיינת לפי מספר אקראי ולוקחת את הראשון (SELECT TOP 1).
                      https://stackoverflow.com/a/35457559/1271037
                      אבל מבחינת ביצועים הקוד שלך הרבה יותר טוב.

                      • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                      • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                      dovidD תגובה 1 תגובה אחרונה
                      4
                      • dovidD dovid

                        @OdedDvir אפשר ע"י שאילתה שממיינת לפי מספר אקראי ולוקחת את הראשון (SELECT TOP 1).
                        https://stackoverflow.com/a/35457559/1271037
                        אבל מבחינת ביצועים הקוד שלך הרבה יותר טוב.

                        dovidD מחובר
                        dovidD מחובר
                        dovid
                        ניהול
                        כתב ב נערך לאחרונה על ידי
                        #15

                        @dovid אמר בשליפת רשומה רנדומאלית באקסס:

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

                        אני כבר לא בטוח, אני רואה שגם בקוד שלהם יש מעבר על כל השורות, בשביל מה?
                        אי אפשר לגשת למשפר השורות בלי MoveLast? ולמה MyRS.MoveNext בלולאה, אין פקודה לנוע מספר נתון ישירות?

                        • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                        • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                        מלאמ OdedDvirO WWWW 3 תגובות תגובה אחרונה
                        0
                        • dovidD dovid

                          @dovid אמר בשליפת רשומה רנדומאלית באקסס:

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

                          אני כבר לא בטוח, אני רואה שגם בקוד שלהם יש מעבר על כל השורות, בשביל מה?
                          אי אפשר לגשת למשפר השורות בלי MoveLast? ולמה MyRS.MoveNext בלולאה, אין פקודה לנוע מספר נתון ישירות?

                          מלאמ מנותק
                          מלאמ מנותק
                          מלא
                          כתב ב נערך לאחרונה על ידי מלא
                          #16

                          @dovid אמר בשליפת רשומה רנדומאלית באקסס:

                          אי אפשר לגשת למשפר השורות בלי MoveLast?

                          https://docs.microsoft.com/en-us/office/vba/access/concepts/data-access-objects/count-the-number-of-records-in-a-dao-recordset
                          ככה הם אומרים.
                          http://www.baldyweb.com/RecordCounts.htm

                          ולמה MyRS.MoveNext בלולאה, אין פקודה לנוע מספר נתון ישירות?

                          כן יש, rs.move 10
                          שאלות, על המדריך שם..

                          תגובה 1 תגובה אחרונה
                          1
                          • dovidD dovid

                            @dovid אמר בשליפת רשומה רנדומאלית באקסס:

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

                            אני כבר לא בטוח, אני רואה שגם בקוד שלהם יש מעבר על כל השורות, בשביל מה?
                            אי אפשר לגשת למשפר השורות בלי MoveLast? ולמה MyRS.MoveNext בלולאה, אין פקודה לנוע מספר נתון ישירות?

                            OdedDvirO מנותק
                            OdedDvirO מנותק
                            OdedDvir
                            כתב ב נערך לאחרונה על ידי
                            #17

                            @dovid האמת היא שלא טרחתי אפילו לעבור על הקוד, פשוט העתק הדבק ממיקרוסופט.
                            אבל בודאי שעדיף לקפוץ ישירות לרשומה הרצויה על ידי Move. בנוסף, מצאתי טעות בקוד שלהם, חסרה להם MoveFirst אחרי הפקודה MyRS.MoveLast (משום מה לא מופיעים מספרי שורות לעיל)
                            וגם הצהרה מפורשת שמדובר ב DAO.Recordset (זה כנראה קוד ישן מאוד...)
                            להלן הפונקציה המשופרת:

                            Public Function FindRandom(RecordSetName As String, Fieldname As String)
                             
                                Dim MyDB As DAO.Database
                                Dim MyRS As DAO.Recordset
                                Dim SpecificRecord As Long, i As Long, NumOfRecords As Long
                             
                                Set MyDB = CurrentDb()
                                Set MyRS = MyDB.OpenRecordset(RecordSetName, dbOpenDynaset)
                                On Error GoTo NoRecords
                                MyRS.MoveLast
                                NumOfRecords = MyRS.RecordCount
                                SpecificRecord = Int(NumOfRecords * Rnd)
                                If SpecificRecord = NumOfRecords Then
                                    SpecificRecord = SpecificRecord - 1
                                End If
                                MyRS.MoveFirst
                                MyRS.Move SpecificRecord
                            
                                FindRandom = MyRS(Fieldname)
                                Exit Function
                             
                            NoRecords:
                                If Err = 3021 Then
                                    MsgBox "There Are No Records In The Dynaset", 16, "Error"
                                Else
                                    MsgBox "Error - " & Err & Chr$(13) & Chr$(10) & Error, _
                                                                                  16, "Error"
                                End If
                                FindRandom = "No Records"
                                Exit Function
                             
                            End Function
                            

                            במחשבה שניה אפשר לוותר גם על MoveFirst לחלוטין ופשוט לזוז אחורה מספר רנדומלי, כך:

                            ' MyRS.MoveFirst
                             MyRS.Move -SpecificRecord
                            
                            S תגובה 1 תגובה אחרונה
                            3
                            • dovidD dovid

                              @dovid אמר בשליפת רשומה רנדומאלית באקסס:

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

                              אני כבר לא בטוח, אני רואה שגם בקוד שלהם יש מעבר על כל השורות, בשביל מה?
                              אי אפשר לגשת למשפר השורות בלי MoveLast? ולמה MyRS.MoveNext בלולאה, אין פקודה לנוע מספר נתון ישירות?

                              WWWW מנותק
                              WWWW מנותק
                              WWW
                              כתב ב נערך לאחרונה על ידי
                              #18

                              @dovid אמר בשליפת רשומה רנדומאלית באקסס:

                              @dovid אמר בשליפת רשומה רנדומאלית באקסס:
                              אי אפשר לגשת למשפר השורות בלי MoveLast?

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

                              WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

                              תגובה 1 תגובה אחרונה
                              0
                              • OdedDvirO OdedDvir

                                @dovid האמת היא שלא טרחתי אפילו לעבור על הקוד, פשוט העתק הדבק ממיקרוסופט.
                                אבל בודאי שעדיף לקפוץ ישירות לרשומה הרצויה על ידי Move. בנוסף, מצאתי טעות בקוד שלהם, חסרה להם MoveFirst אחרי הפקודה MyRS.MoveLast (משום מה לא מופיעים מספרי שורות לעיל)
                                וגם הצהרה מפורשת שמדובר ב DAO.Recordset (זה כנראה קוד ישן מאוד...)
                                להלן הפונקציה המשופרת:

                                Public Function FindRandom(RecordSetName As String, Fieldname As String)
                                 
                                    Dim MyDB As DAO.Database
                                    Dim MyRS As DAO.Recordset
                                    Dim SpecificRecord As Long, i As Long, NumOfRecords As Long
                                 
                                    Set MyDB = CurrentDb()
                                    Set MyRS = MyDB.OpenRecordset(RecordSetName, dbOpenDynaset)
                                    On Error GoTo NoRecords
                                    MyRS.MoveLast
                                    NumOfRecords = MyRS.RecordCount
                                    SpecificRecord = Int(NumOfRecords * Rnd)
                                    If SpecificRecord = NumOfRecords Then
                                        SpecificRecord = SpecificRecord - 1
                                    End If
                                    MyRS.MoveFirst
                                    MyRS.Move SpecificRecord
                                
                                    FindRandom = MyRS(Fieldname)
                                    Exit Function
                                 
                                NoRecords:
                                    If Err = 3021 Then
                                        MsgBox "There Are No Records In The Dynaset", 16, "Error"
                                    Else
                                        MsgBox "Error - " & Err & Chr$(13) & Chr$(10) & Error, _
                                                                                      16, "Error"
                                    End If
                                    FindRandom = "No Records"
                                    Exit Function
                                 
                                End Function
                                

                                במחשבה שניה אפשר לוותר גם על MoveFirst לחלוטין ופשוט לזוז אחורה מספר רנדומלי, כך:

                                ' MyRS.MoveFirst
                                 MyRS.Move -SpecificRecord
                                
                                S מנותק
                                S מנותק
                                spider
                                כתב ב נערך לאחרונה על ידי
                                #19

                                @OdedDvir דבר ראשון תודה ענקית הקוד עזר לי מאוד!!!

                                למה כל פעם כשאני פותח את הטופס, שאליו מוזן הרשומה רנדומאלית, מוצגת לי ההודעה הבאב:
                                3576d6ab-a185-4da7-a864-da965d846edc-image.png

                                dovid123123@gmail.com

                                OdedDvirO תגובה 1 תגובה אחרונה
                                0
                                • S spider

                                  @OdedDvir דבר ראשון תודה ענקית הקוד עזר לי מאוד!!!

                                  למה כל פעם כשאני פותח את הטופס, שאליו מוזן הרשומה רנדומאלית, מוצגת לי ההודעה הבאב:
                                  3576d6ab-a185-4da7-a864-da965d846edc-image.png

                                  OdedDvirO מנותק
                                  OdedDvirO מנותק
                                  OdedDvir
                                  כתב ב נערך לאחרונה על ידי
                                  #20

                                  @spider אני מנחש שהשאילתא שממנה אתה מנסה לשלוף את הרשומה, היא גם השאילתא שעליה מבוסס גם הטופס, או שלכל הפחות היא כבר פתוחה בטופס אחר?
                                  במקרה כזה השאילתא ננעלת, וממילא לא תוכל לפתוח אותה בקוד הנ"ל. (כי הוראת הפתיחה בו היא לפתיחה דינמית שמאפשרת שינויים).
                                  אתה צריך לשנות את השורה 8 בקוד, דהיינו את:

                                      Set MyRS = MyDB.OpenRecordset(RecordSetName, dbOpenDynaset)
                                  

                                  לשורה הבאה:

                                      Set MyRS = MyDB.OpenRecordset(RecordSetName, dbReadOnly, dbOpenSnapshot)
                                  
                                  תגובה 1 תגובה אחרונה
                                  2
                                  תגובה
                                  • תגובה כנושא
                                  התחברו כדי לפרסם תגובה
                                  • מהישן לחדש
                                  • מהחדש לישן
                                  • הכי הרבה הצבעות


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

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

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