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

كل الانشطه

هذه الصفحة تحدث تلقائياً

  1. الساعة الأخيرة
  2. يوجد حل هو تحميل في الخلفية مع الانتهاء من المعادلات من غير اعادة تحميل ولا تأثر عند التنقل بين السجلات فقط تمرير الى نموذج غير منظم بستدلال المطلوب للجلب وهذا مثال وفيه تحسينات ان لا يثقل في تنقل بين السجلات والحركة يعرض مجموعات نفترض 10 لكل حركة ويجب تخفيف الرسومات 1- مع الفلترة عرض 6 مجموعات غير منضم بسيطه من غير DOA , SQL 2- اضافة آلية وهمية لسجلات 100000 الى تخلص من مساحة التخزين قاعدة ويمكن تغير عدد السجلات في الكود وتجربة 3- تحسين صندوق الرسائل دائما في الامام كل النوافذ 4- جعل الخلفية في الخلف لكل النوافذ ولكن ناقص تحميل المرفق https://www.mediafire.com/file/akal3951l75k02o/Gruop_Record_IN_Form_v1.2.rar/file ======================================================= تجربة لتحسين طريقة عرض السجلات من غير بطىء وتجنب اعادة التحميل الذي يؤثر عند قرب انتهاء مساحة تخزين القاعدة وتحميلات ويوجد حلول اخرى
  3. طيب دى فكرة تانى لو لا تريد عمل جداول مؤقته او حتى جدول ثابت لمعالجة موضوع التواريخ وان كنت لا تريد كذلك الاعتماد على جداول مساعدة كالجدول الاخير : tbl2 الكود Public Sub GenerateSafeUnionQuery() Dim db As DAO.Database Dim rs As DAO.Recordset Dim dtmStart As Date, dtmEnd As Date, dtmCurrent As Date Dim lngUserID As Long Dim strSQL As String Dim strOneLine As String Dim bolFirst As Boolean Set db = CurrentDb Set rs = db.OpenRecordset("SELECT user_id, startA, endA FROM tbl1", dbOpenSnapshot) bolFirst = True Do Until rs.EOF lngUserID = rs!user_id dtmStart = Nz(rs!startA, 0) dtmEnd = Nz(rs!endA, 0) If IsDate(dtmStart) And IsDate(dtmEnd) And dtmStart <= dtmEnd Then For dtmCurrent = dtmStart To dtmEnd ' استخدام جدول فعلي لتجنب التكرارات strOneLine = "SELECT " & lngUserID & " AS user_id, #" & Format(dtmCurrent, "yyyy-mm-dd") & "# AS dateField FROM (SELECT TOP 1 * FROM tbl1)" If bolFirst Then strSQL = strOneLine bolFirst = False Else strSQL = strSQL & vbCrLf & "UNION ALL" & vbCrLf & strOneLine End If Next dtmCurrent End If rs.MoveNext Loop rs.Close Set rs = Nothing ' حذف الاستعلام القديم (لو موجود) On Error Resume Next db.QueryDefs.Delete "qryUnioUserDates" db.QueryDefs.Delete "qryFinalUserDates" On Error GoTo 0 ' إنشاء الاستعلام الأساسي UNION db.CreateQueryDef "qryUnioUserDates", strSQL ' إنشاء استعلام مبني عليه db.CreateQueryDef "qryFinalUserDates", "SELECT * FROM qryUnioUserDates;" ' إظهار الاستعلام مباشرة DoCmd.OpenQuery "qryFinalUserDates", acViewNormal MsgBox "تم إنشاء الاستعلامين بنجاح، والاستعلام النهائي تم فتحه.", vbInformation End Sub أفكار أخرى لا تعتمد على جدول مساعد او جدول مؤقت او حتى جدول ثابت الكود الاساسى فى وحده نمطية عامة Private Const adInteger = 3 Private Const adDBTimeStamp = 135 Private Const adOpenStatic = 3 Private Const adLockOptimistic = 3 Public Function GetSplitDatesRecordset() As Object Dim db As DAO.Database Dim rsSource As DAO.Recordset Dim rsTemp As Object Dim arrDates() As String Dim i As Long Dim lngUserID As Long Dim strDates As String Set rsTemp = CreateObject("ADODB.Recordset") rsTemp.Fields.Append "user_id", adInteger rsTemp.Fields.Append "SingleDate", adDBTimeStamp rsTemp.CursorType = adOpenStatic rsTemp.LockType = adLockOptimistic rsTemp.Open Set db = CurrentDb Set rsSource = db.OpenRecordset("SELECT user_id, GetDatesBetween([startA], [endA]) AS DateList FROM tbl1", dbOpenSnapshot) Do While Not rsSource.EOF lngUserID = rsSource!user_id strDates = Nz(rsSource!DateList, "") If Len(strDates) > 0 Then arrDates = Split(strDates, " | ") For i = LBound(arrDates) To UBound(arrDates) If IsDate(arrDates(i)) Then rsTemp.AddNew rsTemp!user_id = lngUserID rsTemp!SingleDate = CDate(arrDates(i)) rsTemp.Update End If Next i End If rsSource.MoveNext Loop rsSource.Close Set rsSource = Nothing Set db = Nothing If Not rsTemp.EOF Then rsTemp.MoveFirst Set GetSplitDatesRecordset = rsTemp End Function Public Sub LoadDatesIntoForm(frm As Object) Dim rs As Object Set rs = GetSplitDatesRecordset() If rs.EOF Then MsgBox "لا توجد تواريخ!", vbExclamation Exit Sub End If If TypeOf frm Is Form Then Set frm.Recordset = rs ElseIf TypeOf frm Is Access.SubForm Then Set frm.Form.Recordset = rs End If End Sub Public Sub LoadDatesIntoListBox(frm As Form, strListBoxName As String) Dim rs As Object Dim strRowSource As String Dim ctl As Control Set ctl = frm.Controls(strListBoxName) Set rs = GetSplitDatesRecordset() If rs.EOF Then ctl.RowSource = "" Exit Sub End If Do Until rs.EOF strRowSource = strRowSource & rs!user_id & ";" & Format(rs!SingleDate, "yyyy-mm-dd") & ";" rs.MoveNext Loop ctl.RowSourceType = "Value List" ctl.ColumnCount = 2 ctl.ColumnWidths = "2cm;3cm" ctl.RowSource = strRowSource End Sub ولكن تعتمد على احدى الحيلتين الاولة نموذج مستمر غير منضم به حقلين الاول : txtuserId الثانى: txtSingleDate وعند تحمل النموذج نستخدم الاستدعاء التالى Private Sub Form_Load() Me.txtuserId.ControlSource = "user_id" Me.txtSingleDate.ControlSource = "SingleDate" LoadDatesIntoForm Me End Sub الحيلة الثانية نموذج غير منضم به مربع قيم مثلا باسم : lstDates وعند تحمل النموذج نستخدم الاستدعاء التالى Private Sub Form_Load() LoadDatesIntoListBox Me, "lstDates" End Sub هذا كل ما خطر على بالى من افكار
  4. Yesterday
  5. اذا الموضوع اسهل الان بوجود هذا الجدول المساعد مباشرة وبدون اى اكواد ممكن عمل الاستعلام التالى SELECT tbl1.user_id, tbl2.dateField FROM tbl1, tbl2 WHERE (((tbl2.dateField) Between [tbl1].[startA] And [tbl1].[endA])) ORDER BY tbl1.user_id, tbl2.dateField; ممكن الجدول المساعد tbl2 يتم عمل البيانات بداخله ديناميكا ليحتوى على كل تواريخ العام منذ بداية العام الى نهايته مثلا من خلال الكود التالى Public Sub PopulateDateTable(Optional ByVal dtmStartDate As Date = 0, Optional ByVal dtmEndDate As Date = 0) Dim db As DAO.Database Dim rs As DAO.Recordset Dim dtmDate As Date Dim lngYearNow As Long ' الحصول على السنة الحالية lngYearNow = Year(Date) ' تعيين القيم الافتراضية إذا لم يتم تمريرها If dtmStartDate = 0 Then dtmStartDate = DateSerial(lngYearNow, 1, 1) If dtmEndDate = 0 Then dtmEndDate = DateSerial(lngYearNow, 12, 31) ' التأكد أن التاريخين صالحين If dtmStartDate > dtmEndDate Then MsgBox "تاريخ البداية أكبر من تاريخ النهاية!", vbExclamation Exit Sub End If Set db = CurrentDb ' مسح البيانات القديمة db.Execute "DELETE FROM tbl2", dbFailOnError ' فتح الجدول للإضافة Set rs = db.OpenRecordset("tbl2", dbOpenDynaset) ' ملء السجلات For dtmDate = dtmStartDate To dtmEndDate rs.AddNew rs!dateField = dtmDate rs.Update Next dtmDate ' تنظيف الموارد rs.Close Set rs = Nothing Set db = Nothing MsgBox "تم توليد التواريخ من " & Format(dtmStartDate, "yyyy-mm-dd") & " إلى " & Format(dtmEndDate, "yyyy-mm-dd"), vbInformation End Sub
  6. اذا لا يوجد حل .. او انه غير منطقي .. نلجأ الى شيء آخر يساعدنا في المثال جدول tbl2 المساعد يحتوي على تواريخ عدة الآن اريد النتيجة في الاستعلام .. اظهار جميع التواريخ التي في tbl2 وما يتفق معها من جدول1 اريد المعرف وحقل تاريخ يعني المعرف 11 يظهر له 4 سجلات من 2/7 / الى 5/7 وسبب ظهورها هو ان لها ما يقابلها في جدول2 اعتذر اذا شرحي مش ولا بد Database2.rar
  7. يعني اعتبر المسألة صعبة ؟ فقط هي فكرة ان يتم انشاء استعلام شبيه بالجدول
  8. يمكن كلمة " العرض في حقل واحد " التي في العنوان عملت لبس في فهم المطلوب .. سوف اعدلها الى "العرض في قائمة"
  9. تمام ابا جودي الفكرة هي اني استبعد انشاء جدول من العملية باقي تكة 1- ان تكون النتيجة كسجلات ومرتبطة بالمعرف يعني المعرف 11 يكون له 4 تواريخ فوق بعض والمعرف 22 امامه تاريخ واحد وتسلم يالغالي والف شكر ..
  10. وعليكم السلام ورحنة الله تعالى وبركاته ممكن من خلال الكود التالى فى وحده نمطية عامة مثلا باسم : basGetDatesBetween Public Function GetDatesBetween(ByVal dtmStartDate As Date, ByVal dtmEndDate As Date) As String If dtmStartDate > dtmEndDate Then GetDatesBetween = "" Exit Function End If Dim dtmCurrentDate As Date Dim arrDates() As String ReDim arrDates(0 To DateDiff("d", dtmStartDate, dtmEndDate)) Dim lngIndex As Long For dtmCurrentDate = dtmStartDate To dtmEndDate arrDates(lngIndex) = Format(dtmCurrentDate, "yyyy-mm-dd") lngIndex = lngIndex + 1 Next dtmCurrentDate GetDatesBetween = Join(arrDates, " | ") End Function على ان يكون الاستدعاء فى الاستعلام لعمل حقل التواريخ بالشكل التالى DateList: GetDatesBetween([startA],[endA]) لتكون جملة الاستعلام كاملة كما يلى SELECT tbl1.user_id, GetDatesBetween([startA], [endA]) AS DateList FROM tbl1; ويمكن خفظ الاستعلام مثلا باسم : qryUserDateList لا اعرف هل الفكرة تلبى الطلب ام لا خطر على بالى ايضا اضفة استعلام جديد يعتمد على الاستعلام السابق لنعط مثلا للاستعلام الجديد اسم : qryFilteredDates وتكون جملة الاستعلام بالشكل التالى SELECT * FROM qryUserDateList WHERE DateList LIKE "*" & Format([InbutFromDate], "yyyy-mm-dd") & "*" OR DateList LIKE "*" & Format([InbutToDate], "yyyy-mm-dd") & "*"; أو مثلا لو أردنا تمرير التواريخ من نموذج SELECT * FROM qryUserDateList WHERE DateList LIKE "*" & Format(Forms!frmSearch!txtFromDate, "yyyy-mm-dd") & "*" OR DateList LIKE "*" & Format(Forms!frmSearch!txtToDate, "yyyy-mm-dd") & "*"; وظيفة الاستعلام الاخير qryFilteredDates أذا كنا نريد البحث في DateList إن كانت تحتوي على أي تاريخ بين النطاقين وذلك لأنه لا يمكن تصفية نتيجة دالة GetDatesBetween بشكل مباشر باستخدام WHERE
  11. جزاكم الله خيرا اخي وأستاذنا الفاضل 😇 تسرني مشاركتك ومرورك اللطيفين 💐
  12. وعليكم السلام ورحمة الله وبركاته 🤗 سأرى ما يمكنني فعله بطريقة أخرى ، ولا يهمك. في المرات القادمة حاول استخدام الرمز <> لوضع الأكواد فيه اخي الكريم 😇
  13. السلام عليكم ورحمة الله وبركاته تسلم بارك الله فيك بشمهندس ابوخليل
  14. تحية طيبة أخي والله بحث وحاولث كثيرا. طبعا حسب مستواي عند تحويل حقل mouadel_3am إلى عدد صحيح يشتغل وبدون مشاكل أخي هل ممكن تغيير الكود التالي نهائيا أو إدخال تعديلات عليه : Dim strSQL As String If Not IsNull(Me.ID) Then strSQL = "SELECT COUNT(*) FROM (" & _ "SELECT modul.mouadel_3am FROM info_stagiere " & _ "LEFT JOIN modul ON info_stagiere.ID = modul.id " & _ "WHERE info_stagiere.annee='" & [Forms]![frm_examen_fin_formation]![annet] & "' " & _ "AND info_stagiere.grade='" & [Forms]![frm_examen_fin_formation]![grade1] & "' " & _ "AND info_stagiere.wilaya='" & [Forms]![frm_examen_fin_formation]![wilaya1] & "'" & _ ") WHERE mouadel_3am >= " & Me.mouadel_3am Me.m = CurrentDb.OpenRecordset(strSQL)(0) لعل العملية تنجح ان شاء الله وبارك الله فيك لاني بحاجة ماسة لهذا الطلب baseM11.accdb
  15. جزاك الله خيرا .. وغفر الله لوالديك هدية جميلة
  16. السلام عليكم ورحمة الله وبركاته لدي في المرفقات قاعدة بيانات يوجد بها نموذج خاص بتسجيل العطلات الرسمية وطبعا يتم كل سنة تسجيل عطلات هذه السنة في هذا النموذج وقد حاولت ان اضيف معيار للتصفية حسب كل سنة بحيث تظهر كل عطلات سنة على حدة في نفس النمودج يعني متلا عند اختيار عطلات سنة 2024 تظهر وعند اختيار سنه اخرى تظهر عطلاتها وهكذا ولم اتمكن من تنفيده testhol.accdb
  17. السلام عليكم هل يمكن على هذا النحو او قريبا منه SELECT between tbl1.startA and tbl1.endA FROM tbl1 as expr1; Database1.rar
  18. اعلم ذلك ومؤيد لكلامك وخصوصا ان الحديث عن حالة معينة ولكن خشيت ان يفهم الموضوع على انه تراجع وتركت لك المايك للتعليق وفي ردي ذكرت هنا اشرت بشكل غير مباشر الى قناعي بعدم وجود تناقض وان التجربة خير برهان ليس فقط سرعة الحاسبات بل حتى تطور انظمة التشغيل وتحسينات برنامج الاوفيس لها دور كبير في تغيير بعض المفاهيم الشايب
  19. لا لا لا ، ابدا مافي تراجع 🙂 لذا في موضوع أخر لأخوي ابوخليل ، وانت كنت مشارك فيه ، انا كتبت: . قلت: . وفي مشاركتي اعلاه ، اختصرت النصيحة في الجملة التالية (والتي تشمل بعدم استخدام دوال المجال في الاستعلام وبقية الامور التي كتبتها في مشاركاتي في المنتدى 🙂 ) : . اذا تلاحظ ، فمشاركاتي وتفاعلي مع مواضيع البرمجة والتعامل مع البيانات والاتمتة ، جل خبرتي في التعامل مع مئات الآلاف من السجلات ، في بيئة يعمل فيها مجموعة بين 10-25 مستخدم لحظيا ، وتحت ضغط شديد لإتمام العمل في اقل وقت ممكن ، والحمدلله وبسبب تنوع البرامج المستخدمة والاجهزة ، ففي كل بيئة عمل ابدأ العمل من الصفر كالتالي: بعد معرفتي للمطلوب عمله ، ابحث في الانترنت عن اعمال مشابهة (وفي الفترة الاخيرة اسأل الذكاء الاصطناعي واللي فائدته لي جدا قليلة ، ورجاء لا احد يكلمني اني ما اعرف طريقة طلب السؤال ، لأني عندي اشتراك في احدهم كذلك للحصول على التجربة الكاملة ، ومن كثرة اسئلتي له صرت استطيع ان اميز الاكواد الموجودة في المنتدى ، لمن ) ، واقارنها بفكرتي ، ثم ابدأ بتجربة بعض الافكار ، وآخذ الافضل للعمل الذي في يدي ، ومو لازم العمل كاملا يكون في الاكسس. نعم بعض النصائح السابقة والتي كانت تعتمد على سرعة الحاسبات القديمة ، تم استبدالها بالتجربة الجديدة 🙂
  20. واضح ان هناك تراجع عن تحذير سابق بعدم استخدام دوال المجال في الاستعلام مع ان الامر قد يبدو فيه تناقض ولكن التجربة التي يمكن قياس نتائجها بدقة وتعطي نفس النتيجة وفقا لمعطيات محددة تكون دليل على صحة النظرية في جميع الاحوال طالما استطيع الحصول على النتيجة من خلال الصلة او الاستعلام الفرعي فساكتفي بذلك اخيرا التحذير من استخدام دوال المجال في الاستعلام وكذلك استخدام حقل محسوب في الجدول ربما سنكتشف لاحقا ان الامر لا يستند الى اي اساس علمي وساكتفي باقتباس للاخ متقاعد غفر الله له في موضوع مشابهة مجرد تفكير بصوت مرتفع الشايب
  21. التحديث الجديد من مرسال الواتس أب - الإصدار الثاني . يحتوي على الإضافات والتحسينات التالية :- 1️⃣ التحسينات :- تحسين التعامل مع المرفقات الأكثر من مرفق واحد ، بحيث يتم التعامل معها دفعة واحدة بدلاً من التعامل مع كل مرفق بشكل مستقل ( تقليل الوقت ) . تحسين عمليات المحاكاة للوحة المفاتيح للصق الرسالة والملفات داخل تطبيق واتس أب سطح المكتب . 2️⃣ الإضافات الجديدة :- إنشاء جداول الخدمة ( عددها 3 ) بشكل تلقائي . إضافة ميزة الإستيراد من ملفات VCF ( النسخة الإحتياطية من قائمة الأسماء من الجوال ) . بحيث يتم استيراد الأرقام والأسماء الى جدول Tbl_Contacts ، من خلال زر ، مع دعم التعامل مع الترميزات والتشفيرات المختلفة . وأيضاً الأرقام يتم تحويلها إلى صيغة دولية تلقائيًا (مثلاً: 079xxxx → +96279xxxx) . إضافة ميزة إنشاء جهة اتصال جديدة ( قيد التطوير للأفضل ) ، من خلال الزر . إضافة ميزة "إرفاق التوقيع مع الرسالة" . ويمكن التحكم بها من خلال جدول الإعدادات Tbl_SendSettings . إضافة ميزة الإرسال من دفتر العناوين ( متعدد الإختيار ) ، أو ادخال رقم هاتف بشكل يدوي . عند ادخال رقم هاتف يدوي ( محلي ) بدون مفتاح الدولة ، يتم قراءة قيمة رمز الدولة الإفتراضي من الجدول Tbl_SendSettings الخاص بالإعدادات . وعليه فسلت بحاجة لإضافة مفتاح الدولة المحلية بشكل يدوي وإلزامي . إضافة ميزة تقييد مفتاح الإيموجي من خلال جدول الإعدادات . فمنح أو رفض الصلاحية بالوصول اليه . ( قيد التطوير بحيث يتم المنع حتى من خلال لوحة المفاتيح ) . إضافة ميزة تحديد أنواع الملفات المسموح للمستخدم بإرسالها في جدول الإعدادات نفسه . إضاقة التحكم بفترة الإنتظار بين الرسالتين عند الإرسال المتعدد ( بالثواني - القيمة الإفتراضية = 2 ) . إضافة ميزة التحكم بالحد الأقصى لحجم الملفات المرفقة ( فردي أو أكثر من مرفق ) من خلال جدول الإعدادات أيضاً . إضافة رابط لتحميل نسخة برنامج واتس أب سطح المكتب من مصدره على موقع Whatsapp ، من خلال الزر . إضافة ميزة الحفظ التلقائي للأرقام الغير مخزنة في دليل الهاتف ( الجدول Tbl_Contacts ) . بحيث يتم تعريف الرقم بأنه "غير معروف" . وفي التعديلات اللاحقة سيتم إضافة ميزات لها . جميع الرسائل المرسلة ( الناجحة والغير ناجحة ) سيتم تخزينها في الجدول Tbl_Message . أيضاً في التعديلات اللاحقة سيتم إضافة ميزات لها . :- دعوة لتجربة الإستيراد من ملفات الـ VCF ، وإخباري بالنتيجة عن مدى صحة الإستيراد . السبب في سؤالي هذا هو اختلاف إصدارات هذه الملفات الناتجة عن اختلاف إصدارات أنظمة التشغيل في الهاتف الخلوي ، أو اختلاف الحصول عليها حسب البرنامج . وللعلم الـ VCF هي ملفات تستخدم لتخزين معلومات جهات الاتصال . كيف نحصل عليها :- في الأندرويد : الذهاب إلى تطبيق جهات الاتصال ثم الإعدادات ثم ابحث عن استيراد و تصدير جهات الإتصال ثم حفظ كملف VCF . في الآيفون : لا يدعم آيفون هذه الميزة ( تصدير جهات الإتصال ) إلا من خلال تطبيقات كمبيوتر مثل 3UTools وشبيهاته . 3️⃣ صور الواجهة الجديدة :- 4️⃣ تحميل الإصدار الجديد :- WhatsApp Sender 2025.zip 😬 يوجد سطر لم أقم بحذفه سهواً أثناء التعديلات في دالة الإستيراد الرئيسية من المديول في الدالة Public Function ImportVCF . السطر :- Forms("Frm_Sender").Controls("Text0").Requery حيث أن هذا العنصر تم الإستغناء عنه . ومرفق في طيه ملف VCF تجريبي للتجربة Test VCF.zip
  22. ممكن تدخل بنفسك من هنا 🙂👈>>>>>>
  23. مباشرة بعد ردك الأول كنت سأشرح ما قاله الأستاذ جعفر بناءا على تجربتي الشخصية .. ولكن كفى الله المؤمنين القتال
  1. أظهر المزيد
×
×
  • اضف...

Important Information