اذهب الي المحتوي
أوفيسنا

ابو جودي

أوفيسنا
  • Posts

    6,503
  • تاريخ الانضمام

  • Days Won

    167

كل منشورات العضو ابو جودي

  1. الحل انك تعمل سطب ل جوجل درايف ع الجهاز وضع قاعدة البيانات فى مجلد جوجل الذى تم تخصيصة للمزامنة فى تلك الحالة انت مسكت العصا من المنتصف شغال Local من المجلد عادى النت قطع او الكهرباء وقت ما الدنيا تظبط بمجرد ما تتم المزامنة للمجلد تترفع القاعدة ما فى حل غير كده يا اما بقه تشترك فى سحابة اللكترونية بتدعم الاكسس وادفع كتيررررررر
  2. فى حل سيب الحقل ده للاكسس وملكش دعوه بيه ولا تبض له اصلا واعمل ترقيم تلقائى فى الاستعلام وخليك دايما استخدم الاستعلامات كمصادر للنماذج والتقارير افضل بس الترقيم لا تعتمد عليه ده خيكون مجرد سيريال فقط ليس الا الا اذا شئ تانى انت تخلق حقل جديد وتعمل انت الترقيم برمجى مع كل سجل
  3. أستاذ @سامر محمود ابشر لكن الموضوع كبير وبيأخذ وقت والاستاذ @kkhalifa1960 شغال عليه .
  4. وزى ما بينحكى لو صبر القاتل ع القتيل كان مات لوحده والله انا وانا اكتب لك فى الكود انت دخلت تستعجلنى ما شي يا عم @أمير ادم منتظر ردك بعد التجربة
  5. اتفضل فى زر استدعاء انتاج امس ضع الكود الاتى ' Check if the form is not in a new record state If Not Me.NewRecord Then ' Refresh the form to ensure current data is saved Me.Refresh ' Disable warnings to suppress confirmation messages DoCmd.SetWarnings False ' Open the first update query with DISTINCT DoCmd.OpenQuery "qryDoAllSaelsExchDistinct" ' Open the second update query with DISTINCT DoCmd.OpenQuery "qryDoAllSaelsExchTowDistinct" ' Enable warnings back DoCmd.SetWarnings True ' Requery subforms to reflect the changes Frm_AllSaels_Exch_Subform.Requery AllSaels_ExchTow.Requery ' Display a success message MsgBox "Record updated successfully!", vbInformation Else ' Display a message if trying to update a new record MsgBox "Please save the current record before updating.", vbExclamation End If وقم بعمل استعلامين جملة SQL الاستعلام الاول ولا تنسى حفظ الاستعلام باسم : qryDoAllSaelsExchDistinct INSERT INTO AllSaels_Exch ( Odb_ID, Odb_DateMov, Odb_CodMont, Odb_NameItem, Odb_Unet, Odb_UnetEn, Odb_Qty, Odb_ValueAms, Odb_Qtypro, Odb_QtyAms, Odb_Valuetotal, Odb_QtySham, Odb_QtySil, Odb_Skv, Odb_Moamil, Odb_Sv, Odb_Balance, Odb_Haly ) SELECT [Forms]![Frm_IDOrdaerPrimr]![IDNo] AS Odb_ID, [Forms]![Frm_IDOrdaerPrimr]![DatOr] AS Odb_DateMov, AllSaels_Exch.Odb_CodMont, AllSaels_Exch.Odb_NameItem, AllSaels_Exch.Odb_Unet, AllSaels_Exch.Odb_UnetEn, AllSaels_Exch.Odb_Qty, AllSaels_Exch.Odb_ValueAms, AllSaels_Exch.Odb_Qtypro, AllSaels_Exch.Odb_QtyAms, AllSaels_Exch.Odb_Valuetotal, AllSaels_Exch.Odb_QtySham, AllSaels_Exch.Odb_QtySil, AllSaels_Exch.Odb_Skv, AllSaels_Exch.Odb_Moamil, AllSaels_Exch.Odb_Sv, AllSaels_Exch.Odb_Balance, AllSaels_Exch.Odb_Haly FROM AllSaels_Exch WHERE AllSaels_Exch.Odb_DateMov = (SELECT MAX(Odb_DateMov) FROM AllSaels_Exch); جملة SQL الاستعلام الاول ولا تنسى حفظ الاستعلام باسم : qryDoAllSaelsExchTowDistinct INSERT INTO AllSaels_ExchTow (Odb_ID, Odb_Datr, Odb_Desc, Odb_Unet, Odb_QtyDay, Odb_VuliDay, Odb_QtyAms, Odb_VuliAms) SELECT [Forms]![Frm_IDOrdaerPrimr]![IDNo] AS Odb_ID, [Forms]![Frm_IDOrdaerPrimr]![DatOr] AS Odb_Datr, Odb_Desc, Odb_Unet, Odb_QtyDay, Odb_VuliDay, Odb_QtyAms, Odb_VuliAms FROM AllSaels_ExchTow WHERE Odb_Datr = (SELECT MAX(Odb_Datr) FROM AllSaels_ExchTow); بس يا سيدى خلصت الحكاية شوقت سهله ازاى روح ع النموذج سم باسم الله وجرب
  6. يا استاذ @kkhalifa1960 علشان كده فى الحالات دى بأفضل الاضافة المباشرة ع الجدول من الريكورد ست ومالها بس الاكواد ما هى زى العسل .... فله وشمعه منوره وبتعطى الاريحية الواحد يتخيل وينام ويصحى وياكل فى الكود ويعمل كل للى نفسه فيه براحته والله نفسى انام بقالى 3 ايام صاحى حد عنده كود يعمل شت دون للبنى ادمين ويكسب فى صواب
  7. طيب ممكن بعد اذن استاذى الجليل ومعلمى القدير و والدى الحبيب الاستاذ @ابوخليل اضيف شئ صغنون من واقع تجربة عملية سابقة لى اعتقد الاستعلام بدون اقواس بالشكل الاتى سوف يكون افضل لان استخدام الأقواس ([]) في أسماء الحقول قد يؤدي إلى مشكلات في بعض الحالات وهذا عن تجربة شخصية ولا يتطوع او يتبرع أحد ويسألنى عن السبب لأننى فعلا لا أعرف SELECT Data1.ID, Data1.namee, Data1.edara, Data1.woork, Data1.egraa FROM Data1 WHERE (Data1.namee Like "*" & [Forms]![Data1]![Combo17] & "*") AND (Data1.egraa Like "*" & [Forms]![Data1]![Combo19] & "*");
  8. يعنى البيانات اللى فى الجدول AllSaels_Exch والجدول AllSaels_ExchTow ثابتين لا يتغيروا وبس تريد تكرارهم مرة أخرى للجدواول بتاريخ اليوم الجديد ؟
  9. طيب وهذه فوكيره ثغنونه لو كان مصدر التحرير والسرد استعلام خارجى DataUp3.rar
  10. هههههههههه لسه احكى يا جبل ما يهزك ريح ولكن يبدو .. هههههههههههههههههههههههههههههه ...... والله اشتجنا انا بس لاقيتك ساكت قلت فى نفسى لا اسكت الله لك حسا يا استاذ @Moosak وكان لازم ولابد وحتما نهز الورد يا ورد بس جت على راسى استاذى الجليل ومعملى القدير و والدى الحبيب الاستاذ @ابوخليل تصدر لك ودافع عنك وزعق لى
  11. يعلم الله كم احب انا الاستاذ @Moosak ولكن اهز الورد ظللت اهز و اهز واهز ولكن مثل ما ينحكى يا جبل ما يهزك ريح
  12. شكرا اختنا الغالية @safaa salem5 جزاكم الله خيرا ولكن اهمس اليك لتعلمى الاستاذ ابوخليل انه فى مقام الوالد عندما يذكر يتقدمنا جميعا ومثله الاستاذ جعفر تذكرى ذلك هؤلاء اعمدة المنتدى هم اساتذتنا جميعا ونتعلم منهم وعلى ايديهم لا ينبغى ان يتقدم اى اسم مهما كان اسم معلمينا العظماء
  13. وحتى تزيد الحيره اعتمدت فى هذا الكود على تعريف متغير نصى ليتعامل مه الكلمات المحجوزة keywords = "FROM;WHERE;GROUP BY;HAVING;ORDER BY;" والتعديلات كاملة تكون Sub ExtractTableNameFromRowSource(cbo As ComboBox) ' Check if RowSource is not empty If cbo.rowSource = "" Then MsgBox "RowSource is empty", vbExclamation, "Warning" Exit Sub End If ' Extract table name from RowSource Dim tableName As String tableName = GetTableNameFromRowSource(cbo.rowSource) ' Remove trailing semicolon if exists If Right(tableName, 1) = ";" Then tableName = Left(tableName, Len(tableName) - 1) End If ' Display the table name without additional message MsgBox tableName, vbInformation, "Table Information" End Sub Function GetTableNameFromRowSource(rowSource As String) As String ' Define reserved keywords Dim keywords As String keywords = "FROM;WHERE;GROUP BY;HAVING;ORDER BY;" ' Find the part that starts with "FROM" in RowSource Dim fromIndex As Integer fromIndex = InStr(1, rowSource, "FROM ", vbTextCompare) ' Make sure the word "FROM" is in RowSource If fromIndex = 0 Then MsgBox "RowSource does not contain the word 'FROM'", vbExclamation, "Warning" Exit Function End If ' Extract the part of the text that contains the table name after "FROM" Dim tableNamePart As String tableNamePart = Mid(rowSource, fromIndex + Len("FROM ")) ' Check for reserved keywords and remove them Dim keywordIndex As Integer keywordIndex = InStr(1, tableNamePart, keywords, vbTextCompare) ' Find the position of the first space, semicolon, or keyword after the table name Dim delimiterIndex As Integer delimiterIndex = IIf(keywordIndex > 0, keywordIndex, _ IIf(InStr(1, tableNamePart, " ") > 0, InStr(1, tableNamePart, " "), _ IIf(InStr(1, tableNamePart, ";") > 0, InStr(1, tableNamePart, ";"), Len(tableNamePart) + 1))) ' If a space, semicolon, or keyword is found, extract the part before it GetTableNameFromRowSource = Trim(Left(tableNamePart, delimiterIndex - 1)) End Function طيب ما الفروق بين فكرة استاذ موسى وافكاارى المعقدة الطريقتان تقومان بالمهمة المطلوبة ولكن بطرق مختلفة. الافضلية تعتمد على احتياجات البرنامج الخاص بك وتفضيلاتك الشخصية. إليك بعض الملاحظات: الكفاءة والأداء: فكرة الاستاذ @Moosak (GetTableNameFromComboBox) تستخدم تعبيرات شرطية لفحص نوع RowSourceType وتقوم بتفحص الـ "FROM" وتقوم بإزالة الأحرف الزائدة. فكرتى (GetTableNameFromRowSource) تحتوي على عدد قليل من الخطوات وتقوم بفحص كلمة FROM في الاستعلام واستخراج الجدول المرتبط بها. كما تقوم بإزالة أي مفتاح آخر (مثل "ORDER BY") وباقى الكلمات المجدوزة..... الخ نفس الكفاءة ونفس الاداء القابلية للقراءة والصيانة: فكرة الاستاذ @Moosak قد تكون أقل وضوحًا بسبب الاستخدام المكثف للتعبيرات الشرطية. بعكس فكرتى تكون أكثر وضوحًا في فهم الخطوات بسبب استخدام التعليقات والتسميات . المرونة وإعادة الاستخدام: فكرة الاستاذ @Moosak تقوم بكل شيء في نطاق واحد دون استخدام دوال فرعية فكرتى تحتوي على دالة فرعية (GetTableNameFromRowSource) يمكن استخدامها بشكل مستقل لأغراض أخرى إذا لزم الأمر . يعنى ممكن تكون أفكارى معقدة وقت كتابة الكود ولكن أحاول أن أكون ضاحب نظرة مستقبلية عند محاولة الانتفاع منه . وفى الاخير يا والدى الحبيب من الجيد أن تختار الدالة التي تلبي أفضل احتياجات مشروعك وتفضيلاتك الشخصية . ولكن انا لو مكانك اعبى المكتبة بمرفق الاستاذ @Moosak لانه الاجمل
  14. على العموم فى موديول ضع الكود الاتى Public gMouseOver As Boolean Public gOriginalWidth As Single Public gOriginalHeight As Single Public Sub ResizeButtonOnMouseOver(btn As Access.CommandButton) gMouseOver = True If gOriginalWidth = 0 Then gOriginalWidth = btn.Width gOriginalHeight = btn.Height End If btn.Width = gOriginalWidth * 1.5 btn.Height = gOriginalHeight * 1.5 End Sub Public Sub RestoreButtonSizeOnMouseLeave(btn As Access.CommandButton) If gMouseOver Then btn.Width = gOriginalWidth btn.Height = gOriginalHeight gMouseOver = False Else Exit Sub End If End Sub ولابد فى النموذج من عمل Box حول الازرار وليكن اسمه BoxBtn فى الحدث عند مرور الماوس على اى زر تريد تنفذ الحدث عليه ضع الكود ResizeButtonOnMouseOver Me.BtnName ثم فى الحدث عند مرور الماوس للـ BtnBox RestoreButtonSizeOnMouseLeave Me.BtnName طبعا استبدل BtnName باسم زر الامر الحالى عند المرور الماوس
  15. ۈعـَلـْيگمّ السَلٱمٌ -ۈرحـْمّـٌة ٱللـّہ ﯙبُرگـّاتہ انا ممكن انفذ لك طلبك بالضبط لكن مش حيكون ظريف ممكن ترفق قاعدة بيانات فيها النموذج الرئيسى بالازرار فقط بدون اى اكواد علشان اكون فاهم شكل النموذج ايه وممكن اقول لك على فكرة افضل
  16. هات كل ما عندكم استاذى الجليل ومعلمى القدير و والدى الحبيب نتضرع فقط الى الله عزوجل ان يجعلنا عند حسن ظنكم وان لا يحعلنا نقصر معكم فمهما قدم اليكم كل طلاب العلم ما يملكون لن يوفيكم هذا حقكم مثقال ذرة
  17. مشاركتى مع الاستاذ @Moosak Sub ExtractTableNameFromRowSource(cbo As ComboBox) ' Check if RowSource is not empty If cbo.rowSource = "" Then MsgBox "RowSource is empty", vbExclamation, "Warning" Exit Sub End If ' Extract table name from RowSource Dim tableName As String tableName = GetTableNameFromRowSource(cbo.rowSource) ' Remove trailing semicolon if exists If Right(tableName, 1) = ";" Then tableName = Left(tableName, Len(tableName) - 1) End If ' Display the table name without additional message MsgBox tableName, vbInformation, "Table Information" End Sub Function GetTableNameFromRowSource(rowSource As String) As String ' Find the part that starts with "FROM" in RowSource Dim fromIndex As Integer fromIndex = InStr(1, rowSource, "FROM ", vbTextCompare) ' Make sure the word "FROM" is in RowSource If fromIndex = 0 Then MsgBox "RowSource does not contain the word 'FROM'", vbExclamation, "Warning" Exit Function End If ' Extract the part of the text that contains the table name after "FROM" Dim tableNamePart As String tableNamePart = Mid(rowSource, fromIndex + Len("FROM ")) ' Find the position of the first space or semicolon after the table name Dim delimiterIndex As Integer delimiterIndex = InStr(1, tableNamePart, " ") ' Check for semicolon and remove it Dim semicolonIndex As Integer semicolonIndex = InStr(1, tableNamePart, ";") ' Check for "ORDER BY" and remove it Dim orderByIndex As Integer orderByIndex = InStr(1, tableNamePart, "ORDER BY", vbTextCompare) If delimiterIndex > 0 Then ' If a space is found, extract the part before it GetTableNameFromRowSource = Trim(Left(tableNamePart, delimiterIndex - 1)) ElseIf orderByIndex > 0 Then ' If "ORDER BY" is found, extract the part before it GetTableNameFromRowSource = Trim(Left(tableNamePart, orderByIndex - 1)) End If End Function المرفق .. DatabaseUp8.rar
  18. بالنسبة لى سأحقق المطلوب بهذة الدالة Sub GetTableName(cbo As ComboBox) ' Check if the query is empty If cbo.RowSource = "" Then MsgBox "No specific query for this combo box", vbExclamation, "Warning" Exit Sub End If ' Check if the query contains the word "FROM" If InStr(1, cbo.RowSource, "FROM ", vbTextCompare) = 0 Then MsgBox "The query does not contain the word 'FROM'", vbExclamation, "Warning" Exit Sub End If ' Check if the query contains a comma before the word "FROM" Dim fromIndex As Integer fromIndex = InStr(1, cbo.RowSource, "FROM ", vbTextCompare) If InStr(1, Mid(cbo.RowSource, 1, fromIndex - 1), ";") > 0 Then MsgBox "Invalid query, it contains a comma before 'FROM'", vbExclamation, "Warning" Exit Sub End If ' Get the full text of the query Dim queryText As String queryText = cbo.RowSource ' Find the position of "FROM" in the query Dim startIndex As Integer startIndex = InStr(1, queryText, "FROM ", vbTextCompare) + Len("FROM ") ' Find the position of the semicolon after the table name Dim endIndex As Integer endIndex = InStr(startIndex, queryText, ";") ' Get the table name Dim tableName As String tableName = Mid(queryText, startIndex, endIndex - startIndex) ' Remove extra spaces tableName = Trim(tableName) MsgBox "Table Name: " & tableName, vbInformation, "Table Information" End Sub
  19. السلام عليكم ورحمة الله تعالى وبركاته نظرا للطلب والتساؤلات الكثيرة حول الموضوع او نقاط فرعيه منه قاصدا من ذلك أن يكون الموضوع شاملا ومرجعا للراغبين فى ذلك والدراسبن اليكم بناء القاعدة والذى اتمنى على الله تعالى ان يبدأ البناء وينتهى بشكل احترافى بقدر الإمكان وسوف نبدأ من الصفر تباعا ان شاء الله سوف يتم تحديث الموضوع تباعا الموضوع بأمر الله سوف اضع له الخطوط العريضة طبقا للمؤسسة التى اعمل بها لاننى أصلا سوف اقوم بقاعدة البيانات لمؤسستى وبقدر الإمكان سوف أضع فى الحسبان ان يكون التصميم عام بقدر الإمكان ليتناسب ويتماشى مع الجميع ومع رغباتهم بقدر الإمكان اهلا بكل من يريد المشاركة فى ادراة الموضوع والافكار والتعديل او الاضافة و ...... مبدئيا خلونا نتفق وقتى ضيق فى الفترة المقبلة لما انا مقدم عليه فلذلك ارجو الاعتذار مقدما ان لم التفت الى اى تساؤلات والتى وإن حدث سوف يتم تأجيلها حتى ينتهى مشروع اعداد التطبيق لمؤسستى تماما ان شاء الله بسم الله وعلى بركة الله بداية المشروع اول شئ تصيد وتسجيل الاخطاء بجدول وده وظيفته تسجيل الحطأ باسم الحدث أو الدالة المستخدمة فى الكود عند تنفيذ امر ما ورقم الخطا وصفه للمساعدة مستقبلا فى الوقوف على اماكن الاخطاء لعمل الصيانة اللازمة طبعا تم التطرق اليه فى هذا الموضوع: ويمكنكم الذهاب اليه والمتابعة من هنا طيب حلو جدا جدا وعلشان انا هبدأ بالأكواد ملاحظات هامة جدا جدا جدا جدا لبداية صحيحة واحترافيه : كتابة كود احترافي تتطلب ممارسات جيدة واتباع مبادئ برمجية صحيحة. فيما يلي بعض النصائح التي يمكن أن تساعدك في كتابة كود احترافي: توضيح الكود: استخدم تعليقات لشرح الجزء العلوي من الكود وللأمور المعقدة. اختر أسماء مفيدة وواضحة للمتغيرات والدوال تدل على وظائفها التى تمت كتابتها من اجلها. التنظيم: استخدم الهندسة المعمارية لتنظيم البرنامج إلى وحدات صغيرة وقابلة لإعادة الاستخدام. قم بتقسيم البرنامج إلى وحدات ووظائف مستقلة. الأداء: ابتعد عن الأكواد المكررة وقدّم الأكواد القابلة لإعادة الاستخدام في وحدات. حافظ على الأداء بتجنب العمليات الزائدة غير الضرورية. اختبار الوحدات: قم بكتابة اختبارات للتأكد من أن وحدات الكود الخاصة بك تعمل كما هو متوقع. الأمان: تحقق دائمًا من صحة البيانات الواردة والخارجة من الدوال. تفادى استخدام الأكواد المعرضة لثغرات أمان. تحسين الأداء: استخدم الهندسة العكسية لتحسين الأداء. ابحث عن فرص لتحسين الكفاءة والسرعة. استخدام التعليمات البرمجية النظيفة: ابتعد عن استخدام المتغيرات العالمية عندما لا تكون ضرورية. تجنب الأكواد التي تعتمد على التبديلات الطويلة. توثيق الكود: وفر توثيقًا جيدًا للكود ليسهل على المطورين الآخرين أو نفسك فهم كيف يعمل البرنامج. متابعة المعايير: اتبع معايير البرمجة المتعارف عليها . التحسين المستمر: كن مستعدًا لتحسين الكود الخاص بك بناءً على التعلم وتغييرات متطلبات المشروع. الالتزام بتلك المبادئ يمكن أن يساعدك في كتابة كود أكثر احترافية وقابل للصيانة. حلو الكلام وكل ده هيبان بقدر المستطاع فى التعليمات البرمجية التى سوف تتم تباعا يمكنك استخدام البادئات التالية لتسمية العناصر والكائنات بشكل منظم ويجعل الشيفرة أكثر وضوحًا. البادئات تعتمد على النوع أو الدور الذي تقوم به العناصر: وعلى سبيل المثال وليس الحصر المتغيرات: int للأعداد الصحيحة. dbl للأعداد العشرية. str للنصوص. bool للقيم البولية اى True , False أو Yes , No . Dim intCounter As Integer Dim dblAmount As Double Dim strName As String Dim boolIsValid As Boolean المصفوفات: arr للمصفوفات. Dim arrNames() As String الدوال: Function للدوال التي تعيد قيمة. Sub للإجراءات (دوال بدون إرجاع قيمة). Function CalculateTotal() As Double Sub DisplayMessage() الكائنات: frm للنماذج (Forms). rpt للتقارير (Reports). tbl للجداول (Tables). qry للاستعلامات (Queries). cls للكائنات أو الفئات لتعريف الكلاسات (Classes). bas وحدات الشيفرة- الوحدات النمطية (Modules). tbl للجداول (Tables). qry للاستعلامات (Queries). Dim frmCustomer As Form Dim rptSales As Report Dim tblData As TableDef Dim qryFilteredData As QueryDef الثوابت: c للثوابت. Const cMaxValue As Integer = 100 المتغيرات العامة: g للمتغيرات العامة. Public gCounter As Integer المتغيرات المؤقتة: temp للمتغيرات المؤقتة. Dim tempValue As Integer التعليقات: REM لتعليقات الشيفرة. REM هذا تعليق لشرح الشيفرة الأشكال والعناصر الرسومية: btn للأزرار (Buttons). lbl للتسميات (Labels). txt لحقول النص (Textboxes). chk لمربعات الاختيار (Checkboxes). القوائم والمراقبين: cmb لقائمة الاختيار (Comboboxes). lst لقوائم الاختيار (Listboxes). cb لمراقبات الصندوق (Checkboxes). الكائنات الأخرى: app لكائن التطبيق (Application). cnn لكائن الاتصال (Connection). doc لكائن المستند (Document). الحقول والأعمدة: fld لحقول البيانات (Fields). col لعمود البيانات (Column).
  20. انا اقصد المرفق الاصلى الاجنبى قبل اى تعديل من حضرتك يا افندم
×
×
  • اضف...

Important Information