@צדיק-תמים מישהו מצא פיתרון יצירתי לבעיה שלך, על ידי שימוש לא סטנדרטי בכלי של זכוכית המגדלת שמובנה ב-Windows.
כנס להגדרות > נגישות > זכוכית מגדלת, ובתצוגה שלו בחר מעוגן (Ctrl+Alt+D). תצמיד את החלון שלו לצד שמאל (הפגום) של המסך ותגדיל אותו עד שיכסה את כל האיזור הפגום.
Windows תתייחס לשטח הנותר בצד ימין כאילו רק הוא האיזור הפעיל, וכל החלונות שתפתח וכו' ימוקמו רק שם.

OdedDvir
-
מסך שבור - הגדרת התצוגה רק על החלק התקין -
אקסס למתחילים: יצירת מערכת לניהול תורמיםפרק יט: VBA - חלק ב: כתיבה נכונה של קוד, הערות
ראשית, פתרון שיעורי הבית
כל הכבוד ל @בערל החרוץ!)- הוסיפו לפונקציה שיצרנו עוד משתנה מסוג Double בשם amountToUpdate, והכניסו לתוכו את סכום התרומות שעומדות לעדכון. השתמשו בפונקצית הסכום DSum (וכן, היא קרובת משפחה של DCount).
- הדפיסו בחלון ה-immediate גם את ערך המשתנה שיצרתם, מתחת למספר הרשומות לעדכון.
פתרון:
שימו לב לכמה נקודות:
- כאן צריך להוסיף בפירוש את התנאי
TargetFamilyID Is Not Null
כי הפונקציה Sum סופרת את השדה Amount ולא את TargetFamilyID. - הקפתי בסוגריים כל חלק של התנאי בנפרד, למרות ששפת VBA תפרש נכון את התנאי גם בלי סוגריים מסביב לכל חלק (כי קדימות המילה AND היא נמוכה ביחס לקדימות לאופרטורים
=
אוIs
). זה פשוט בתור הרגל טוב המשפר את קריאות הקוד. - במקרה שלא נמצאו כלל רשומות המקיימות את התנאי, הפונקציה Sum לא תחזיר את הערך 0 אלא תחזיר NULL. ואז תיווצר לנו שגיאה בזמן הריצה של הקוד, כי המשתנה
amountToUpdate
הוא מטיפוסLong
ואינו יכול לקבל ערך Null. לכן משתמשים בפונקציית ההמרהNz()
. הפונקציה בודקת את ערך הפרמטר הראשון (במקרה שלנו = הערך המוחזר מ-DSum), ואם הוא Null, היא מחזירה את ערך הפרמטר השני. (במקרה שלנו = 0).
בפונקציה DCount לא השתמשנו בבדיקה זו, כי בשונה מ-DSum, הפונקציה DCount, תחזיר 0 גם במקרה שלא נמצאו שום רשומות המקיימות את התנאי. אם תחשבו על כך, זה מאוד הגיוני, כי תפקידה לספור רשומות המקיימות את התנאי, ויתכן שלא יהיו כאלו. מה שאין כן DSum מחשבת סכום של שדה מסויים, ואם אין רשומות – הפונקציה אמורה לא להחזיר שום ערך, כי אין שום סכום (0 נחשב סכום).
- צרו משתנה שלישי בשם userMessage מסוג מחרוזת String, שיכיל בתוכו את המשפט הבא:
"ברשימת התרומות קיימות לעדכון X תרומות על סך כולל של Y"
כאשר במקום X ו-Y יופיעו הערכים הנכונים (השתמשו במשתנים שיצרתם ובשרשור מחרוזות על ידי האופרטור&
. הדפיסו גם את המשפט בחלון הפלט.
פתרון:
כמה מוסכמויות בכתיבת קוד:
-
עבור שמות פונקציות יש להשתמש ב upper camel case, או בתרגום חופשי: כתיבת גמל (?) או כתיבה גמלונית(?)
, דהיינו להתחיל כל מילה בשם הפונקציה באות גדולה, למשל:
()GetUserName
או
()CleanMyDesk
-
עבור שמות משתנים או שמות פרמטרים (לפונקציה) על ידי lower camel case דהיינו להתחיל כל מילה באות גדולה, למעט המילה הראשונה בשם המשתנה, שמתחילה באות קטנה, למשל:
donationsToUpdate
או
MakeMeSomeCoffee(addSugar As Boolean, numberOfCups As Long)
למרות ש-VBA לא תמיד שומרת על מוסכמויות אלו בעצמה (נו נו נו VBA...), כדאי להתרגל בהן כבר מתחילת הדרך. הדבר ישתלם בהמשך, כשנלמד עוד מוסכמויות או נרצה לעבור לשפה אחרת.
וכעת להשלמת פונקציית הארוע:
כעת נותר לנו להשלים את שני הצעדים הבאים:- המערכת תשאל את המשתמש האם הוא רוצה לעדכן את הסטטוס של התרומות המשוייכות. ואם כן,
- המערכת תריץ את שאילתת עדכון התרומות שיצרנו.
נוסיף לפונקצית הארוע את השורות הבאות:
הסבר הקוד:
- השורה הראשונה היא בדיקת תנאי. כדי לבדוק אם דבר מסויים הוא נכון, משתמשים בפקודה
If
שפירושה: "אם" ולאחריה מופיע התנאי לבדיקה, ואחריו המילהThen
שפירושה "אז" (שוב תוספת מיותרת בשפה כדי להקל על קריאות הקוד)
אם התנאי נכון, יבוצע כל בלוק הקוד שמופיע לאחר ה-Then
עד לפקודהEnd If
.
על מקטעים או בלוקים:
שימו לב שבדוגמא שלנו יש שתי בדיקות תנאי
If
מדורגות (Cascaded), ולכן יש שתי פקודותEnd If
. במקרה כזה, המהדר (=הקומפיילר, החלק שאחראי על פיענוח הקוד) יפרש את סיום התנאי לפי מדיניות המחסנית (בדומה למחסנית של קליעים, בה הקליע הראשון שנכנס למחסנית הוא האחרון שיוצא, או באנגלית: Last In First Out או בקיצור LIFO) לכן התנאי הראשון מסתיים בEnd If האחרון, והתנאי השני מסתיים ב End If שלפני האחרון וכו'.כדי להקל את קריאות הקוד ולציין בפירוש מה דירוגו של כל קטע קוד, אנו משתמשים בהזחה (Indentation) ימינה בכל פעם שנכנסים למקטע (Scope) עם דירוג חדש, וחוזרים שמאלה בסוף המקטע.
ברוב השפות אין חשיבות להזחה מבחינת הפעולה של הקוד, אך זוהי מיומנות בסיסית חשובה והכרחית בכל כתיבת קוד, שמקילה מאוד על הקריאות ומונעת טעויות רבות, ולרוב סביבת הפיתוח משתדלת לבצע את כל זה עבורנו (זה מאד מפליא ומוזר לראות לפעמים כאלו שלא מקפידים על כך)- השורה השניה היא יצירת ההודעה שברצוננו להציג למשתמש. אנו מחברים את ההודעה שיצרנו קודם, עם התו המיוחד
vbNewLine
, שמשמש לירידת שורה (כי אי אפשר להכניס אנטר בתוך מחרוזת בצורה רגילה בקוד), ומוסיפים שאלה למשתמש. את כל העסק הזה אנו מכניסים לתוך המשתנהuserMessage
.
אף על פי שהשתמשנו במשתנה userMessage בשני צדדי סימן השווה
=
, אין בכך בעיה של הפניה מעגלית, כי הקומפיילר מעריך קודם כל את הצד הימני של הפקודה (לתוך משתנה אנונימי בזיכרון), ואחר כך מבצע השמה של התוצאה לתוך המשתנה userMessage.-
השורה השלישית מציגה תיבת דו-שיח (דיאלוג) למשתמש על ידי קריאה לפונקציה MsgBox, כאשר הפרמטר הראשון הוא ההודעה שברצוננו להציג, והשני הוא דגלי עיצוב של תיבת הדיאלוג. ישנם דגלים רבים ומגוונים, אך השתמשנו כעת בדגל vbYesNo, שמעצב את תיבת הדיאלוג כך שתציג אחרי ההודעה את האפשרויות כן ו-לא.
הפונקציה MsgBox מחזירה את תגובת המשתמש לדיאלוג, ואז מתבצעת השוואה לערך השמור vbYes, בכך אנו מוודאים שהמשתמש בחר באפשרות כן. ואם התוצאה אמת, מתבצע הבלוק הבא – השורה הרביעית. -
השורה הרביעית מבצעת קריאה לפונקצית ההרצה Execute על בסיס הנתונים הנוכחי CurrentDb, ומפעילה את שאילתת העדכון שלנו.
להלן הקוד בשלמותו, אחר הסידור:
Private Sub Form_Close() Dim donationsToUpdate As Long Dim amountToUpdate As Double Dim userMessage As String donationsToUpdate = DCount("TargetFamilyID", "Donation", "StatusID=1") Debug.Print donationsToUpdate amountToUpdate = Nz(DSum("Amount", "Donation", "(TargetFamilyID Is Not Null) AND (StatusID=1"), 0) Debug.Print amountToUpdate userMessage = "ברשימת התרומות קיימות לעדכון " & donationsToUpdate & " תרומות על סך כולל של " & amountToUpdate Debug.Print userMessage If donationsToUpdate > 0 Then userMessage = userMessage & vbNewLine & "האם ברצונך לעדכן את הסטטוס עבורן?" If MsgBox(userMessage, vbYesNo) = vbYes Then CurrentDb.Execute "qryUpdate_SetDonationStatusToTargeted", dbFailOnError End If End If End Sub
למרות שאין הדבר בגדר חיוב, מקובל לסדר את כל ההגדרות של המשתנים בתחילת הפונקציה, כדי להפריד בין החלק ההגדרתי לחלק התפעולי.
מוכנים לראות מה עשינו?
פתחו את טופס התורם frmDonor הוסיפו כמה תרומות ושייכו אותן למשפחה:
לאברהם כהן:
וללוי יצחק:
סיגרו את הטופס. אקסס תציג את ההודעה הבאה:
בחרו כן.
פתחו את הטופס שוב ובידקו כי הסטטוס עודכן עבור הרשומות החדשות:
לאברהם כהן:
וללוי יצחק:
מעולה!שינוי כיוון הכתב בתיבת הדיאלוג
מסתמא שמתם לב כי אקסס מציגה את ההודעה בתיבת הדיאלוג משמאל לימין. כדי להפוך את כיוון התצוגה, יש להוסיף לקוד את הדגלים הבאים:If MsgBox(userMessage, vbYesNo + vbMsgBoxRtlReading + vbMsgBoxRight) = vbYes Then
כעת ההודעה תוצג נכון:
הוספת הערות בקוד
פתחו שוב את עורך ה-VBA, והתבוננו בקוד שכתבנו, נשים לב כעת כי יש בו כמה שורות מיותרות, סימנתי אותן להלן:
אין לנו יותר צורך בהדפסת התוצאות בחלון הערכים המיידיים. זה שימש אותנו רק כשלב ביניים כדי לבדוק את התוצאות שמתקבלות מהפונקציות.
נוכל פשוט למחוק אותן, אבל ייתכן ונרצה אותן בעתיד, ולכן במקום למחוק אותן, נבטל את השורות על ידי הפיכתן להערות (Comments).
הערות משמשות לביטול שורות קוד באופן זמני, או להוספת הסברים בתוך הקוד.
בשפה נמוכה (כגון אסמבלר) הסברים בקוד הם הכרחיים, אך בשפה גבוהה (כמעט כל השפות הנפוצות) עדיף למעט בהערות, ובמקום, להתאמץ ככל שניתן שהקוד יהיה כתוב בצורה שתהיה מובנת גם ללא הערות.בשפת VBA, כל הערה מתחילה בתו הגרש:
'
.הוסיפו את התו
'
לפני שלושת השורות הנ"ל.ניתן גם לעמוד על שורה ולבחור מהתפריט למעלה את לחצן בלוק ההערות:
שימו לב שהעורך משנה את צבע שורת ההערה (ייתכן והצבעים אצלכם שונים):
מעתה, הקומפיילר יתעלם משורות אלו בהרצת הקוד.
עד כאן להיום.
בפרק הבא אי"ה נוסיף עוד רובד למערכת שלנו, והוא הפקת קבלות לתורמים.
על הדרך נכיר את מחולל הדוחות, ונלמד על עוד סוג קשר חשוב בין טבלאות: יחיד ליחיד. -
אקסס למתחילים: יצירת מערכת לניהול תורמיםחלק יד: פתרונות לשיעורים הקודמים ויישום של התיבה המשולבת
צור שני טפסים חדשים, אחד עבור המשפחות, ואחד עבור טבלת הזוגות.
טופס המשפחות
שני קליקים וסיימנו:
שימו לב טוב שאקסס הוסיפה עבורנו בתחתית הטופס פקד המכיל טבלה. מזהים? זו רשימת התורמים שמשוייכים למשפחה הזו בטבלת הזוגות Family_Donor.
אקסס זיהתה לבד את סוג הקשר שיש בין טבלת המשפחות וטבלת התורמים (רבים לרבים) ובחרה ליצור עבורנו את התצוגה הזו, כדי שנוכל לנהל בקלות את היחס ביניהם. חכם מצידה.
טופס הזוגות:
לכאורה כמו קודם, נבחר את הטבלה, נלחץ על הכפתור ליצירת טופס - והנה:
אבל רגע.
שימו לב שזה טופס שמציג בכל פעם רשומה אחת בלבד. זה מאוד לא נוח לעבודה שלנו.הייתי רוצה טופס שמציג את כל הרשומות, שורה אחר שורה, כך הרבה יותר קל לנהל את רשימת הזוגות. לשם כך ניצור טופס טבלאי. זהו טופס שמכיל רשומות מרובות, שורה אחר שורה.
בואו נמחק את הטופס שיצרנו, והפעם נשתמש באשף ליצירת טופס טבלאי.
כמו קודם, ראשית נבחר את הטבלה Familiy_Donor, אך הפעם נבחר מתפריט העיצוב: "טפסים נוספים" > "פריטים מרובים":
נקבל את הטופס הזה:
נשמור אותו בשם frmFamily_Donor.
יופי. הלאה.
צרו שאילתא חדשה: qryFamily_FullName ובה שני שדות: המזהה של המשפחה ID, ושדה מחושב FamilyFullName שמחבר את שם המשפחה, שם האב, וא"ו החיבור ושם האם.
פתרון:
עברית קשה שפה:
יש כאן חלק מעצבן עם וא"ו החיבור, כששמים אותה באותה מחרוזת עם תו הרווח, זה נראה כאילו האות קודמת לרווח. אהבתי את הפתרון היצירתי של @בערל, להוסיף את הרווח בנפרד ואחר כך את האות וא"ו.
שתי נקודות!בטבלה Family_Donor שנו את הגדרות השדה FamilyID כך שיציג (בתיבה משולבת) את שם המשפחה המלא במקום את המספר FamilyID (השתמשו כמובן בשאילתא שהכנתם בסעיף א), ואת הגדרות השדה DonorID כך שיציג את שם התורם.
הנה מאפייני השדה FamilyID:
מאפייני השדה DonorID כמעט זהים, אלא שמקור השורה שם הוא שונה, כמובן, דהיינו qryDonor_FullName.
והנה התוצאה:
קריא וברור!אבל יש בונוס: הואיל וביצענו שינוי בהגדרות תצוגת השדה DonorID בטבלת הזוגות, כך שיציג תיבה משולבת ולא תיבת טקסט פשוטה, כעת השתנתה גם התצוגה בטופס המשפחה לתיבה משולבת, ושם התורם מופיע במלואו:
כמה קל עכשיו לשייך תורמים למשפחה!אבל משום מה בטופס הזוגות, התצוגה לא השתנתה, ומוצגים שם רק המזהים של המשפחות והתורמים, בתיבת טקסט פשוטה ולא בתיבה משולבת. תראו:
למה?
כי יצרנו את הטופס לפני ששינינו את הגדרות התצוגה לשדות אלו.
מה נעשה?
אפשר למחוק את הטופס וליצור שוב. הפעם אקסס תזהה את הגדרות התצוגה העדכניות של השדות ותיצור תיבות משולבות. זה הפתרון הכי קל.אני לא רוצה לבחור בדרך ההרסנית הזו... כי מה קורה אם כבר בינתיים הוספנו עוד דברים בטופס, כגון לשנות את הכותרת שלו לדבר יותר קריא, למשל:
ומה אם כבר נקשרנו לטופס הזה, ואנחנו רוצים לחוס על חייו?בואו נלמד עכשיו איך אפשר להגדיר את השינוי בתצוגה באופן ידני בטופס הקיים, מבלי לאבד את מעשה ידינו עד כה.
פתחו את הטופס בתצוגת עיצוב.
הקליקו קליק ימני על תיבת הטקסט של FamilyID > שנה ל: > תיבה משולבת:
תיבת הטקסט הפכה לתיבה משולבת. עכשיו נגדיר את המאפיינים של התיבה המשולבת:
- בכרטסת נתונים הגדירו את מקור השורה להיות: qryFamily_FullName:
2.בכרטסת תבנית הגדירו את מונה העמודות להיות 2, ואת רוחב העמודות ל 4;0:
(נשמע מוכר, לא?)
אני משאיר לכם להבין איך הפכתי גם את תיבת הטקסט השנייה של DonorID לתיבה משולבת.
הנה התוצאה (לאחר קוסמטיקה קלה של הרחבת העמודות בטופס):
את הפוסט הבא נקדיש לטיפול יסודי ולכמה שינויים בטבלת התרומות ובטופס של התרומות, כך שנוכל לשייך כל תרומה חדשה למשפחה, כפי שתכננו.
בתור הכנה לשלב הבא:
- הוסיפו שדה חדש לטבלת התרומות, בשם: TargetFamilyID, מטיפוס מספר שלם ארוך, שיכיל את המזהה של המשפחה שעבורה מיועדת התרומה.
- קיבעו את ערך ברירת המחדל לשדה זה להיות NULL במקום 0 (למתבוננים: מדוע?)
- הגדירו את קשרי הגומלין עבור שדה זה.
- בכרטסת נתונים הגדירו את מקור השורה להיות: qryFamily_FullName:
-
לאחר מפגש עם דודי (מתכנת בתעשייה האווירית) - פוסט פילוסופי: נבואה על עתידו של עולם התוכנה והמחשבים@ארכיטקט אמר:
לצורך כך עלינו לאתר אנשים עם יכולות יוצאות דופן, בעלי כשרון אדיר, יכולת דחיית סיפוקים, סבלנות של פיל, ושאר רוח, ועוד שלל כישורים ומדות טובות.
זה נכון לכל תחום, כל עוד העולם עדיין מתוחזק על ידי בני אדם.
ירידת הדורות הכללית לא מונעת את היכולת להיות יוצא דופן יותר מהנורמה, אם כבר, היא רק מורידה את הרף הזה.אבל ברור שמתחילים לראות סימנים מדאיגים ... עשו לאחרונה איזה פרוייקט שמתבסס על פרוייקט אחר, והביאו אנשים מהפנסיה כדי שיעזרו להם וידריכו אותם בפרוייקט הקודם. אז איזה מין מצב זה שמישהו יוצא לפנסיה ואין אחריו מישהו אחר שירש את כל הידע שלו?
למה אתה דואג? אותי זה דווקא משעשע לחשוב שאולי ימשכו אותי מבית האבות כדי לבצע איזה שדרוג למערכת ישנה שלי...
-
מדריך לאקסס@לחיל-אומר אמר במדריך לאקסס:
@OdedDvir אני לא "לא מעוניין כלל" אני פשוט רוצה לדעת משהו שיש בו הכל בפנים כמו אקסס ולא שאני צריך ללמוד עכשיו כמה שפות ואת כל התאוריה.
השאלה היא אם יש משהו אפי' קצת פחות נוח מאקסס אבל עדיין נוח, ובלי החסרונות של אקסס?אני משיב לך קצת באיחור כי לקחתי לי זמן לחשוב על הדברים.
והגעתי לכמה מסקנות לגבי אקסס:א. זמין ונוח:
אקסס הוא עדיין כלי חשוב ונצרך. הוא נוח, קל לנתח בעזרתו נתונים, ולפתור בו במהירות בעיות של יום יום, והוא מספק הרבה מאוד יכולות לכך, ומקל מאד על החיים של משתמשים כבדים (PowerUsers), ובאמת לשם כך הוא נוצר מעיקרא.ב. קל להבנה:
עקומת הלימוד שלו היא מתונה ופשוטה ביחס לסביבות אחרות. הוא לא מאיים עליך בדרישות מקדימות ולא מצפה ממך להבין את הכל. אפשר לבנות בו כלים מועילים ונוחים בלי שורה אחת של קוד.ג. נפוץ וותיק:
אקסס איתנו כבר המון זמן (עידנים - במונחים של טכנולוגיות) לכן יש חומר רב על כל מה שתרצה ללמוד בו. אקסס זכה לחיות במקביל עם מבול של טכנולוגיות רבות ומתחלפות, ולשמור על הראש מעל המים. מייקרוסופט הכניסו בו המון פינוקים בימים הטובים שלו.ומאידך:
נכון שאקסל הוא לא רק גליון אלקטרוני, ופוורפוינט היא לא רק כלי להצגת שקופיות, עם זאת - אף אחד לא חושב לבנות אפליקציה לניהול מוסד שמבוססת על פוורפוינט ואקסל (על אף שתאורטית זה אפשרי... ראיתי פעם סרטון על בחור שהתחיל לתכנת בפוורפוינט כי זה מה שהכיר), כך גם צריך לדעת שאקסס פשוט לא מיועד לכל דבר.הוא כמו אולר שוויצרי שתמיד טוב שיהיה אתך, אבל לא תבנה איתו ספריה.
לאקסס מקום נכבד בספרי ההיסטוריה, וכנראה יישאר איתנו בעתיד הקרוב ככלי עזר, אבל לא כסביבת פיתוח רלוונטית.תשתמש באקסס בהנאה ובלי רגשות אשמה - מתי שזה עוזר לך, מתי שזה הכי קל ופשוט.
אם תגיע לרגע שבו אתה מרגיש שאתה רוצה לגדול כמתכנת, שמתחשק לך לפתח משהו לכלל ישראל - זה הזמן ללמוד משהו יותר מורכב.
-
קיצורי מקלדת באקסס@איש-פלוני כן, אפשרי בהחלט.
אתה צריך להאזין לאירוע הנקרא "ירידת מקש".
תוסיף את הקוד הבא לטופס:Private Sub Form_Load() 'Catch keystroke before system does it Me.KeyPreview = True End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If (Shift = 2 And KeyCode = 68) Then 'Ctrl+D MsgBox "Hey, You have pressed Ctrl+D!" 'Do not pass over the keystroke to system KeyCode = 0 Shift = 0 End If End Sub
הסבר:
- באירוע טעינה של הטופס אני מגדיר את המאפיין
KeyPreview
להיותTrue
, זה גורם לכך שהטופס יוכל "לתפוס" את ההקשה לפני שמערכת ההפעלה תעשה זאת. זה שימושי במקרה שצירוף המקשים שאני רוצה לטפל בו כבר משוייך לאירוע קיים ע"י מערכת ההפעלה, למשלAlt+F4
לסגירת הטופס.
קוד זה אופציונאלי. אם הוא יושמט, אז מערכת ההפעלה תטפל בהקשה לפי ראות עיניה. למשל אם לחצת F1 - תיפתח העזרה, וכו'. - באירוע ירידת מקש של הטופס, אני בודק את שני הערכים של
KeyCode
ו-Shift
. הואיל ובמקרה שלנו אנו מבקשים צירוף של מקשיםCtrl+D
הערכים המתאימים הםShift = 2 And KeyCode = 68
. - בסיום הטיפול באירוע, אני מאפס את שני הפרמטרים הללו. גם הקוד הזה הוא אופציונאלי, אם הוא יושמט, מערכת ההפעלה תתיחס אף היא להקשה שלנו ביציאה מהפרוצדורה.
מייקרוסופט פירסמו רשימה של קודים קבועים מראש למקשים נפוצים כאן.
- באירוע טעינה של הטופס אני מגדיר את המאפיין
-
המלצה על SERENITY או דומיו במקום אקסס@Y-Excel-Access אני מאד מזדהה עם השאלה שלך. אני אחזתי שם בדיוק לפני 3-4 שנים. וכן, גם אני בעקבות הפוסט הנ"ל ניסיתי את סרניטי, ואני מודה לד' שלא התחברתי. אבל הרגשתי מאוד תקוע.
כשעזבתי את אקסס נפעמתי מהמרחבים האינסופיים שבחוץ. לא ידעתי אפילו איפה להתחיל.
היה נראה לי שאני מבזבז המון זמן בחיפושים, ובעיקר הייתי צריך לחזק את עצמי כשהגעתי למבוי סתום, או לצורת חשיבה שלא הבנתי או התאימה לי. הייתי פונה פניית פרסה ומחשב מסלול מחדש.
היום במחשבה לאחור אני חושב שלמדתי הרבה גם במקומות שלא בחרתי להשאר, אבל אז זה היה מאוד מתסכל.אם אתה באמת רוצה לעזוב את אקסס ולהיות מתכנת טוב, אני חושב שבעיקר עכשיו בהתחלה, תתרחק כמה שאפשר מכל מיני ממשקים מוכנים\ספריות\תוספים, כי אתה משעבד את עצמך לצורת עבודה מוכתבת מראש, בלי לדעת האם היא נכונה עבורך או מספיקה לך.
במבט לאחור אני חושב שדרך המלך היא כך:
- תבחר שפת תכנות, ותלמד אותה בצורה יסודית. זה היסוד להצלחה. ממה שנראה לי, תתאים לך C# בגלל הטיפוסיות החזקה שלה, והדוקומנטציה המצויינת של מייקרוסופט. היא מתאימה לפרוייקטים בסדר גודל שאליו אתה מכוון, כך שלא תרגיש את המוגבלויות שלה כל כך מהר.
- כדי להשתפשף באמת, תבנה פרוייקט מיניאטורי. ממש קטנטן. אני מתכוון משהו כמו אפליקצית קונסול של רשימת משימות.
- תתחיל להכיר את גיטהב, ולנהל גרסאות של הפרוייקט הזה.
- תבנה פרוייקט שני, טיפה יותר מורכב. אולי ביצוע מניפולציה על קובץ טקסט. או יותר טוב, תוסיף פיצ'ר חדש לפרוייקט הראשון. למשל לשמור את המשימות בקובץ. לשלוף אותם וכו'.
- תחזור על השלבים 2-4, עד שתרגיש בבית.
- כעת תוסיף בסיס נתונים לפרוייקט הזה. ותלמד להתממשק איתו. כאן לא הייתי מוותר על כלי ORM כמו Dapper או Entity Framework.
- תוסיף ממשק גרפי. תתחיל ב-WinForms, כי WPF הוא מאוד מורכב יחסית אליו, כנראה שמייקרוסופט השתדלו בצורה קיצונית להגמיש אותו.
אם הגעת עד לכאן, יהיה לך את העיקר: בסיס חזק בשפה, ומיומנויות שיעצימו את היכולות שלך.
אתה באמת תרגיש בלתי מוגבל. (עד שתתחיל לפתח ב-Web ושוב תרגיש הכל מהתחלה...) -
מחפש מידע על המבנה של קבצי mp3@אף-אחד-3 בקובץ mp3 יש אפשרות להגביר את הווליום ההתחלתי, כמו להגביר את הווליום במערכת, ונתוני הקול בקובץ עצמו לא משתנים. זה נקרא ווליום
Increase Volume
, והוא קבוע לקובץ כולו. ויש אפשרות להגביר את העוצמה, ע"י מניפולציה של נתוני גלי הקול, זה נקראAmplify
, זה כמובן ניתן לביצוע אפילו על חלק מהקובץ.
למידע על קובץ mp3 אתה יכול להתחיל בויקי https://en.wikipedia.org/wiki/MP3 -
שאלה | יצירת מסד נתונים של אקסס באינטרנט - מהיכן מתחילים?@חייםיודלביץ קודם כל, אני חייב לומר לך שעדיין אין אפשרות חלקה לעשות את זה, SharePoint עולה כסף, תצטרך לוותר על קוד VBA, כי אין תמיכה לזה שם, ובכלל, מייקרוסופט בעצמם לא ממליצים על זה:
Microsoft no longer recommends creating and using Access 2010 web databases
אני יכול להציע לך כיוון אחר? תתחיל ללמוד ולהתעסק עם בסיס SQL מקומי וחינמי, ורק אחר כך תעבור לשרת בענן.
הנה השלבים בקצרה:
-
תתקין SQL Server Express במחשב האישי שלך.
ניתן להורדה מכאן
ההתקנה נראית מפחידה, אבל בתור התחלה מותר לך לעשות על הכל Next...
אח"כ תוריד גם את כלי הניהול מכאן, ותתקין גם אותו. -
תיצור בסיס נתונים SQL מקומי. (אם יש לך כבר בסיס קיים באקסס, אתה יכול לייבא את הנתונים ממנו)
-
תחבר את ה-FrontEnd של אקסס לבסיס הנתונים של SQL Server על ידי קישור ODBC.
כשתרגיש נוח עם התצורה הזו, תעבור לשלב הבא:
- להעלות את הבסיס נתונים אח"כ לשרת כלשהו ברשת, ולקשר אליו את אקסס. (מייקרוסופט מאפשרים ליצור שרת מצויין בעלות של 5$ לחודש. זה ממש לא הרבה בהשוואה לתמורה שתקבל)
אני מוכן לעזור לך בשלבים הנ"ל, תתחיל ותעדכן. בהצלחה!
-
-
בעיה ב API של youtube@yossiz לגבי הזקנים - נו, אני לא יכול להכחיש את המציאות... אבל לגבי העצבניים - אני מוחה, יש פה בפורום סבלנות יוצאת דופן. מוכיחה על כך התשובה המפורטת שנתת (בשעה לא סטנדרטית זו), שמועילה פי כמה מפתרון פלא שעובד, כי עדיף ללמד מישהו ללכת לבד במקום לקנות לו כסא גלגלים.
-
ספר שנרטב - איך ניתן להצילו?@משה-ב אם זה קרה ממש עכשיו, תכניס בין כל 20 דפים מגבת נייר, ותלחץ, כדי לספוג מה שאפשר. תחזור על התהליך עד שסיימת את כל הספר. אחר כך תשאיר את הספר עומד עם הדפים פתוחים כדי שיתייבש סופית.
כדי ליישר את הדפים, תלחץ את הספר כשהוא סגור בין שני קרשים, שים משקולת על הקרש העליון, או אם יש לך מלחציים - עוד יותר טוב.
אם אין לך זמן לעשות את הייבוש הזה כעת, אתה יכול להכניס בינתיים את הספר למקפיא (ברצינות!) עד שתתפנה לטפל בו. אם תשאיר אותו כמה שעות ללא טיפול, הדפים עלולים להדבק, ואז זה מאוד קשה לשחזר... בהצלחה!
-
הפקדת צ'קים בנטפרי ע"י אימולטר - אפשרי\נפתר@yossiz אמר בהפקדת צ'קים בנטפרי ע"י אימולטר - אפשרי\נפתר:
אם @מנתק עבד קשה על פתרון מסויים אין שום הצדקה לדרוש ממנו את הידע בחינם לכל דורש וזכותו המלאה לשמור את זה לעצמו/למשלמים או עבור כל תמורה שהוא רוצה.
נכון מאוד!
עם זאת, אם כוונתו למטרת רווח, מן הראוי לפי כללי הפורום שיגלה זאת בגילוי נאות, ויפרסם זאת בקטגוריה המתאימה (גומליןהמרחב האישי). נאחל לו בהצלחה. -
כלי לצילום מסך -
דרייבר של קורא כרטיסים קרס אחרי עדכון וינדוסלא מומלץ לבטל את ההגנה.
גם אני נתקלתי באותה הבעיה, והצלחתי לפתור אותה על ידי הסרת הדרייבר הישן ושימוש בדרייבר עדכני.
שים לב שלא מספיק להתקין את הדרייבר החדש. Windows שומרת במטמון שלה עותקים ישנים של דרייברים, גם אם ביצעת עדכון.
והודעת השגיאה לא תיעלם עד שתמחה את זכרם לעד מהמטמון הנ"ל. אחריותך הבלעדית להבין מה אתה עושה.להלן הצעדים הנדרשים:
- הסרת הדרייבר הקיים מה-driver-cache של windows
פתח שורת פקודה כמנהל, והצג את הדרייברים המותקנים במערכת שלך על ידי הפקודה הבאה:
pnputil /enum-drivers
כדי לאתר את הדרייבר שלך, לחץ על
Ctrl+Shit+F
ותקליד בחיפוש:gemalto
אחרי שמצאת את הדרייבר, שים לב מה הערך ב-
Published Name:
. הוא מתחיל באותיותoem
ואחריהן מספר כלשהו, למשל:Published Name: oem12.inf Original Name: whatever... Provider Name: Gemalto
אפשר לראות ששם הקובץ הוא
oem12.inf
.
מה שנשאר, זה להסיר את הדרייבר על ידי הפקודה:pnputil /delete-driver oem12.inf /uninstall
- כעת תוכל להקין את הדרייבר החדש מכאן:
https://supportportal.gemalto.com/csm?id=kb_article_view&sys_kb_id=68db1c5edb9bbe40d298728dae9619e9&sysparm_article=KB0015847
ולהשתמש בו בלי לבטל את ההגנה הנ"ל.
- הסרת הדרייבר הקיים מה-driver-cache של windows
-
הצעה לחוקי הפורום: מיקוד שרשור -
עיצוב דוח באקסס@ארי עיקר הבעיה היא בתחכום שיצרת כדי להציג כותרות בשתי העמודות. הדבר גרם הגדרה שגוייה ברוחב העמודות הכולל, ומכאן התסבוכת.
הנה הפתרון:-
תוריד את הכותרות המיותרות כמו שכתב @מלא, ותקטין את רוחב טופס המשנה כך שיציג את שלושת העמודות ותו לא.
-
נוודא שרוחב הטופס כולו קטן מ-8:
-
נשנה את הגדרות הטורים כך שכל עמודה תהיה 8 ס"מ בדיוק (נבטל את תיבת הסימון אם היא מסומנת) :
-
כדי לחזור על תצוגת הכותרת בראש כל עמודה, נוסיף קיבוץ לפי עמודה.
מהתפריט: קבץ ומיין > הוסף קבוצה > ביטוי
בביטוי נכניס:Null
. (אפשר להכניס כל ערך קבוע שנרצה)
כעת נעביר את הכותרות למקטע החדש שיצרנו.
לבסוף נסמן את המקטע החדש, ובמאפיין חזור על מקטע נסמן כן.
-
לבסוף נערוך את הדוח הראשי ונשנה את רוחב פקד דוח המשנה ל-8 ס"מ:
הנה התוצאה הסופית:
-
-
חידה חביבה: להיכן נעלם הכסף?הגעתי קצת מאוחר ואני מבין שהיו כאן חילופי דברים....
רק לשם הבהרה, המטרה בחידה לא הייתה סתם לשם שעשוע, אלא לגרות את המחשבה כדי "לדבג" את ה"לוגיקה העסקית" שהפעיל החבר, והיכן היא לוקה בחסר. זו יכולת שנצרכת למתכנת עד מאוד.לא הייתה כוונתי לפתוח תחום של שאילת חידות בפורום, ואני מתנצל בפני כולם אם חרגתי או הטעתי מישהו לחשוב כך.
-
תבנית אקסס בעברית@A0533057932 כבר הקדמתי אותך בזה... הוא מביא את הגרסא האנגלית (היא ארוזה בהתקנה). בדקתי גם בגרסאות הקודמות: באופיס 2007 יש אותה הגרסה כמו ב 2010, וב 2003 יש את הגרסה הישנה
.mdb
ושתיהן באנגלית.
אמנם הצלחתי לחלץ את כל הדוגמאות האחרות בעברית. אני מעלה לכאן שמא יהיו לתועלת למישהו: -
מערכת לניהול תורמיםטוב, אז בתור מכור לאקסס התאפקתי עד עכשיו כי בפוסט הראשון של @dovid היה נראה לי שאני חולם כאילו הוא ממליץ על אקסס... אבל אחרי השנות החלום פעמיים, עניות דעתי נוטה להסכים איתו שזה כנראה יפתור את הבעיה שלך בצורה הכי מהירה ובעלות מינימלית.
אני מוכן לעזור לך כאן בשמחה ככל שאוכל, כי יש בזה תועלת לרבים דווקא כשמתחילים הדרכה מאפס.
-
בקשה להמלצות על ערוצים/סרטונים של תכנות והמסתעף@dovid הנה ההמלצות שלי:
- ב-C# אני פשוט אוהב את של I Am Tim Corey. ברור, מעודכן ומקצועי. השיעורים מאוד מפורטים ומושקעים. בין השאר הוא סיים לא מזמן סדרה ענקית של כ-70 פרקים ובה הוא בונה אפליקציה מתחילה עד סוף, בה הוא מדגים את המעבר מ Framework ל-Core, כולל העלאה לשרת, Azure DevOps, Caching ועוד. יש שם עצות שבועיות בנושא תכנות, ולאחרונה הוא פתח פינה חדשה של הדרכות קצרות 10 דקות בנושאים שונים (כרגע בפיצ'רים של דוט נט 6)
- ב-CSS אהבתי את Kevin Powell החברותי.