@אליהו-בן נהדר!
אם תערוך את ההודעה הראשונה שלך (בתחילת השרשור) זה יאפשר לך לערוך גם את הכותרת, ולהוסיף את המילה 'נפתר' בהתחלה.
OdedDvir
-
מעונין בקוד לאקסס שירענן נתונים כאילו סגר את האקסס ופתח **נפתר** -
מעונין בקוד לאקסס שירענן נתונים כאילו סגר את האקסס ופתח **נפתר**@אליהו-בן השאלה שלך סיקרנה אותי לחפור קצת בנידון.
כנראה שהאובייקט שלMSXML2.XMLHTTP
מפעיל מנגנון מטמון של הבקשות והתגובות, מה שמסביר את התופעה לעיל בדיוק, כי כל מופע של אקסס משוייך לאותו סשן על ידי המערכת.יש כמה הצעות לפיתרון, מהקל לכבד:
- להוסיף את הכותרות הבאות לאובייקט כשאתה יוצר אותו, בתקווה שהשרת יכבד אותן:
Set xhrRequest = CreateObject("MSXML2.XMLHTTP.6.0") xhrRequest.setRequestHeader "pragma", "no-cache" xhrRequest.setRequestHeader "Cache-Control", "no-cache, no-store" Do Until order.EOF ...
- להשתמש באובייקט החלופי
WinHttp.WinHttpRequest.5.1
, שלא משתמש במטמון. שמות המתודות הנדרשות בו זהים לשמות שבאובייקטMSXML2.XMLHTTP.6.0
, דהיינו:
Set httpRequest = CreateObject("WinHttp.WinHttpRequest.5.1") Do Until order.EOF 'Url = "XXXXXXXXX? httpRequest.Open "GET", url, False httpRequest.Send res = httpRequest.responseText
- "לעבוד" על המנגנון של המטמון, ולגרום לו לחשוב שבכל פעם מדובר בבקשה שונה לחלוטין, על ידי הוספה של פרמטר "בובה" (dummy) המכיל מספר אקראי, כך:
' תריץ את הפקודה הזו פעם אחת בתחילת ההפעלה של התוכנה שלך Randomize ... ' ואז בקוד של השליחה ' יצירת מספר מ-1 עד 100000 Dim dummyNumber As Long dummyNumber = Int((99999) * Rnd) + 1 ' הוספת הפרמטר לבקשה xhrRequest.Open "GET", url, False & "&dummy=" & dummyNumber
- אם כלו כל הקיצין: תוכל לנקות את המטמון לפני כל הפעלה (על ידי קריאה ל-API של Windows) וכך לכפות יצירת סשן חדש בכל פעם.
תדביק את הקוד הבא במודול חדש:
Public Declare PtrSafe Function InternetSetOptionStr Lib "wininet.dll" Alias "InternetSetOptionA" (ByVal hInternet As Long, ByVal lOption As Long, ByVal sBuffer As String, ByVal lBufferLength As Long) As Integer Public Sub ClearInternetCache() InternetSetOptionStr 0, 42, 0, 0 End Sub
ובקוד של השליחה תקרא למתודה שיצרת לעיל, לפני השליחה:
ClearInternetCache Set xhrRequest = CreateObject("MSXML2.XMLHTTP.6.0") ...
אני מציע שתנסה את הדרכים לעיל לפי הסדר, כי הראשונות עדיפות על האחרונות, ותעדכן אם הבעיה נפתרה ובאיזו דרך. בהצלחה!
-
מעונין בקוד לאקסס שירענן נתונים כאילו סגר את האקסס ופתח **נפתר**@אליהו-בן כתב במעונין בקוד לאקסס שירענן נתונים כאילו סגר את האקסס ופתח:
לדעתי האקסס מחזיר את התשובה הקודמת הוא מחזיר מה שנאמר בפעם הקודמת
האם אתה יכול לוודא האם אתה אכן שולח בקשות שונות ועדיין מקבל עבורן תשובות זהות? קשה לי לקבל את הטענה שהשרת בודק האם הבקשות הרציפות דומות... הרבה יותר מסתבר לי לומר שהנתונים באקסס לא מתעדכנים בין השליחות, וממילא אתה שולח בדיוק את אותה הבקשה.
אם צדקתי, פרט את אופן העדכון והשליחה (כמו שציינתי בתגובה הראשונה שלי) ונוכל להתקדם.
-
קיצורי מקלדת באקסס@dovid כתב בקיצורי מקלדת באקסס:
או להכניס את השורות האלה לתוך התנאי.
כך הייתי צריך לעשות באמת, תודה על ההערה, תיקנתי במקור.
-
c# שימוש שוטף בTry/Catch@Y-Excel-Access כתב בc# שימוש שוטף בTry/Catch:
אם אתה מכניס ערך למשתנה בו יש קיבולת נמוכה הערך פשוט 'מתקזז' לתוך המשתנה הקטן יותר.
אם לא התכוונת בפירוש שזה יקרה - זה בעצם באג.
ולמה לשחרר ללקוח מוצר לא מושלם? כי לפעמים זה יעלה לו הרבה פחות שעות פיתוח
אני לא מסכים איתך. זה יעלה לו הרבה יותר אם לא תטפל לפחות בשגיאות שאתה יודע שלא היית מושלם שם...
-
מעונין בקוד לאקסס שירענן נתונים כאילו סגר את האקסס ופתח **נפתר**@Y-Excel-Access מסתמא הRECORDSET עובד בדיוק כמו שהוא אמור לעבוד. השאלה היא מה אמרו לו לעשות... מה הכוונה במילים:
והכל עבד רק השרת פשוט לא עונה תשובה.
לא חזר כלום? חזרה אותה התגובה? חזרה שגיאה?
מתי יבוא אליהו ויתרץ? -
c# שימוש שוטף בTry/Catch@mekev יש הרבה מה לומר בנידון, הנה כמה נקודות:
- רצף - זה שובר את רצף הריצה של התכנית, מעין
GOTO
בתחפושת, לעיני המתכנת זה מקשה מאוד על ההבנה של הקוד. - תחזוקה - זה מאוד מקשה על הדיבוג, בפרט בקוד אסינכרוני, חריגה יכולה לצוץ בלי שיהיה לך מושג מה גרם לה.
- חוסר יעילות - חריגה מבזבזת משאבים מיותרים. גם אם אתה תופס אותה.
- הסתרת באגים - אם אתה לא באמת מתכוון לטפל בשגיאה, כלומר לא רק להתעלם ממנה, אלא לעשות איתה משהו שימושי: כתיבה ללוג, התאוששות מהשגיאה על ידי בקשת קלט נוסף וכו' וחזרה למסלול הריצה הסדירה של התוכנה - השימוש ב
Try/Catch
לעתים קרובות נובע מחוסר ידע או מעצלות. מה שיגרום שבתוכנה יהיה את הסוג הכי בעייתי של באגים - כאלו שאף אחד לא שם לב אליהם בזמן, כי הקוד נראה כאילו הוא עובד תקין... (מכיר את המשל על מי שעקר את נורת האזהרה מלוח השעונים כי היא הפריעה לו?)
במלים אחרות: בעת הפיתוח - אתה בעצם כן רוצה להבחין בכל החריגות ולשכתב את הקוד שלך כך שהם פשוט לא יווצרו.
חפש Why you should avoid try catch לעוד מראי מקומות מפורטים.
- רצף - זה שובר את רצף הריצה של התכנית, מעין
-
מעונין בקוד לאקסס שירענן נתונים כאילו סגר את האקסס ופתח **נפתר**@Y-Excel-Access ההסבר שהצעת לתופעה, שיש דחייה על ידי השרת של בקשות תדירות של נתונים דומים, לא מסביר מדוע סגירה ופתיחה מחדש של אקסס - כן מועילה? לכן חשבתי שהבעייה היא בעדכון של הנתונים הקיימים באקסס.
אגב, הבקשה היאGET
ולא אמורה להעלות נתונים לשרת, רק למשוך ממנו. -
C# איך לעצור המשך ריצת קוד, ב'catch' מפונקציה המחזירה string בקלאס@mekev בוא נעשה סדר. אני מנסה להבין מה בדיוק קורה כאן, נוסח השאלה שלך מעורר בי כמה תמיהות:
- אתה מעוניין שאם יש ערך כלשהו בשדה בדאטא - לא יבוצע עדכון? תקרא את הערך ותבדוק אם הוא מכיל משהו.
- אתה מעוניין למנוע מצב שבו שני משתמשים מנסים לכתוב בו זמנית לאותו שדה? זו בפירוש אחריות שמוטלת על ה-DB ולא צריכה להיות מנוהלת על ידי הקוד בתוכנה.
- אפשר להשתמש ב-TryParse שלא זורק חריגה במקרה של כישלון המרה.
- באופן כללי אתה צודק שאין לחזור על עצמך בקוד. אתה אמור להפוך את תהליך הבדיקה לפונקציה בפני עצמה, ולקרוא לה 10 פעמים, לא לחזור על הקוד 10 פעמים.
- באופן כללי, נסה להמנע מלהשתמש ב-Try/Catch ככל האפשר. ברוב המוחלט של המקרים, יש דרך למנוע את החריגות מעיקרא, על ידי תכנון יותר טוב.
-
מעונין בקוד לאקסס שירענן נתונים כאילו סגר את האקסס ופתח **נפתר**@אליהו-בן אתה צריך לגרום ל-Recordset לשקף את השינויים בנתונים תיכף כשהם קורים. יש כמה דרכים לעשות את זה, וזה תלוי באופן שבו השינויים בנתונים מתבצעים (האם זה עריכה בטופס, שינוי ישיר בטבלה או על ידי קוד שרץ ברקע), וגם באופן שבו הקוד האמור לעיל מופעל (לחיצה על פקד בטופס, וכו'). תפרט בבקשה במה מדובר ואנסה לעזור לך.
כדי שלא אעביר את זמני בניחושי סרק במה בדיוק מדובר, כמו שעשו כולם כאן, אני ממתין לגילוי אליהו -
הוספת שורות בשדה תרומות לפי עמודה בתורמים | אקסס@אוריי התשובה שנתת שיש מזהה של תורם - לכאורה לא מספקת. אם יש שתי תרומות שונות לאותו תורם -הם ייחשבו בטעות כתרומה כפולה.
-
הוספת שורות בשדה תרומות לפי עמודה בתורמים | אקסס@אוריי האם זה אפשרי לזהות את התרומות הכפולות? לפי מה?
-
הסרת " או ' משדה באקסס@אוריי לא הבנתי מה הקושי. אולי תוכל לפרט יותר את התרחיש שלך?
-
מעונין בקוד לאקסס שירענן נתונים כאילו סגר את האקסס ופתח **נפתר**@אליהו-בן הקוד שצירפת מבצע בקשות
GET
לשרת אלמוניX
, על פי רשימה מתוך הטבלה שנפתחת כ-order
. במקרה שהנתונים בשרתX
השתנו, (ובהנחה הפשוטה שאין איזה שירותcache
מקומי פעיל), אתה אמור לקבל תוצאות עדכניות בכל פעם.אבל נראה לי שלא לכך התכוונת, אלא לשינויים שאתה עורך בטבלה שלך באקסס, ואינך רואה אותם משתקפים בשליחה (כלומר הרשימה לא מתעדכנת, ונשלחים אותם נתונים).
האם אני צודק?
-
הסרת " או ' משדה באקסס@אוריי בתחבולות...
Replace ("Oded's example", "'","") ' ---> Output: Odeds example Replace ("Oded""s example", """","") ' ---> Output: Odeds example
-
קיצורי מקלדת באקסס@איש-פלוני כן, אפשרי בהחלט.
אתה צריך להאזין לאירוע הנקרא "ירידת מקש".
תוסיף את הקוד הבא לטופס: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
. - בסיום הטיפול באירוע, אני מאפס את שני הפרמטרים הללו. גם הקוד הזה הוא אופציונאלי, אם הוא יושמט, מערכת ההפעלה תתיחס אף היא להקשה שלנו ביציאה מהפרוצדורה.
מייקרוסופט פירסמו רשימה של קודים קבועים מראש למקשים נפוצים כאן.
- באירוע טעינה של הטופס אני מגדיר את המאפיין
-
עכבר אלחוטי שמגלגל לבד בכיוון ההפוך@מעמד ניסית לבדוק האם זה לכלוך?
-
שגיאה בשליחת API - אקסס@ארי נסה להוסיף גם את הכותרת הבאה:
oHttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
-
שגיאה בשליחת API - אקסס@ארי זה נראה לי כמו שגיאת SSL... אפשר לראות את קטע הקוד שבו אתה משתמש לשליחה?
-
עכבר אלחוטי שמגלגל לבד בכיוון ההפוך@מעמד עוררת את סקרנותי... למרות השם הטוב של לוג'יטק בתחום העכברים, גם אני נתקלתי בבעיה זהה עם דגם אחר של לוג'יטק שהיה של חבר.
התופעה הייתה זהה בדיוק גם אצלו.
אני קצת מכיר איך עובד המנגנון של הגלגלת, ויש שני סוגים עיקריים:- אופטי, שבו יש "חלונות" בהיקף הגלגלת, מצד אחד יש לד, ומהצד השני יש חיישן רגיש לאור, שקולט את ההבהובים שנוצרים בעת הסיבוב. זה המנגנון הנפוץ יותר.
- מגנטי, שבו יש מגנט בגלגלת, וחיישן בצד שקולט את השינוי בשדה המגנטי בעת הסיבוב. זה מנגנון הרבה יותר רגיש לתנועה, ויכול לזהות גם תנועות מורכבות יותר, למשל הטייה של הגלגלת ימינה ושמאלה.
באופן אינטואיטיבי שיערתי שנכנס אבק או לכלוך אחר לתוך המנגנון של הגלגלת, אבל לא היו לי כלים לפתוח את העכבר באותו זמן, אז פשוט נשפתי כמה נשיפות חזקות לחריץ של הגלגלת, והבעיה נעלמה...
אני מאוד סקרן האם זה המקרה גם אצלך, שמא יש עיצוב לקוי בקו היצור שלהם.