פורום מחשבים

פורום לענייני מחשבים, תוכנות, אינטרנט, סינונים, שרתים, חומרה, רשתות, תקשורת ועוד.
מנהל הפורום: יעקב ויצמן

מחשבים ותוכנות > תוכן מקצועי

שלו' וברכה

אציג בעיה, ועמה פתרונים שניתן לעשות
ואשמח אם למישהו יש פתרונות יותר טובים

כידוע לכל רשומה עושים בדר"כ מספר מזהה (ID), בתוכנות מקצועיות להנהלת חשבונות וכו', יש חשיבות מיוחדת שמספרים המזהים יהיו עוקבים (אם משרד המיסים יעשה ביקור בחברה מסוימת, וימצאו שחסר מספר של חשבונית מסוימת זה יעורר סימני שאלה...)
לצורך כך יש באקסס "מספור אוטומטי", אשר מוסיף בכל רשומה שנפתחה, את המספר העוקב הבא.

ועכשיו לבעיה, שאם מתחילים להוסיף רשומה, האקסס מייד מקצה את המספר הבא, ואם בסוף נחליט שלא להוסיף כרגע, ונמחק את הרשומה (ואם יש לנו טופס להוספת הרשומה, אז נעשה בלחצן ביטול, פקודת מחיקת רשומה), יקרה שבפעם הבאה שנפתח רשומה חדשה נקבל את המספר העוקב שאחרי הרשומה שנפתחה (כנראה שיש איזשהו אינדקס פנימי שמקצה את המספרים, ללא קשר למספר הקיים כרגע בטבלה, אלא למספרים שהוא הקצה), וכמובן שזוהי בעיה בכך שיווצר חוסר עקביות במספרים.

יש פיתרון ידני, לבצע על הקובץ "דחיסה ותיקון של מסד הנתונים", ואז אקסס ימשיך במספר אחרי מה שיש כרגע בטבלה (כנראה שבדחיסה הוא בונה מחדש את האינדקסים הפנימיים).

אבל כמובן שפיתרון זה אינו בר ביצוע כאשר אנו נותנים לאחרים להשתמש בקובץ שאנו בונים, (וגם לעשות פקודה שתבצע דחיסה אם מוחקים רשומה שהוסיפו, אינו בר ביצוע מכיוון שהמערת צריכה לסגור את עצמה כשעושים דחיסה...).


יש פיתרון נוסף, שבכל טופס של הוספת רשומה, מביאים פעמיים את השדות, פעם אחת כאשר הם מאוגדים לטבלה אמנם מגדירים אותם כ"לא גלוי", ופעם נוספת כאשר הם לא מאוגדים, ואת הטופס מעצבים על השדות הלא מאוגדים, ואז כמובן כל נתון שנכניס בשדות האלו לא ישפיעו כלום על הנתונים בטבלה, ועושים לחצן אישור שמפעיל פקודה אשר מכניסה את הנתונים מהשדות הלא מאוגדים לשדות המאוגדים.

מה שיוצא הוא שכל זמן שלא לוחצים אישור הרשומה החדשה לא נפתחה, ועדיין ניתן לסגור את הכל.

(למי שרוצה להשתמש בפיתרון הזה, אז שם המאקרו הוא "SetValue", בשורה הראשונה מכניסים לאיפה אנו רוצים להכניס את הנתונים, כלומר לאיזה שדה, ובשורה השניה אנו מכניסים מה אנו רוצים להכניס, זה יכול להיות פונקציה, או נתון משדה מסוים
בקוד זה הפונקציה הבאה
קוד:
With CodeContextObject
        .[שדהמאוגד1] = .[שדהלאמאוגד1]
        .[שדהמאוגד2] = .[שדהלאמאוגד2]
    End With
).

אמנם להשתמש את הפיתרון גורם לכל טופס שאנו בונים לעבודה ארוכה ומפרכת.


אשמח אם למישהו יש פיתרונות יותר קלים ומהירים לנושא.
מצורף כאן קובץ, אתאר את התופעה, ואשמח להסבר ו/או עזרה (הקובץ הזה הוא רק תמצית מהקובץ המקורי וכאן חוזר על עצמו התופעה בצורות שונות).

יש לי טבלה, באחד העמודות של הטבלה יש מספר מסוים לכל רשומה.
כמו"כ יש טופס שבו יש תיבה משולבת ששם בוחרים מרשומות הטבלה הנ"ל.
כמו"כ יש שאילתה המבוססת על הטבלה, ובקריטריון מוגדר שיציג רק מה שנבחר בתיבה המשולבת שבטופס.

בנוסף יש שדה בטופס ששם אמורים לרשום מספר מסוים, ויש שדה נוסף ששם המערכת אמורה לכתוב, ע"י המאקרו.
בלחצן שבטופס מוגדר שאם המספר בשורה גדול (או קטן, אני כבר מבולבל) מהמספר המופיע בעמודה "מספר" שבשאילתה אז המערכת תשים 100 בשורה השלישית בטופס, ואם לא המערכת תציג הודעה "אין בונוס".

בפועל מה שקורה הוא שונה בתכלית ממה שאמור להיות.
לדגומה בחרתי בתיבת המשולבת ברשומה שבו המספר הינו 10500, ואז אם בשורה השניה בטופס הכנסתי 2000 הוא כתב לי באמת אין בונוס, אך אם הכנסתי 1000, ועד 1050 הוא כן הכניס 100 בשורה השלישית.
אז מה קורה כאן, איך ייתכן ש 2000 הוא מספר קטן מ 1000, או לחילופין, איך ייתכן ש 900 הוא מספר גדול מ 1050.

אולי מעניין אותך גם...

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק כה

אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
נקרא  2  פעמים
למעלה