أحمد العيسى قام بنشر يوليو 31 قام بنشر يوليو 31 السلام عليكم عندى جدولين فى نفس قاعدة البيانات : الأساسي للصف الأول tbl_student ، الآخر للصف الثانى tbl_student2 المطلوب برمجياً حذف الجدول الثانى (tbl_student2) تماماً ، ثم استنساخه مرة أخرى من الجدول الأول (tbl_student) بنفس الأسم (tbl_student2) ما سبق يجب وضعه فى زر أمر ربما هذا الموضوع قد سبق شرحه هنا ، لكن بحثى لم يأتى بنتيجة عموماً : شكراً مقدماً لكل من سوف يشارك بأى فكرة
Foksh قام بنشر يوليو 31 قام بنشر يوليو 31 وعليكم السلام ورحمة الله وبركاته.. مشاركة مع الذكاء الاصطناعي ، جرب هذا الكود التالي Private Sub CommandButton_Click() Dim db As DAO.Database Dim tblName As String Dim newTblName As String ' Set table names tblName = "tbl_student" newTblName = "tbl_student2" ' Get the current database Set db = CurrentDb ' Delete the second table if it exists On Error Resume Next db.TableDefs.Delete newTblName On Error GoTo 0 ' Copy the first table to create the second table DoCmd.CopyObject , newTblName, acTable, tblName ' Clean up Set db = Nothing MsgBox "Table " & newTblName & " has been successfully recreated from " & tblName, vbInformation End Sub * لم يتم تجربة الكود لعدم تواجدي أمام جهاز الكمبيوتر 😁
Foksh قام بنشر يوليو 31 قام بنشر يوليو 31 9 دقائق مضت, أحمد العيسى said: للأسف لم يعمل ! نفس الكود في مرفق ، جربته ويعمل بكفاءة Copy TBL.accdb
أحمد العيسى قام بنشر يوليو 31 الكاتب قام بنشر يوليو 31 سوف أجرب الكود على أكسس 2024 لأننى الآن أعمل على أكسس 2003 كود حذف الجدول الذى يتوافق معى هو DoCmd.DeleteObject acTable, "tbl_student2" جاري البحث عن كود الإنشاء بالبيانات ..
Foksh قام بنشر يوليو 31 قام بنشر يوليو 31 36 دقائق مضت, أحمد العيسى said: سوف أجرب الكود على أكسس 2024 لأننى الآن أعمل على أكسس 2003 للأسف ليس لدي إصدار أوفيس 2003 ، ولكن كتعديل جرب هذا الكود :- Private Sub Command0_Click() Dim db As DAO.Database Dim tblName As String Dim newTblName As String Dim tempTblName As String Dim tdf As DAO.TableDef tblName = "tbl_student" newTblName = "tbl_student2" tempTblName = "temp_" & newTblName Set db = CurrentDb On Error Resume Next Set tdf = db.TableDefs(tempTblName) If Not tdf Is Nothing Then db.TableDefs.Delete tempTblName End If Set tdf = Nothing On Error GoTo 0 DoCmd.CopyObject , tempTblName, acTable, tblName On Error Resume Next Set tdf = db.TableDefs(newTblName) If Not tdf Is Nothing Then db.TableDefs.Delete newTblName End If Set tdf = Nothing On Error GoTo 0 db.TableDefs(tempTblName).Name = newTblName Set db = Nothing MsgBox "Table " & newTblName & " has been successfully recreated from " & tblName, vbInformation End Sub
أحمد العيسى قام بنشر يوليو 31 الكاتب قام بنشر يوليو 31 (معدل) المشكلة أن مثل هذا السطر غير متوافق مع 2003 Dim db As DAO.Database هل من الممكن البناء على الكود التالى فهو بعمل كما اريد ولكن بتحذيرات برنامج الأكسس التى لا أريد إظهارها : Private Sub Cmd2_Click() DoCmd.DeleteObject acTable, "tbl_student2" DoCmd.RunSQL "SELECT tbl_student.* INTO tbl_student2 FROM tbl_student;" End Sub تم تعديل يوليو 31 بواسطه أحمد العيسى
Foksh قام بنشر يوليو 31 قام بنشر يوليو 31 56 دقائق مضت, أحمد العيسى said: المشكلة أن مثل هذا السطر غير متوافق مع 2003 Dim db As DAO.Database هل من الممكن البناء على الكود التالى فهو بعمل كما اريد ولكن بتحذيرات برنامج الأكسس التى لا أريد إظهارها : Private Sub Cmd2_Click() DoCmd.DeleteObject acTable, "tbl_student2" DoCmd.RunSQL "SELECT tbl_student.* INTO tbl_student2 FROM tbl_student;" End Sub Private Sub Cmd2_Click() DoCmd.SetWarnings False DoCmd.DeleteObject acTable, "tbl_student2" DoCmd.RunSQL "SELECT tbl_student.* INTO tbl_student2 FROM tbl_student;" DoCmd.SetWarnings True End Sub
أحمد العيسى قام بنشر يوليو 31 الكاتب قام بنشر يوليو 31 (معدل) تمام هذا ما أريده وقد قمت بالتعديل عليه بالإضافات اللازمة : Private Sub Cmd2_Click() Dim Msg, Style, Title, result Msg = "ÓíÊã ÇáÂä ÍÐÝ ÌÏæá ÇáÕÝ ÇáËÇäì! ääÕÍ ÈÊÕÚíÏ ÇáÕÝ ÇáËÇäì Åáì ÇáËÇáË ÃæáÇ!!! åá ÊÑÛÈ Ýí ÇáÇÓÊãÑÇÑ ¿¿" Style = vbInformation + vbYesNo + vbMsgBoxRight Title = " ÊÍÐíÑ - ÍÐÝ ÌÏæá ÇáÕÝ ÇáËÇäì" result = MsgBox(Msg, Style, Title) If result = vbYes Then DoCmd.SetWarnings False DoCmd.DeleteObject acTable, "tbl_student2" DoCmd.RunSQL "SELECT tbl_student.* INTO tbl_student2 FROM tbl_student;" MsgBox "Êã ÍÐÝ ÌÏæá ÇáÕÝ ÇáËÇäì æÅÍáÇá ãÍÊæíÇÊ ÇáÕÝ ÇáÃæá Ýì ÌÏæá ÌÏíÏ ÈÇÓã ÇáÕÝ ÇáËÇäì", vbOKOnly + vbMsgBoxRight, "ÅÚáÇã ÍÐÝ" DoCmd.SetWarnings True ElseIf result = vbNo Then DoCmd.CancelEvent MsgBox "!!! áÞÏ Êã ÅíÞÇÝ ÚãáíÉ ÇáÍÐÝ ", vbOKOnly + vbMsgBoxRight, "ÅÚáÇã ÊæÞÝ Úä ÇáÍÐÝ" End If End Sub لكن الجدول الجديد لا يظهر التسميات التوضيحية بل يظهر الحقول بالرؤوس الانجليزية المصممة بالبرنامج دون التسميات التوضيحية تم تعديل يوليو 31 بواسطه أحمد العيسى
Foksh قام بنشر يوليو 31 قام بنشر يوليو 31 30 دقائق مضت, أحمد العيسى said: تمام هذا ما أريده وقد قمت بالتعديل عليه بالإضافات اللازمة : Private Sub Cmd2_Click() Dim Msg, Style, Title, result Msg = "ÓíÊã ÇáÂä ÍÐÝ ÌÏæá ÇáÕÝ ÇáËÇäì! ääÕÍ ÈÊÕÚíÏ ÇáÕÝ ÇáËÇäì Åáì ÇáËÇáË ÃæáÇ!!! åá ÊÑÛÈ Ýí ÇáÇÓÊãÑÇÑ ¿¿" Style = vbInformation + vbYesNo + vbMsgBoxRight Title = " ÊÍÐíÑ - ÍÐÝ ÌÏæá ÇáÕÝ ÇáËÇäì" result = MsgBox(Msg, Style, Title) If result = vbYes Then DoCmd.SetWarnings False DoCmd.DeleteObject acTable, "tbl_student2" DoCmd.RunSQL "SELECT tbl_student.* INTO tbl_student2 FROM tbl_student;" MsgBox "Êã ÍÐÝ ÌÏæá ÇáÕÝ ÇáËÇäì æÅÍáÇá ãÍÊæíÇÊ ÇáÕÝ ÇáÃæá Ýì ÌÏæá ÌÏíÏ ÈÇÓã ÇáÕÝ ÇáËÇäì", vbOKOnly + vbMsgBoxRight, "ÅÚáÇã ÍÐÝ" DoCmd.SetWarnings True ElseIf result = vbNo Then DoCmd.CancelEvent MsgBox "!!! áÞÏ Êã ÅíÞÇÝ ÚãáíÉ ÇáÍÐÝ ", vbOKOnly + vbMsgBoxRight, "ÅÚáÇã ÊæÞÝ Úä ÇáÍÐÝ" End If End Sub لكن الجدول الجديد لا يظهر التسميات التوضيحية بل يظهر الحقول بالرؤوس الانجليزية المصممة بالبرنامج دون التسميات التوضيحية جرب التعديل التالي :- Private Sub Cmd2_Click() Dim Msg, Style, Title, result Msg = "سيتم الآن حذف جدول الصف الثاني! ننصح بتصدير الصف الثاني إلى الثالث أولاً!!! هل ترغب في الاستمرار؟؟" Style = vbInformation + vbYesNo + vbMsgBoxRight Title = "تحذير - حذف جدول الصف الثاني" result = MsgBox(Msg, Style, Title) If result = vbYes Then DoCmd.SetWarnings False DoCmd.DeleteObject acTable, "tbl_student2" DoCmd.RunSQL "SELECT tbl_student.* INTO tbl_student2 FROM tbl_student;" Dim db As DAO.Database Dim tdfSource As DAO.TableDef Dim tdfDest As DAO.TableDef Dim fldSource As DAO.Field Dim fldDest As DAO.Field Set db = CurrentDb Set tdfSource = db.TableDefs("tbl_student") Set tdfDest = db.TableDefs("tbl_student2") For Each fldSource In tdfSource.Fields For Each fldDest In tdfDest.Fields If fldDest.Name = fldSource.Name Then fldDest.Properties("Caption").Value = fldSource.Properties("Caption").Value End If Next fldDest Next fldSource MsgBox "تم حذف جدول الصف الثاني وإحلال محتويات الصف الأول في جدول جديد باسم الصف الثاني", vbOKOnly + vbMsgBoxRight, "إعلام حذف" DoCmd.SetWarnings True ElseIf result = vbNo Then DoCmd.CancelEvent MsgBox "!!! لقد تم إيقاف عملية الحذف", vbOKOnly + vbMsgBoxRight, "إعلام توقف عن الحذف" End If End Sub
أحمد العيسى قام بنشر يوليو 31 الكاتب قام بنشر يوليو 31 معذرة .. تعبتك معايا اكتشفت أن الكود التالى غير متوافق مع 2003 Dim db As DAO.Database
ابوخليل قام بنشر يوليو 31 قام بنشر يوليو 31 1 ساعه مضت, أحمد العيسى said: معذرة .. تعبتك معايا اكتشفت أن الكود التالى غير متوافق مع 2003 Dim db As DAO.Database متوافق ولكن المشكلة لديك في المكتبات جرب استبدل Dim db As DAO.Database بـــ Dim db As Database 1 1
أحمد العيسى قام بنشر أغسطس 1 الكاتب قام بنشر أغسطس 1 Dim db As Database تعطى نفس الخطأ أيضاً ؟ عموماً تغيير رؤوس الجدول لا تأثر على المخرجات المطلوبة ( التقارير ) إذن سأكتفى مؤقتاً بالكود الصحيح ، وشكراً جزيلاً لكم 1
Foksh قام بنشر أغسطس 1 قام بنشر أغسطس 1 15 ساعات مضت, أحمد العيسى said: معذرة .. تعبتك معايا اكتشفت أن الكود التالى غير متوافق مع 2003 Dim db As DAO.Database لعدم وجود اوفيس 2003 ، جرب اضافة المكتبة Microsoft DAO 3.6 Object
أحمد العيسى قام بنشر أغسطس 2 الكاتب قام بنشر أغسطس 2 (معدل) في 1/8/2024 at 11:43, Foksh said: لعدم وجود اوفيس 2003 ، جرب اضافة المكتبة Microsoft DAO 3.6 Object عذراً على التأخر فى الرد لأسباب خارجة تم إضافة المكتبة المذكورة .. لكن بعد ذلك ظهر خطأ جديد تم تعديل أغسطس 2 بواسطه أحمد العيسى
Foksh قام بنشر أغسطس 2 قام بنشر أغسطس 2 8 دقائق مضت, أحمد العيسى said: عذراً على التأخر فى الرد لأسباب خارجة تم إضافة المكتبة المذكورة .. لكن بعد ذلك ظهر خطأ جديد هذا الخلل قد يكون ناتج عن عدم وجود تسمية توضيحية لبعض الحقول ، إن لم أكن مخطئاً .. محاولةً لتلافي وتجاوز الحقول التي ليس لها تسمية توضيحية جرب الكود بالتعديل التالي :- Private Sub Cmd2_Click() Dim Msg, Style, Title, result Msg = "سيتم الآن حذف جدول الصف الثاني! ننصح بتصدير الصف الثاني إلى الثالث أولاً!!! هل ترغب في الاستمرار؟؟" Style = vbInformation + vbYesNo + vbMsgBoxRight Title = "تحذير - حذف جدول الصف الثاني" result = MsgBox(Msg, Style, Title) If result = vbYes Then DoCmd.SetWarnings False DoCmd.DeleteObject acTable, "tbl_student2" DoCmd.RunSQL "SELECT tbl_student.* INTO tbl_student2 FROM tbl_student;" Dim db As DAO.Database Dim tdfSource As DAO.TableDef Dim tdfDest As DAO.TableDef Dim fldSource As DAO.Field Dim fldDest As DAO.Field Set db = CurrentDb Set tdfSource = db.TableDefs("tbl_student") Set tdfDest = db.TableDefs("tbl_student2") For Each fldSource In tdfSource.Fields For Each fldDest In tdfDest.Fields If fldDest.Name = fldSource.Name Then On Error Resume Next Dim prop As DAO.Property Set prop = fldSource.Properties("Caption") If Err.Number = 0 Then fldDest.Properties("Caption").Value = prop.Value End If On Error GoTo 0 End If Next fldDest Next fldSource MsgBox "تم حذف جدول الصف الثاني وإحلال محتويات الصف الأول في جدول جديد باسم الصف الثاني", vbOKOnly + vbMsgBoxRight, "إعلام حذف" DoCmd.SetWarnings True ElseIf result = vbNo Then DoCmd.CancelEvent MsgBox "!!! لقد تم إيقاف عملية الحذف", vbOKOnly + vbMsgBoxRight, "إعلام توقف عن الحذف" End If End Sub 1
أحمد العيسى قام بنشر أغسطس 2 الكاتب قام بنشر أغسطس 2 تمام أصبح بلا أخطاء لكن ما زال رؤوس الجدول الجديد الناتج بأسماء الحقول الإنجليزية وليست بأسماء التسمية التوضيحية
ابوخليل قام بنشر أغسطس 2 قام بنشر أغسطس 2 25 دقائق مضت, أحمد العيسى said: تمام أصبح بلا أخطاء لكن ما زال رؤوس الجدول الجديد الناتج بأسماء الحقول الإنجليزية وليست بأسماء التسمية التوضيحية انت لو وضعت مثالا صغيرا (مرفق) لما احتجت الى كل هذه المشاركات والانتظار على كل حال الحل هو حسب الخطوات: 1- سطر لحذف الجدول 2 2- سطر لاانشاء جدول بواسطة الاستعلام باسم جدول 2 من المصدر جدول1 1
ابو جودي قام بنشر أغسطس 2 قام بنشر أغسطس 2 24 دقائق مضت, ابوخليل said: على كل حال الحل هو حسب الخطوات: 1- سطر لحذف الجدول 2 2- انشاء جدول بواسطة الاستعلام باسم جدول 2 من جدول1 بعد اذن استاذى الجليل ومعلمى القدير و والدى الحبيب الاستاذ @ابوخليل حياكم الله وبياكم الموضوع به تحد كبير فعلا على استحياء دعنى اوضح لك الامور لتتضح الرؤية من نقاط ضعف الاكسس انه لا يقوم بعمل نسخ الجدول بخصائص الحقول بداخله ولكن يتم ذلك بهيكل الجدول فقط وبيانات الحقول يعنى ابه الكلام دة ببساطة سوف اشرح على الصور الاتية الجزء المأطر بالازرق والذى يحمل العنوان Description ( Optional ) والذى يتم فيه كتابة وصف لكل حقل والجزء المأطر بالاسفل باللون البنفسجى وهو الـ Caption لكل حقل هذان يعدان من خصائص الحقول داخل الجدول عند عمل حذف للجدول الثانوى ونسخ الجدول الاساسى لا يأتى الجدول الجديد وليد عملية الاستنساخ بهذه الخصائص لاعداد الحقول فى الجدول الاساسى ولكن ولكن ولكن والله اعلم اعتقد قد يكون لها حل برمجى وانا ان شاء الله اعمل على ذلك 1
Foksh قام بنشر أغسطس 2 قام بنشر أغسطس 2 قد يكون الترتيب التالي أفضل 1. حذف الجدول المستهدف كاملاً ، 2. إنشاء نسخة ثانية من الجدول المصدر ، 3. إعادة تسمية الجدول الجديد بالاسم المطلوب ، 4. جملة استعلام حذف جميع السجلات في الجدول الجديد ، وهذا كفيل بإبقاء التسمية التوضيحية موجودة كما في الجدول الأصل ( المصدر ) * وجهة نظر قابلة للنقاش 1 1
ابو جودي قام بنشر أغسطس 2 قام بنشر أغسطس 2 1 دقيقه مضت, Foksh said: 2. إنشاء نسخة ثانية من الجدول المصدر ، لو ركزت شوية فى كلامى 8 دقائق مضت, ابو جودي said: من نقاط ضعف الاكسس انه لا يقوم بعمل نسخ الجدول بخصائص الحقول بداخله ولكن يتم ذلك بهيكل الجدول فقط وبيانات الحقول بدون نقاش انت جرب وشوف علشان تتأكد
ابو جودي قام بنشر أغسطس 2 قام بنشر أغسطس 2 شوف يا سيد فوكش انا فعلا والله برد وشغال فى حجات تخص عملى تقريبا مضغوط قليلا والموضوع ده عاوز له روقان لو عاوز الفكرة اللى بتدور فى مخيلتى نظريا ارجع لموضوع الجداول بتاعك بتاع انشاء الجدول الديناميكى فى جزء يخص خضائص الحقل عند انشاء الجدول الجديد ده شق الاجابة الثانى والمطلوب لتحقيق اجابة السؤال الشق الاول للوصول لتلك المرحلة عمل دالة لتمرير اسم الجدول الاساسى االيها بتقوم بعمل دوران على الحقول لمعرفة وتيديل الاتى فى مصفوفة مثلا اسم الحقل نوع الحقل وصف الحقل تسمية الحقل ويتم تمرير البسانات دى للكود بتاعك اللى اتكلمنا عنه فى الشق الاول لفة رخمة وعاوزة روقان بجد
أحمد العيسى قام بنشر أغسطس 2 الكاتب قام بنشر أغسطس 2 عملت حل سابقاً لهذا الموضوع وهو إنشاء نسخة أخرى جديدة من الجدول المستهدف ( البنية فقط ) فى هذه الحالة التسمية سوف تكون موجودة ثم حذف محتوى الجدول بهذا السطر ( وسوف يكون التسمية موجودة بعد الحذف ) إذا كان تم ملئه DoCmd.RunSQL "DELETE tbl_Student2.* FROM tbl_Student2;" المشكلة فى السطر التالى فهو يقوم بحذف التسميات العربية عندما نقوم بنسخ القديم فى الذى تم تفريغه DoCmd.RunSQL "SELECT tbl_student.* INTO tbl_student2 FROM tbl_student;" أما فى عدم إرفاقى قاعدة البيانات السبب هو أنه تم عملها على 2003 كما أن بها الكثير من الخصوصيات
Foksh قام بنشر أغسطس 2 قام بنشر أغسطس 2 15 دقائق مضت, ابو جودي said: لو ركزت شوية فى كلامى بدون نقاش انت جرب وشوف علشان تتأكد اعتذر فعلاً ، لإن الصفحة كانت مفتوحة عند رد معلمي وأستاذي أبو خليل ولم أقم بالتحديث ( متابع من الجوال 😅 ) 12 دقائق مضت, ابو جودي said: شوف يا سيد فوكش انا فعلا والله برد وشغال فى حجات تخص عملى تقريبا مضغوط قليلا والموضوع ده عاوز له روقان لو عاوز الفكرة اللى بتدور فى مخيلتى نظريا ارجع لموضوع الجداول بتاعك بتاع انشاء الجدول الديناميكى فى جزء يخص خضائص الحقل عند انشاء الجدول الجديد ده شق الاجابة الثانى والمطلوب لتحقيق اجابة السؤال الشق الاول للوصول لتلك المرحلة عمل دالة لتمرير اسم الجدول الاساسى االيها بتقوم بعمل دوران على الحقول لمعرفة وتيديل الاتى فى مصفوفة مثلا اسم الحقل نوع الحقل وصف الحقل تسمية الحقل ويتم تمرير البسانات دى للكود بتاعك اللى اتكلمنا عنه فى الشق الاول لفة رخمة وعاوزة روقان بجد كلامك صحيح ، والروقان هييجي بعد ما اعمل ريفريش لكل صفحة علشان أحفظ خط الرجعة 🤣😂 جايلك يا حبيبي جايلك ، بس أما أروووق
أفضل إجابة ابوخليل قام بنشر أغسطس 2 أفضل إجابة قام بنشر أغسطس 2 5 ساعات مضت, أحمد العيسى said: أما فى عدم إرفاقى قاعدة البيانات السبب هو أنه تم عملها على 2003 كما أن بها الكثير من الخصوصيات 2003 .. جميع الاصدارات اللاحقة تتعامل معه على كل حال اليك الحل : بعد حذف الجدول table2 خلف الزر الصق هذا السطر : DoCmd.CopyObject , "table2", acTable, "table1" على اعتبار table1 هو الجدول الأساس وحسب تسمياتك في مشروعك سيكون الكود كاملا : DoCmd.SetWarnings False DoCmd.DeleteObject acTable, "tbl_Student2" DoCmd.CopyObject , "tbl_Student2", acTable, "tbl_Student" DoCmd.SetWarnings True 2
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.