העתקת רשומה

iissoo

New member
העתקת רשומה

איזו שאילתא צריך לרשום כדי להעתיק רשומה באותה טבלה כשרוצים שכל השדות יהיו זהים חוץ מהשדה של הid תודה
 

פוזנא

New member
לפי דעתי

אין פקודת DUPLICATE אבל ניתן ליצור טבלת עזר, להעתיק את הרשומה אליה, ומעתיקים שוב מהטבלה החדשה לטבלה המקורית. אבל שוב - זה לפי דעתי...
 

logano

New member
ניתן לעשות שכפול ../images/Emo101.gif

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

Dim sSQL As String Dim Cntr As Integer On Error Resume Next DoCmd.SetWarnings False For Cntr = 1 To DMax("[id]", "tbl") sSQL = " INSERT INTO TBL ( ID, Field1, Field2, Field3 ) " _ & " SELECT " & DMax("[id]", "tbl") + 1 & " AS NewID, TBL.Field1, TBL.Field2, TBL.Field3 " _ & " FROM TBL " _ & " WHERE (((TBL.Id)= " & Cntr & "));" DoCmd.RunSQL (sSQL) Next DoCmd.SetWarnings True​
ועכשיו להסברים: אני משתמש במונה (Cntr) על מנת לרוץ על כל הרשומות בטבלה. הוספתי שורת On Error בגלל שאם אין רצף בשדה המפתח ID אני מונע שגיאה שתעצור את הפרוצדורה. קטע הקוד הזה - DMax("[id]", "tbl") + 1 ממספר לי את ה - ID לערך גבוה יותר ב - 1 מהערך הגבוה ביותר בטבלה. אם רוצים להכניס ערך ידני אז יש שתי דרכים לעשות זאת: 1) הוספת שדה בטבלה שישמש את מקור ה - ID ואז במקום הקטע DMax("[id]", "tbl") + 1 נכתוב [Me![FieldID. דבר זה יקח את הערך מהשדה בטופס ויכניס אותו לשאילתת ההוספה. 2) ניתן להשתמש בפרמטר בשאילתה ואז בכל פעם תתבצע שאלה לערך ה-ID. דבר זה מתבצע בצורה הבאה - במקום קטע הקוד הזה:
SELECT " & DMax("[id]", "tbl") + 1 & " AS NewID​
נכניס את קטע הקוד הזה:
SELECT NewId AS NewID​
פעולה זאת תבקש את NewId בכל פעם שתרוץ השאילתה. הערה אחת בהוספה של מספר ID דרך שדה בטופס, תתוסף רק רשומה אחת, אם ID מוגדר כמפתח וזאת בגלל שערך ה - ID יכול להופיע רק פעם אחת, ואין כאן מנגנון שישנה אוטומטית את הערך המופיע בשדה בטופס.
 
למעלה