רשת לרענן אינם מציגים נתונים כאשר הסמן מתעדכן בזמן ריצה ב- Visual FoxPro


מאפייני הבעיה


ב- Microsoft Visual FoxPro, אם הגדרת את המאפיין RecordSource של רשת היא סמן מכן סמן זה מתעדכן בזמן ריצה על-ידי שימוש בפקודה "בחר SQL לתוך הסמן CursorName", הרשת אינם מציגים נתונים גם אם לרענן אותו על-ידי שימוש בפקודה ThisForm.Refresh או ThisForm. GridName. רענן פקודה.

הגורם


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

פתרון


כדי לרענן את הרשת במצב זה, הגדר את המאפיין RecordSource של הרשת לעצמו כמו בדוגמה זו:
    thisform.grid1.recordsource=thisform.grid1.recordsource

מצב


אופן פעולה זה הוא מכוון.

מידע נוסף


לקבלת מידע נוסף, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:

140653 רשת מבוססת על הסמן הוא ריק אם הסמן ב- Visual FoxPro מאפסת הפקודה בחר-SQL

שלבים לשחזור ההתנהגות

  1. יצירת טופס ולאחר מכן הוסף את הלקוח. טבלת DBF (בספריה \VFP\SAMPLES\DATA) בסביבה נתונים.
  2. מקם את הקוד הבא בתוך האירוע Load של הטופס:

    CREATE CURSOR Compdisp (company c(40),city c(15),country c(15))
  3. מקם את הקוד הבא באירוע ההשמדה של הטופס:
       SELECT Compdisp
    USE
  4. צור רשת בטופס, ותן הרשת הגדרות המאפיינים הבאים:
       ColumnCount=3
    RecordSourceType=Alias
    RecordSource=Compdisp
  5. הוסף תיבת טקסט לטופס.
  6. הוספת לחצן פקודה עם הקוד הבא באירוע לחץ שלה:
       SELECT company,city,country;
    FROM customer;
    WHERE customer.country=thisform.text1.value;
    INTO CURSOR Compdisp
    THISFORM.GRID1.REFRESH
  7. הפעל את הטופס. הקלד צרפת בתיבת הטקסט ולאחר מכן לחץ על לחצן הפקודה.
הרשת צריכה להציג את כל הרשומות בהן Customer.Country="France," אך לא. הרשת תהיה ריקה. THISFROM. GRID1. רענון אינו נראה כדי לעדכן את הרשת. הדבר קורה גם אם הסמן לא נוצרת באירוע טעינה של הטופס.


כדי שרשת להציג את הנתונים בצורה נכונה, מקם את הפקודה הבאה בתור השורה האחרונה של קוד עבור אירוע לחיצה של לחצן הפקודה:
   ThisForm.Grid1.RecordSource =ThisForm.Grid1.RecordSource