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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
גגדג

גגד

@גגד
אודות
פוסטים
38
נושאים
6
קבוצות
0
עוקבים
0
עוקב אחרי
0

פוסטים

פוסטים אחרונים הגבוה ביותר שנוי במחלוקת

  • לימודים והשמה בהייטק
    גגדג גגד

    @Meir-S-0 כתב בלימודים והשמה בהייטק:

    אשמח למידע, על לימודי התואר, עד כמה מועיל ובאמת נדרש להתברג במשרה טובה?, עד כמה זה קשה ו/או מיותר?,

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

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

    מאידך מכיר מתכנת שלמד לבד ואח"כ עשה קורס של ג'ון ברייס מקוצר (7 חודשים) רק בשביל התעודה וכיום הוא בתחום התכנות מתקדם (AI) ובמגוון מערכות ושפות.

    שים לב גם לאחוז הנשירה - אחוזים גבוהים מאוד, בסביבות ה 50% ואולי יותר.

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

    • עריכה: התגובה יצאה לי קצת מדי נחרצת, ותשועה ברוב יועץ

  • הגדרת 'הרשאות קריאה' למשתמשים מרובים באקסל
    גגדג גגד

    @ek0583232948 אמר בהגדרת 'הרשאות קריאה' למשתמשים מרובים באקסל:

    אפשר ליצור סיסמה שונה לכל גיליון, בלשונית סקירה> הגנת גיליון, ולהזין לכל משתמש נתונים בגיליון שלו
    אח"כ להסתיר נתונים כמו שכתוב כאן
    ולכתוב לכל משתמש איך להחזיר לצפייה רגילה

    שים לב! ראיתי שבקישור שהבאת התאים לא מוסתרים באמת - אפשר לראות אותם עדיין בשורת הנוסחאות, כך שזה לא יפתור את הבעיה של @avramk

    לעצם השאלה:
    לכאורה הפתרון יהיה להסתיר כמו שכתבו כאן - ואח" כ יותר בכיוון של כפתור או אירוע פתיחת הקובץ המפעיל מאקרו - משהו כזה

    Sub PasswordOpening()
    Dim MyPassword As String
    MyPassword = InputBox("כתוב את סיסמתך כאן")
    ' כאן לכתוב את הפעולה של ביטול הסתרה לפי משתמש -
    ' אם הסיסמה 1 בטל הסתרה 1 אם 2 - 2 וכו
    
    End Sub
    
    

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


  • הערות להערות שוליים בוורד
    גגדג גגד

    @מעלה-ומוריד
    אולי אפשר פשוט לכתוב שם טקסט ייחודי מיד אחר שם הספר, כך שתוכל להחליף אותו בכל הקובץ על ידי "חיפוש והחלפה"


  • שאלה| לולאה לפי Case, לשיכפול שורות
    גגדג גגד

    @dovid אמר בשאלה| לולאה לפי Case, לשיכפול שורות:

    למה כל אלו שכותבים בVBA כולל ההדרכות הרשמיות משתמשים עם Activate וSelect וActiveCell בלולאות במקום איך שכתבתי?
    זה נראה לי הרבה יותר אלגנטי איך שאני עושה!

    נראה לי פשוט - המשתמשים המתחילים בVBA מכירים את השפה בעיקר מתוך הקלטת המאקרו באקסל וורד, ואח"כ התחילו ללמוד את הקוד יותר כדי להרחיב...
    באמת ראיתי באתר תותח אקסל (ועוד) שכותב ע"ז שזה עולה יותר מבחינת חישוב כי צריך לבצע פעולות נוספות של בחירה ומעבר פיזי על פני אקסל.


  • הזרקת SQL באקסס
    גגדג גגד

    כתבתי

    אם כן פונקציה זו תספיק כפרמטר:

    Public Function SqlParameter(Text As String, Optional AsNumeric As Boolean = False)
    If AsNumeric Then
        If IsNumeric(Text) Then SqlParameter = Text
        Exit Function
    End If
    SqlParameter = Replace(Replace(Text, "'", "''"), "", """")
    End Function
    

    אבל יש לכאורה טעות בקוד - כי רק את סוג המרכאה המקיפה צריך לשכפל בשביל שישאר הטקסט נכון.
    אם מקיף ' יש לשכפל רק את ' , אם מקיף " יש לשכפל רק את ".
    לכן נראה לי הקוד הזה נכון יותר (זה מה שאני משתמש) - 2 פונקציות:

    Public Function Sql_InsertNumeric(MyVariant As Variant) As Variant
    ' לפני הכנסה כשרשור טקסט לפונקציה
    ' DLookup
    ' וכדומה, או לשאילתה שאי אפשר להכניס בה פרמטרים בדרך הרגילה.
    ' הפונקציה הנוכחית מוודאת שאין הזרקת 'קוד זדוני' לשאילתה על ידי וידוא שמדובר במספר
    
    If IsNumeric(MyVariant) Then
        Sql_InsertNumeric = MyVariant
    Else
        Sql_InsertNumeric = ""
    End If
    End Function
    
    Public Function Sql_InsertString(Text As String) As String
    ' לפני הכנסה כשרשור טקסט לפונקציה
    ' DLookup
    ' וכדומה, או לשאילתה שאי אפשר להכניס בה פרמטרים בדרך הרגילה.
    ' הפונקציה הנוכחית מוודאת שאין הזרקת 'קוד זדוני' לשאילתה, ומוסיפה גרש מכל צד לציון הטסקט
    
    'תיקנתי כאן, כי בשאילתות וכן בקוד אם מקיף את הטקסט גרש בודד אין משמעות לגרשיים ולהיפך - כשמקיפים גרשיים אין משמעות לגרש
    
    Sql_InsertString = "'" & Replace(Text, "'", "''") & "'"
    
    End Function
    

    ולשאילתת פעולה רגילה שאפשר להשתמש בה עם פרמטרים:

    Public Sub RunSqlWithParameters(TextSql As String, ParamArray TextParameters() As Variant)
    On Error GoTo MsgErr
    
    Dim MyQuery As QueryDef
    Dim TextParameter As Variant
    Dim NumParameter As Integer
    
    NumParameter = 0
    
    Set MyQuery = CurrentDb.CreateQueryDef("", TextSql)
    
    For Each TextParameter In TextParameters
        MyQuery.parameters(NumParameter) = TextParameter 
        NumParameter = NumParameter + 1
    Next
    
    MyQuery.Execute
    
    ExitErr:
        Exit Sub
    
    MsgErr:
        MsgBox Error$
        Resume ExitErr
        
    End Sub
    

    אשמח להערות.

    (השמות SQL_INSERTSTRING ו Sql_InsertNumeric לא משהו... אשמח לשמוע שם אחר. יש עדיפות שיתחיל ב SQL למציאה קלה...)


  • הזרקת SQL באקסס
    גגדג גגד

    @שמואל4
    למה להמציא את הגלגל?
    בשביל ללמוד, אבל יותר מזה -
    באקסס יש פונקציות שנקראות DLookup, DMAX ועוד פונקציות אלו משתמשות בהזרקת SQL רשמית, ושם חייבים לבנות לזה גם הגנה וגם מניעת טעויות משתמשים תמימים (וזה מענה גם ל @OdedDvir ול @dovid שתמהו ע"ז).

    לגבי הבעיה של תו ;
    איך מתבצעת הזרקה? בכל מקום בתכנות שמשתמשים ב Meta programming - טקסט שיש להריץ אותו כתוכנית עבור תוכנה כמו - SQL, HTML, וגם Template של C++ ועוד... קיים חשש שהלקוח יכתוב הוא את הטקסט לתוכנה.
    איך יכול להיות שיכתוב? הרי הטקסט מסומן בגרשיים או גרש או <>? פשוט - שהוא בעצמו יסמן את זה בתוך הקוד.
    נמצא שאם מבטלים את האפשרות של הסימון הזה אין ללקוח אפשרות להכניס את שום טקסט בקוד, אם הוא יכתוב ; זה יכניס ; לתוך הטבלה, לא לקוד הSQL.
    עם ההגנה הזו גם פעולת UNION ו DROP לא תעבוד - זה יכניס את המילים האלו רק לתוך הטבלה.

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

    תודה רבה על הביקורת - ואשמח לעוד 🙂


  • שאלה | נתונים מימות לאקסל, דרך אקסס.
    גגדג גגד

    @צבי-10
    מה שהבנתי - אתה צריך קיצור דרך להורדה מרובה, וחישובים על הנתונים.

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

    (אני מעז לנחש שחלק מהמפתחים של המערכת הזו נמצאים בתחומים כ'ניקים'...)


  • הזרקת SQL באקסס
    גגדג גגד

    @OdedDvir קיבלתי.
    כלומר - מה שנשאר לוודא זה שהמספר הוא ISNUMERIC בלבד.
    כעין זה מצאתי ב https://www.hacksplaining.com/prevention/sql-injection
    אם כן פונקציה זו תספיק כפרמטר:

    Public Function SqlParameter(Text As String, Optional AsNumeric As Boolean = False)
    If AsNumeric Then
        If IsNumeric(Text) Then SqlParameter = Text
        Exit Function
    End If
    SqlParameter = Replace(Replace(Text, "'", "''"), "", """")
    End Function
    

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

    Sub A1()
    CurrentDb.Execute "SELECT טבלה1.שדה1 FROM טבלה1; DROP TABLE טבלה1;"
    End Sub
    

    אבל עדיין שייך UNION...


  • הזרקת SQL באקסס
    גגדג גגד

    @OdedDvir
    נכון שכך עושים... אבל יש בזה עניין? איך יהיה אפשר להזריק SQL בלי תווים ' ו "
    (או בHTML - גם תווים < ן > )
    האם יש עוד אפשרות הזרקה שאני לא מחשבן או שפשוט זה כל מה שהפרמטר עושה (אני רוצה להבין את נושא ההזרקה יותר לעומק...)


  • הזרקת SQL באקסס
    גגדג גגד

    מהם האפשרויות למנוע הזרקת SQL?

    אפשרות אחת משתמשת בפרמטרים - מאתר stackoverflow
    האם פונקציה פשוטה יכולה להחליף את השימוש בפרמטר? האם מספיק לטפל בתווים ' ו " וכבר אין סיכון או שחייבים תמיד את האופציה הראשונה הארוכה יחסית?


  • עיצוב נתוני אקסס
    גגדג גגד

    אפשר אולי להשתמש בפונקציית DJoin שלוקחת את כל הנתונים ומכניסה אותם לתא אחד. הרחבה בפוסט זה
    תוכל לעשות שהתו המפריד יהיה - CHR(13) (= ENTER) כך שכל הנתונים יהיו במספר שורות אך באותו תא ויהיה יותר צפוף על המסך
    או בתו מפריד אחר לנוחיותך...


  • שגיאת שאילתה שאינה ניתנת לעדכון
    גגדג גגד

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

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


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

    לגבי השאלה הראשונה מצאתי את זה:
    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
    

  • התראות תאריך
    גגדג גגד

    @benzi6789494 אמר בהתראות תאריך:

    @בערל כנראה שזה לא תומך כי אני עם 2019 והוא כותב שגיאה בכל הנוסחאות

    יצרתי מעין זה - רק שיניתי בהגדרות במקום למחר - עד מחר. (למקרה ודחו שיקים או שהיה שבת וכדו').

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

    חוברת1.xlsx


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

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

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

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

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

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

  • טופס פרטי בגוגל פורמס (Forms)
    גגדג גגד

    @אביי יש לי אולי רעיון...
    צריך לבדוק, אבל אולי אם לא מפרסמים קישור אלא שולחים טופס דרך המייל, אי אפשר לגשת אליו אחרת.

    א"כ האופציה היא: לבנות עוד טופס שמקבל נתונים להרשמה.
    לקשר אותו לשיטס.
    ליצור בשיטס טריגר להפעלת פונקציה לפי שליחת טופס.
    בפונקציה הנ"ל לתת משתנה אחד כפרמטר (Event) כדי לקבל את קובץ הJson של הטופס אם תצטרך, ואת מספר השורה בשיטס שנוספה על ידי הטופס.
    אם נתוני ההרשמה טובים - לשלוח מייל אל מי ששלח את הטופס עם הטופס הפנימי.

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


  • טופס פרטי בגוגל פורמס (Forms)
    גגדג גגד

    @by6199 אמר בטופס פרטי בגוגל פורמס (Forms):

    @גגד אמר בטופס פרטי בגוגל פורמס (Forms):

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

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

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


  • טופס פרטי בגוגל פורמס (Forms)
    גגדג גגד

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


  • Google Sheets טיפ מעניין מאוד: הגדרת ערכי ברירת מחדל לתאים
    גגדג גגד

    @nach תודה רבה, באמת היה כל כך חסר את האפשרות הזו בשיטס.

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

  • 1 / 1
  • התחברות

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

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