מה הפירוש לא עובד? האם הקובץ לא נפתח? לא מציג נתונים? לא מייצר -PDF?
OdedDvir
-
העברת קובץ אקסס למחשב אחר -
האטת ריצת קוד vba@מטעמים רק בשביל קריאות הקוד, אפשר גם לקצר, אבל זה פחות מובן מה קורה:
Do Until Not Workbooks.Open(SourceFile, ReadOnly:=False).ReadOnly DoEvents Loop ' עכשיו אתה חופשי לבצע פעולות -
האטת ריצת קוד vbaאני יודע שהגעתי מאוחר למסיבה...
@אוריי אתה אבחנת את הבעיה נכון, יפה מאוד!
אבל הפתרון הזה עקום לטעמי,
יש אפשרות יותר אלגנטית להמתין עד שהקובץ יהיה מוכן לכתיבה,
@מטעמים תחליף את שורה 13 בדוגמא שהבאת לעיל, בקוד הבא:Dim newWb As Workbook Set newWb = Workbooks.Open(קובץ_מקור & "x", ReadOnly:=False) Do Until newWb.ReadOnly = False DoEvents Loop ' עכשיו אתה חופשי לבצע פעולות -
שימוש בחיצים באקסלמסתמא מצב נעילת גלילה מופעל:

אפשר לבטל על ידי מקש Scroll-Lock, או ע"י קליק ימני על המקום המסומן בתמונה והסרת הסימון:

-
סיבוב עמוד PDF חופשי ב 360° האם קיים?@dovid כתב בסיבוב עמוד PDF חופשי ב 360° האם קיים?:
@OdedDvir שים לב שנראה שלשואל היה Acrobat Pro
לא הצלחתי להבין זאת מהשאלה שלו, שמא מכאן?
לא מצאתי באקרובט אופציה לסובב חופשי
אדרבה, בראש המקור שהבאתי יש הוראות גם איך לבצע ב-Acrobat Pro
אגב, יש שם הפניה לכלי הזה: https://community.coherentpdf.com/
שהוא חינמי לשימוש לא מסחרי, ואפשר לבצע איתו את המשימה ישירות משורת הפקודה.
לדוגמא, סיבוב של 72 מעלות:cpdf -rotate-contents 72 in.pdf -o out.pdf -
סיבוב עמוד PDF חופשי ב 360° האם קיים?אפשר על ידי הכלי FDPEscape
הוא חינמי אונליין, ויש גירסת ניסיון להורדה
בתפריט תבחר Page>Deskew, תקליק על העמוד ותרשום את הזוית הרצויה.
מצ"ב דוגמא מהגירסה אונליין לקובץ שסובבתי ב 3 מעלות:

-
מסך שבור - הגדרת התצוגה רק על החלק התקין@צדיק-תמים כתב במסך שבור - הגדרת התצוגה רק על החלק התקין:
לא עבד. הגדרתי מעוגן ושמתי בצד שמאל, ווינדוס מכניס את החלונות מתחתיו.
מוזר.
לי זה עובד בWindows 11:

זה לא מושלם, הסמלים במגש בצד שמאל לא מוצגים לגמרי, וגם חלק מהתפריטים מעיזים לבצבץ לשם, אבל בתור עזרה ראשונה זה לא רע.
אולי בגלל שזה ווינדוס 11 ולא 10
לא מסתבר לי, הפוסט שהבאתי במקור הוא מלפני 10 שנים...
-
מסך שבור - הגדרת התצוגה רק על החלק התקין@צדיק-תמים מישהו מצא פיתרון יצירתי לבעיה שלך, על ידי שימוש לא סטנדרטי בכלי של זכוכית המגדלת שמובנה ב-Windows.
כנס להגדרות > נגישות > זכוכית מגדלת, ובתצוגה שלו בחר מעוגן (Ctrl+Alt+D). תצמיד את החלון שלו לצד שמאל (הפגום) של המסך ותגדיל אותו עד שיכסה את כל האיזור הפגום.
Windows תתייחס לשטח הנותר בצד ימין כאילו רק הוא האיזור הפעיל, וכל החלונות שתפתח וכו' ימוקמו רק שם. -
אקסס מבוסס SQL@mekev כתב באקסס מבוסס SQL:
השאילתא כולל התנאי לא מחזירה תוצאה
אתה צודק, זו היתה טעות שלי. הערך 6 בשדה Type מציין טבלה מקושרת בבסיס נתונים אקסס או אקסל (והשדה יציג את הסיסמה אליו...).
עבור טבלאות מקושרות השוכנות בבסיס של SQL הערך של Type שווה ל-4.
כך:SELECT Connect FROM MSysObjects WHERE Type=4שיניתי גם במקור.
ולעצם העניין, אם יש לך Connection-String - היא אמורה להכיל כל פרטי ההתחברות כולל את הסיסמה. -
אקסס מבוסס SQL@דוד-החדש כתב באקסס מבוסס SQL:
אני לא מצליח להריץ את הקוד. כותבים אותו בשאילתה רגילה באקסס?
כן.
איך אני יכול לדעת את זה מראש לפני שאני מגיע אליו להעתיק את הכל?
הלקוח שלך אמור לדעת את זה, זה חלק מהגדרות שרת ה-SQL שלו. תוכל גם לבדוק האם אתה יכול להריץ את האקסס מתוך המחשב שלך ולהתחבר לנתונים שלו.
-
אקסס מבוסס SQL@דוד-החדש כתב באקסס מבוסס SQL:
אתה מתכוין פשוט לרשום לי את כל השינויים שאני עושה ואז להעתיק אותם אחד אחד למקורי (לא נראה לי שאני אעשה מידי הרבה שינויים אבל עדיין תמיד יש אפשרות לשכוח פרטים מסויימים).
אכן התכוונתי לכך.
אתה צריך לזכור שלמרות שלפעמים יש צורך אמיתי בכך, לשנות סכמה של מסד נתונים קיים זה תמיד תהליך יותר מורכב ומסוכן מאשר לעצב אותו נכון מהתחלה.
עם הניסיון שתצבור, הצורך הזה אמור להיות יותר ויותר נדיר.אגב, אם יש לך אפשרות להתחבר ישירות לשרת ה-SQL של הלקוח מהמחשב שלך, ולא רק דרך RDP, ל-VS יש כלים שיכולים לעזור לך לנהל גרסאות של SQL, להשוות סכמות של שני db, ליצור script של כל השינויים הנדרשים, ולהריץ אותו על ה-db הרצוי.
לגבי הסיסמה ל-SQL, ניתן בקלות לשלוף אותה מתוך האקסס, וזהו, אגב, אחד מהחסרונות של האריכטקטורה הזו. פשוט תריץ את השאילתא הבאה:
SELECT Connect FROM MSysObjects WHERE Type=4 -
אקסס מבוסס SQL@דוד-החדש כתב באקסס מבוסס SQL:
אבל אני קצת מפחד לעשות שינויים על חי במסד פעיל
הפחד שלך מוצדק לחלוטין. יש לי כמה סיפורים מסמרי שיער בנושא...
א. הנוהל הנכון הוא להקים סביבת טסט, כלומר לשכפל את מסד הנתונים הקיים ל-db נוסף (אפשרי על אותו השרת), וכן ליצור עותק של ה-frontend של אקסס ולקשר אותו ל-db של הטסט. זה יוצר סביבת טסט מלאה ואוטונומית מהייצור לחלוטין, ומאפשר לך לבצע שינויים כרצונך שם, הן ב-backend והן ב-frontend, ורק לאחר בדיקת שפיות - אתה מעביר את השינויים לסביבה שבייצור.
למעשה אתה הצעת משהו דומה, ליצור סביבת פיתוח לוקאלית אצלך, ולא אצל הלקוח. וכך באמת נוהגים בעולם האמיתי: מקימים (לפחות) 3 סביבות: פיתוח, טסט וייצור.ב. לעולם אין להעביר את הדאטא מהטסט לייצור, וכ"ש מסביבת הפיתוח, רק את השינויים בסכמה (מבנה הטבלאות, stored procedures וכו') או מטא-דאטא כגון טבלאות ערכים (ValueSets) שמתארות את הנתונים. למשל סוג לקוח:
Id Description 1 Admin 2 User -
תכנון פונקציה: האם לשים פרמטרים מרובים או מערךעכשיו הבנתי יותר את דבריך, ונראה לי שבעצם כיוונתי לאותו הדבר כשכתבתי
ולמקם אותה במחלקה אחרת שאחראית על הלוגיקה העסקית
כלומר, שזה תלוי בהחלטה האם הפונקציה שייכת ליישות Job או ליישות המנהלת את החשבונות הכספיים
-
תכנון פונקציה: האם לשים פרמטרים מרובים או מערךליתר ביאור, דוד התכוון שאפשר ליישם את הפונקציה כחלק מהאובייקט, כך:
public class Job { public string JobName {get; set;} public double WorkHours {get; set;} ... public decimal CalculatePrice() { ... return price; } }לעתים זו אכן הדרך הכי נוחה. אך אם הפונקציה מכילה לוגיקה עסקית שעשוייה להשתנות עם הזמן, במקרה כזה הנכון בעיני להפריד את הפונקציה מהנתונים, ולמקם אותה במחלקה אחרת שאחראית על הלוגיקה העסקית.
-
תכנון פונקציה: האם לשים פרמטרים מרובים או מערךלא זה ולא זה.
הדרך הנכונה היא ליצור אובייקט שמכיל את כל השדות ולהעביר אותו לפונקציה.
כך C#:public record JobSpecifications { public string JobName {get; set;} public double WorkHours {get; set;} ... } public decimal CalculatePrice(JobSpecifications specs) { ... return price; }זה יעיל מכל הבחינות, והרבה יותר קל לתחזוקה.
-
ערך של קומבובוקסזה לא באמת משנה, אבל מפליא אותי שאתם לא בטוחים.
בכל מקרה זה תחביר השאילתא ב-SQL. -
ערך של קומבובוקסבאיזה db אתם משתמשים?
-
ערך של קומבובוקסנניח שיש טבלה Books שמכילה את שמות הספרים בשדה BookName:
ניתן לקבל את השמות הייחודיים על ידי השאילתא:SELECT DISTINCT BookName FROM Books -
אקסס. הזנת נתונים בשאילתה שמבוססת שתי טבלאותקודם כל, תודה על ההסבר המפורט והמושקע, כעת זה מובן יותר למה השאילתא לא ניתנת לעדכון.
יש כאן פוסט מפורט המסביר מתי שאילתא באקסס ניתנת - או לא ניתנת - לעדכון.
ראה במספר 6, כי שאילתת קיבוץ המכילה פונקציית צבירה (סכום, מנייה וכו') תמיד תהיה לא ניתנת לעדכון.
ולעצם הפתרון, אפשר ליישם זאת בטפסים מקושרים. אתה צריך להבדיל בין השדות:
את הפרטים שאמורים להיות ניתנים לעריכה (למשל שם הלקוח), ניתן לאחזר משאילתא פשוטה הניתנת לעדכון, ולמקם בטופס האב, שיהיה מבוסס עליה.
ואילו את הסכומים והחישובים - ליצור בשאילתא שנייה, ולהציגם בטופס הבן שיבוסס עליה.
את שני הטפסים תקשר על ידי המפתחות של שתי השאילתות. -
אקסס. הזנת נתונים בשאילתה שמבוססת שתי טבלאותאני משער שזה כי השאילתא מכילה שדה אחד או יוצר שמוגדרים לקריאה בלבד. למשל את המפתח הזר (בטבלת הרבים).
הדרך הכי פשוטה לאפשר עריכה היא ליצור טופס מקושר, כלומר טופס בתוך טופס, שטופס האב מכיל את טבלת היחיד וטופס הבן את טבלת הרבים, ולקשר בין הטפסים על ידי שדה המפתח.
ראה דוגמא כאן: https://tchumim.com/topic/10491/אקסס-למתחילים-יצירת-מערכת-לניהול-תורמים/23