@גבאי @עמוד-הימני-פטיש-החזק @פיסטוק-חלבי @dudu
שלום
כיון שהזכרתם את הניק שלי עם @ קיבלתי התראה לאימייל
אנסה להסביר כאן האיך לעשות שייבא רק רשומות חדשות.
קודם כל הסבר תיאורתי,
המודול של הורדת קבצים עובד בצורה כזו:
- קבלת מחרוזת המכילה את קובץ ה ymgr מהשרת
- המרת המחרוזת לפורמט json (זוהי שיטה לייצג טבלה במחרוזת טקסטאולית)
- לולאה שרצה על כל הרשומות ב json ואכסונם בטבלה מקומית
הקוד שמייבא רק רשומות חדשות מעמיד תנאי בדיקה האם המזהה הסידורי של הרשומה מקובץ ה ymgr גבוה מהמזהה הסידורי המקסימלי שמאוחסן בטבלה המקומית, ורק אם כן מייבא אותו
לדוגמא: אם אתה מייבא קובץ aprovalAll.ymgr לטבלה מקומית בשם 'קבלת נתונים'. אזי הקוד יבדוק בכל רשומה שתתקבל מקובץ ה ymgr את שדה Booking, האם הוא גבוה יותר מהערך המקסימלי בשדה Booking (או איך שקראת לו) בטבלה המקומית, ורק באם הוא גבוה יותר, המערכת תייבא את הנתון
שים לב, לקבצים שונים, המזהה יכול להיות שונה (לדוגמא בקובץ aproval_number_log המזהה הוא ApprovalNumber), או לא קיים (לדוגמא בקבצי נתוני השמעה LogFolderEnterExit-yyyy-mm) , במקרה כזה יהיה עלינו להתאים את הקוד לקובץ הספציפי
נקודה חשובה: אין באפשרות הקוד לבדוק את הקובץ ymgr עצמו, אלא רק למנוע את אחסון הרשומות בטבלה המקומית, זאת אומרת שהקוד יכול להיכנס רק בין שלב 2 לשלב 3
זה אומר ששלב 1 ובעיקר שלב 2 (שהוא השלב המאסיבי ביותר), ירוצו על כל הקובץ, ורק שלב 3 יסונן לרשומות החדשות
יש בזה חיסכון מסויים בזמן הריצה, אבל לא חיסכון משולם
ישנה אפשרות לסנן את קובץ ה ymgr עצמו וכך לחסוך גם את שלב 2 (על ידי replace של המחרוזת, למי שמבין), אבל בשביל זה צריך לעשות התאמה אישית לקובץ מסויים ולפורמט שלו, ואינני יכול להעלות כאן דוגמא כללית
מכיון שלכל אחד משתמש בקודים לייבוא קובץ אחר, וגם כל אחד מאכסן את המזהה בטבלה אחרת, אני מעלה כאן את הקוד הכללי, וכל אחד יעשה לעצמו את ההתאמה, בהמשך (אם יהיה סיפק בידי) אעלה תיקון למודול עצמו (כמו שכבר הבטחתי...)
נקודה חשובה, המודלים שהעלתי הוגדרו כך שבכל ייבוא נתונים נמחקת הטבלה המקומית הקודמת שמחזיקה את הנתונים, לצורך ייבוא נתונים לאותה הטבלה יש להכניס את הערך 3 בקוד CreatingTable כמו שמוצג בדוגמא
הקוד יכנס בקוד ImportTextToTable (-ייבא טקסט אל הטבלה) במודול ImportingFiles (-ייבוא קבצים)
הסבר בגוף הקוד
Sub ImportTextToTable(strText As String, strTableName As String)
NamesFildsFile = GetNameFilds(strText)
chrStartRow = Mid(strText, 1, 1)
strText = "[{""" & strText
strText = Replace(strText, "#", """:""")
strText = Replace(strText, "%", """,""")
strText = Replace(strText, Chr(13) & Chr(10) & chrStartRow, """},{""" & chrStartRow)
strText = Replace(strText, Chr(13) & Chr(10), """}]")
Dim Json As Object
Set Json = JsonConverter.ParseJson(strText)
Set rs = CurrentDb.OpenRecordset(CreatingTable(strTableName, NamesFildsFile,3))
ValMax = Dmax("Booking", strTableName)
For Each CurrentId In Json
ValID = CurrentId("Booking")
IF ValID > ValMax then
rs.AddNew
For Each filds In NamesFildsFile
valJson = CurrentId(filds)
rs(filds) = valJson
Next
rs.Update
End IF
Next
End Sub