אם אני זוכר נכון, (בכלל לא בטוח) נראה לי שהDLL MSO.DLL מכיל בתוכו את הכל, ואפשר לקשר אותו. אבל זה לא חוקי מצד מייקרוסופט.
וזה ממש ככה בשליפה, לא נגעתי בDLL הזה למעלה מ10 שנים.
פורסם במקור בפורום CODE613 ב28/01/2014 21:57 (+02:00)
אם אני זוכר נכון, (בכלל לא בטוח) נראה לי שהDLL MSO.DLL מכיל בתוכו את הכל, ואפשר לקשר אותו. אבל זה לא חוקי מצד מייקרוסופט.
וזה ממש ככה בשליפה, לא נגעתי בDLL הזה למעלה מ10 שנים.
פורסם במקור בפורום CODE613 ב28/01/2014 21:57 (+02:00)
בלי עריכה?
יש את Word Viewer
מסתבר שאפשר לעבוד איתו דרך Interop. (לא בדקתי...)
פורסם במקור בפורום CODE613 ב28/01/2014 21:48 (+02:00)
המשמעות של כולם כלפי המתכנת היא אותו דבר (בדרך הטיפול בזה)
ההבדל? כאן
ובזה אין הבדל בין ווב לאקסס לC# לVBNET ואולי גם לPHP וNodeJS....
פורסם במקור בפורום CODE613 ב29/01/2014 17:15 (+02:00)
@דוד ל.ט.
אכן CONCAT זוהי פונקציה חדשה מ2012 (SERVER, הManagement Studio לא "מתערב" בעסק).
גירסאות קודמות צריכים להשתמש עם + ולוודא שהכל סטרינגים.
לSQL SERVER יש IDE נורמלי לחלוטין. רק שאתם ירוקים בעסק... כל מי שמתחיל ללמוד מסדי נתונים יודע שNull זה לא ערך. זה "בלתי ידוע" וממילא עם עושים לדוגמאDECLARE @VAR int; SELECT 100 - @VAR
התוצאה אינה 100 (כי לא חיסרנו ממנו כלום), אלא NULL! כי הSQL לא יודע כמה זה מאה פחות XXX.
וכאן נכנס ISNULL לעסק.
DECLARE @VAR int;
SELECT 100 - ISNULL(@VAR,0)
יחזיר 100, כי ISNULL הופך את הNULL למה שתכתוב בפרמטר השני שלו. (אם הייתי שם 1 בפרמטר השני הוא היה מחזיר 99)
פורסם במקור בפורום CODE613 ב29/01/2014 14:40 (+02:00)
הפתרון הסופי הוא שימוש בפוקנצייה CONCAT, תסתכל בקוד של תיעוד שינויים בדטה בייס שהעלתי לכאן.
אין באמת שירשור בSQL.
זה עובד ב2008?
SELECT CONCAT ( 'Happy ', 'Birthday ', 11, '/', '25' ) AS Result;
מחזיר:
Msg 195, Level 15, State 10, Line 1
'CONCAT' is not a recognized built-in function name.
למרות שבמייקרוסופט כתוב שזה נתמך עד2012, משמע גם ב2008.
אני בכל אופן אוהב בשירשור להשתמש בISNULL כי ברוב המקרים כשזה NULL אני רוצה שיהיה כתוב משהו. לדוגמא: ללא קטגוריה
ודבר נוסף שISNULL יודע להתמודד גם עם מספרים וכו' מה שאומר שאפשר לברוח מהכפלה בNULL כי זה ייהפך ל0.
פורסם במקור בפורום CODE613 ב27/01/2014 22:59 (+02:00)
בלי להתמקד בקוד שלך, תעשה ISNULL() על כל מה שאתה משרשר.
זה יבטיח שלא יהיו NULLים.
SQL בניגוד לVB וC# לא יכול לשרשר NULL עם עוד מחרוזת. ברגע שמשהו NULL, הכל NULL.
ISNULL([fld1],N'' ) +ISNULL([fld2],N'' )
מקביל לNz באקסס...
פורסם במקור בפורום CODE613 ב27/01/2014 21:18 (+02:00)
מה שלא טוב בזה (לפחות בינתיים) - זה שהוא שומר בטבלה המקושרת (באקסס) את הAPP לכל טבלה. אם יש לך 100 טבלאות, צריך לעשות Refresh על כולם.
פורסם במקור בפורום CODE613 ב28/01/2014 00:55 (+02:00)
@ClickOne
יש דרך לשלוח פרטים נוספים בחיבור של הODBC?אני חושב שכן, הרי יש את הפרופרטי APP בקונקשיין סטרינג.
השאלה איך מושכים את הנתונים האלו בטריגר, וגם האם באותה הדרך יש אפשרות לשלוח משתנים נוספים.אדרבה ואדרבה, זה בדיוק מה שאני מחפש, שהטריגרים יוכלו לדעת משהו ולו קצה חוט על המשתמש קצה, ואז אני יכול ממש למלוך על הנתונים... ולא רק לשלוט עליהם באמצעות דיכוי.... :lol: :lol: :lol: :lol: :lol:
תראה, לעשות ODBC לכל משתמש לא נראה לי ארכיטקטי מספיק... וזה גם לתפוס את הלקוח בגרון שכל משתמש חדש צריך לעשות לו חיבור חדש וכו.
נראה לי שמצאתי.
עם APP אנחנו מעבירים לקונקשיין סטרינג איזו תוכנית מפעילה, ובעצם... מה שאנחנו רוצים! (כי אנחנו שולטים על הסטרינג שעובר)
ז"א, שאם נעביר שם את הID של המשתמש הנוכחי, או מערך של כל הנתונים, בSQL SERVER נוכל לשחק איתם איך שאנחנו רוצים.
הבעייה הייתה איך מושכים את הנתון הזה בתוך הSQL.
SELECT APP_NAME();
מחזיר את מה ששלחנו בAPP לקונקשיין.
פורסם במקור בפורום CODE613 ב28/01/2014 00:48 (+02:00)
@ClickOne
יש דרך לשלוח פרטים נוספים בחיבור של הODBC?אני חושב שכן, הרי יש את הפרופרטי APP בקונקשיין סטרינג.
השאלה איך מושכים את הנתונים האלו בטריגר, וגם האם באותה הדרך יש אפשרות לשלוח משתנים נוספים.אדרבה ואדרבה, זה בדיוק מה שאני מחפש, שהטריגרים יוכלו לדעת משהו ולו קצה חוט על המשתמש קצה, ואז אני יכול ממש למלוך על הנתונים... ולא רק לשלוט עליהם באמצעות דיכוי.... :lol: :lol: :lol: :lol: :lol:
תראה, לעשות ODBC לכל משתמש לא נראה לי ארכיטקטי מספיק... וזה גם לתפוס את הלקוח בגרון שכל משתמש חדש צריך לעשות לו חיבור חדש וכו.
אתה שומר את הסיסמא בקונקשיין של הODBC?
אני לא. אני מתחבר פעם אחת בהפעלה לשרת דרך קוד VBA, ואז הוא זוכר את הסש'ן עם הסיסמא. (בעיקר סיבות של אבטחת מידע, כדי שאף אחד לא יוכל להכנס לטבלאות [ע"י לחיצה על שיפט בהפעלה] - כשאני נכנס בקוד אני אכן מוודא שא"א לראות את תוכן את הטבלאות)
אני למעשה מתחבט באותו עניין כבר תקופה ארוכה, חשבתי לעשות טבלה של סש'נים ולשלוח את הסש'ןID דרך הAPP לחיבור בהפעלת התוכנית.
אבל עדיין לא מצאתי דרך לשלוף את הנתון הזה שנשלח בקונקשיין.
אם תמצא משהו, ספר....
פורסם במקור בפורום CODE613 ב26/01/2014 14:35 (+02:00)
גם להשתמש בשם המשתמש של ווינדוס לא בטוח שיעזור. אם יש 2 מחשבים עם אותו שם משתמש? (אא"כ זה באותו משרד או שאתה משתמש גם בשם המחשב כמזהה [מהשאלה נראה שלא, כי כתבת user\user ולא comuter\user])
יש דרך לשלוח פרטים נוספים בחיבור של הODBC?
אני חושב שכן, הרי יש את הפרופרטי APP בקונקשיין סטרינג.
השאלה איך מושכים את הנתונים האלו בטריגר, וגם האם באותה הדרך יש אפשרות לשלוח משתנים נוספים.
פורסם במקור בפורום CODE613 ב26/01/2014 12:55 (+02:00)
הייתי מנסה משהו עקום. (כי ישר לא הולך לי....)
ליצור משתנה CLR בC# ולייבא אותו לDB.
ואז להצהיר עליו שם.
אין לי כמעט נסיון בCLR בתוך DB. אתה יודע אם זה מאט את הריצה של הפונקצייה? ההיגיון אומר שכן... (אם כן אז הפיתרון הוא עקום + לא יעיל :lol: :lol: :lol: )
פורסם במקור בפורום CODE613 ב26/01/2014 03:06 (+02:00)
תבדוק 2 דברים.
למייקרוסופט הייתה בעייה עם הTLB של האקסס, הם שינו את הנקודת כניסה שלו בלי להודיע לאף אחד, אבל תיקנו את זה אחרי כמה חודשים. (אז הפיתרון היה להסיר את הSP עד שיהיה תיקון. אח"כ הם הוציאו תיקון לזה.)
פורסם במקור בפורום CODE613 ב23/05/2014 11:25 (+03:00)
באקסס מקומפל אתה צריך להחזיק 2 גירסאות אם אתה רוצה תאימות גם ל64 ביט.
גירסה ל32 וגירסה ל64.
(או שהמשתמשים שלך יחזיקו רק 32 או רק 64)
למיטב ידיעתי ונסיוני אין משמעות לגירסת הווינדוס (למעט בעבר שמייקרוסופט שינו משהו בSP1 בWIN7, ואז זה יצר בעיות -אבל הם תיקנו את זה)
פורסם במקור בפורום CODE613 ב26/01/2014 14:53 (+02:00)
או לשכתב את הרפרנסים בקוד:
Public Function IsThereAbrokenReferences() As Boolean
On Error GoTo IsThereAbrokenReferencesErr
Dim rf As Reference, BrokenName As String, IsBrokenReference As Boolean
IsBrokenReference = False
For Each rf In Application.References
If rf.IsBroken Then
IsBrokenReference = True
BrokenName = BrokenName & rf.Name & ";" & rf.FullPath & vbCrLf
End If
Next
If IsBrokenReference Then
MsgBox "יש הפנייה אחת או יותר לא תקינות" & vbCrLf & BrokenName
End If
IsThereAbrokenReferences = IsBrokenReference
Exit Function
IsThereAbrokenReferencesErr:
MsgBox err.Description
Resume Next
End Function
להריץ את זה בהתחלת התוכנית.
למען האמת שמעולם לאהרצתי את הפונקצייה הזו, ורק היא יושבת לי באחד הפרוייקטים שלי.
אני גם לא כ"כ מבין איך היא תרוץ אם אקסס לא יכול להריץ כלום כאשר יש רפרנסים שבורים (אפילו דברים מובנים בVB כמו Chr)
ולשומע ינעם :lol: :lol:
פורסם במקור בפורום CODE613 ב26/01/2014 02:09 (+02:00)
@ClickOne
אח, איזה כיף שאתה כאן....שים לב שכאתה משתמש עם Close, תן לו הפנייה מפורשת לשם האובייקט שעליו לסגור.
במיוחד עם לשוניות, לפעמים הטופס הפעיל הוא הראשי, אפילו שאתה רואה את עובדים לדוגמא.נסה את זה:
docmd.Close acForm,Me.Name
השימוש בMe.Name מבטיח שלא תצטרך לכתוב בכל טופס את שם הטופס, וגם שלא תטעה / או אם תשנה את שם הטופס. :lol:
בהצלה!פתאום האח בא ומגלה את הגביע שהוחבא באמתחתו של אחיו הקטן??? לא הוגן.... היית מספר לנו שיש פקודת Close והיינו יודעים מראש איך לעזור לך, לפי השאלה זה היה נראה כאילו אין שום קוד שאמור לעשות משהו, אלא פשוט תקלה מטומטמת של מייקרוסופט, בכל מקרה התשובה שלי נכונה להרבה דברים מוזרים שקורים בלי שום הסבר....
אתה צודק.
(אגב אני הקטן...)
אבל הבעייה שהוא תיאר נמצאת לפעמים גם אם סוגרים מהX בצד כשמדברים על לשוניות.
לפעמים הלשונית שבפוקוס היא אחת בעוד שבפועל על המסך רואים את הלשונית השנייה. ואז כשלוחצים X בצד כדי לסגור, זה סוגר לשונית אחרת שבכלל לא התכוונו לסגור.
מעצבן......
פורסם במקור בפורום CODE613 ב26/01/2014 03:03 (+02:00)
אח, איזה כיף שאתה כאן....
שים לב שכאתה משתמש עם Close, תן לו הפנייה מפורשת לשם האובייקט שעליו לסגור.
במיוחד עם לשוניות, לפעמים הטופס הפעיל הוא הראשי, אפילו שאתה רואה את עובדים לדוגמא.
נסה את זה:
docmd.Close acForm,Me.Name
השימוש בMe.Name מבטיח שלא תצטרך לכתוב בכל טופס את שם הטופס, וגם שלא תטעה / או אם תשנה את שם הטופס. :lol:
בהצלה!
פורסם במקור בפורום CODE613 ב22/01/2014 22:30 (+02:00)
לפחות משהו אחד טוב כן יצא מזה, למדתי על המאפיין הזה שנקרא ListInex שמחזיר -1 כאשר הערך איננו קיים ברשימה, ואז עשיתי קוד (לא פתרון הכי נקי, אבל לפחות משהו) שמסתיר את המידע כאשר הערך לא נמצא ברשומה, איך??? לא תאמינו, פשוט משחקי צבעים....
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Private Sub פירוט_Format(Cancel As Integer, FormatCount As Integer) 'On Error Resume Next If meals.ListIndex = -1 Then meals.ForeColor = meals.BackColor Else meals.ForeColor = vbBlack End If End Sub
טוב אז מבחינתי אפשר לסגור את האשכול, לא נראה לי שמשהו יותר טוב יכול לצוץ פתאום, אני מסמן וי.
לכאורה במקום קוד יכולת לשים את זה בעיצוב מותנה, לא?
לא בדקתי, אבל אני משער...
בכל מקרה בקוד יכולת לעשות כך:
meals.ForeColor =iif(meals.ListIndex = -1, meals.BackColor,vbBlack)
נראה לי יותר קצר <!-- s8-) --><img src="{SMILIES_PATH}/icon_cool.gif" alt="8-)" title="מגניב" /><!-- s8-) -->
עריכה: והמספר שהוא מחזיר בליסט אינדקס זה המספר של האיבר במערך האפשרויות בליסט. (בעצם הסיבה שקומבו רץ יותר מהר מDLookUp (וכמו שאמרת בשאלה הראשונה שלך) היא שהשאילתא רצה פעם אחת וכל פעם רק מוצאת את הנתון בליסט...
פורסם במקור בפורום CODE613 ב25/01/2014 22:26 (+02:00)
שלום וברכה
סליחה שאני מתפרץ ככה אבל... קודם כל עצם העובדה שיש לך ID בלי ערך מקביל, מעורר שאלה על נירמול הנתונים שלך, מאיפה הגיע ה ID הזה בכלל, הרי הוא מייצג ערך לא קיים.
בנוסף חושבני שזה לא תקלה כלל, להפך, כיצד תדע שיש ערך בשדה? אם הוא יוצג כריק, יתכן ובטעות יערכו אותו. ואם אינך מעוניין שיהיה אפשר לערוך, למה לך קומבו בוקס, עדיף תיבת טקסט עם ערך מחושב.
לא חייב.
דוגמא: אם יש ילד שקשור למוסד וכיתה, (2 שדות קומבו) ויש מקרה קיצון שהמשתמש העביר את הכיתה למוסד אחר, אז בטבלה של התלמידים יהיה שבירה של הID של הכיתה. (בעיקרון צריך בכזה מקרה לעשות עידכוןן בשאילתא כדי לעדכן את המוסד בתלמידים)
וזה בהחלט יכול לקרות.
זה תקלה, כי זה יוצא רק בדוחות, ושם זה לא רלוונטי שזה נשבר....
פורסם במקור בפורום CODE613 ב22/01/2014 23:02 (+02:00)
לצערינו זה שינוי של מייקרוסופט מגירסה 2007, (קיים בדוחות ולא בטפסים).
הייתי עושה את הקובובוקס מוסתר ותיבת טקסט עם מקור הפקד:
cmb.column(1)
לא בדקתי, אבל זה אמור לעבוד...
פורסם במקור בפורום CODE613 ב22/01/2014 22:23 (+02:00)
מישהו מבין למה זה לא אפשרי?
אם לא סוגרים לMDE זה נותן, אבל כשסוגרים, זה לא נותן. זה פשוט מונע ממני כל פעם להתקדם לגירסה הבאה.
התכתבתי ע"ז בעבר עם צוות הפיתוח של אקסס, והם לא ענו לי תשובה מי יודע מה
אני מניח שזה איזה Public Property שאומר לאקסס שזה נוצר בגירסה יותר מאוחרת, אבל אני לא מצליח למצוא אותו.
רחמים, לא לשכוח עכשיו לקשר את השירשור הזה לשירשור של הפלטפורמה, ולתת לנו עוד סיבה למה לא אקסס. אני יענה לך מעכשיו: בפיתוח של דוטנט הבעייה הפוכה: א"א לפתוח פרוייקט שנוצר או נשמר בגירסה חדשה, בVS גירסה ישנה (אני מדבר על הVS ולא על הFramework), אבל לפחות שם כשמקמפלים זה עובד...
פורסם במקור בפורום CODE613 ב21/01/2014 10:54 (+02:00)