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

ابو جودي

أوفيسنا
  • Posts

    7250
  • تاريخ الانضمام

  • Days Won

    214

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

  1. بسم الله وعلى بركة الله نبدأ اول شئ ؟ خلينا نخلص الاشياء اللى راح تحتاج الى التجهيز بالأكسس بس علشان نقدر نفهم الموضوع من اخوانا الكرام ياللى فاهمينه صح واعذرونى وتحملونى فى الغياب والانقطاع المفاجئ والذى قد يكون متكرر فى الفترة المقبلة الى أن يأذن الله تعالى ويتمم شفاء والدى على خيـر هو وكل مريض هذا حمل الولد الوحيد لأبيه سوف اتابع بقدر الامكان اولا بصراحة دخلت على الفيديو الخاص بشرح الباش مهندس @Amr Sobhy الذى اشار اليه وهو مشكورا وضع معه مرفق يحتوى على قاعدة أكسس و مجلدات كثيرة بكل صدق مررت سريعا وان شاء الله لى إن أذن ربى لى عودة ولكن مبدئيا حتى افهم الموضوع جيدا سوف تدور نقاشات واستفسارات كثيرة وحتمية بعد التمعن جيدا فى الفيديو فقط قمت بتجربة قاعدة الاكسس والتى تحتاج تسجيل للمكتبة التى اخبرنا عتها الباش مهندس @Amr Sobhy سوف ارفق لكم القاعدة بتعديل بسيط حتى يمكن التسجيل للمكتبات واضافتها اليا من الملف الدفعى بمجرد فتح قاعدة البيانات كما قمنا بها مسبقا فى الجزء الأول ملاحظة هامة تم تعديل الملف الدفعى ليعمل كمسئول من تلقاء نفسه بمجرد فتح قاعدة بيانات الاكسس حتى يتمكن الجميع بما فيهم من ليس له دراية بطريقة تسجيل المكتبات بتشغيلها كمسئول متطلبات التشغيل : Framework الاصدار 4 ------------------------------------------------------------------------------- يمكن تحميل الملف الاتى هو يقوم بالتحديثات اللازمة سواء ويندوز 7 , 10 , 11 إذهب الى موقع التحميل : من هنا ( تحميل مباشر من mediafire .. من رفعي انا على حسابي الشخصي بالموقع ) ميزات برنامج All in one Runtimes: سهل الاستخدام و مفيد للغاية في تقليل الزمن الضروري للبحث عن الأدوات كلٍ على حدا. مجاني بشكل كامل و يقدم الكثير من الفائدة و يمكنه حمايتك من المواقع التي قد تصيب جهازك بفيروسات سيئة عند التحميل منها. يعمل بشكل ذكي حيث يقوم بتحديد ما يحتاجه حاسبك و لن يقوم بتثبيت كل الأدوات بشكل عشوائي. يقدم مجموعة كبيرة من الأدوات الضرورية في حاسبك و أهمها: .NET Framework 4.6 + Updates Java Runtime Environment 8 DirectX 9.0c Extra files General runtime files Microsoft Visual C++ Runtimes (v2005 – v2015) Microsoft Visual J# 2.0 SE Microsoft Silverlight 5 Shockwave Player 12 (Internet Explorer Plugin) ------------------------------------------------------------------------------- لكبر حجم المرفق تم تقسيمه على قسمين برجاء وضع القسمين معا فى نفس المسار ليتم فك الضغط بنجاح 626302988_VBA_ZatcaIntegrationV2.part1.rar 1345862990_VBA_ZatcaIntegrationV2.part2.rar
  2. السلام عليكم ورحمة الله تعالى وبركاته وبعد اذن استاذى الجليل ومعلمى القدير و والدى الحبيب الاستاذ @jjafferr تسهيلا على اخونا السائل على اعتبار ان الحقل اسمه ff اولا باستخدام دالة Switch Switch(IsNull(Trim([ff])),3,[ff]="Na",3,[ff]="ناجح",1,[ff]="فاشل",2) ثانيا باستخدام دالة iif IIf(IsNull(Trim([ff])),3,IIf([ff]="Na",3,IIf([ff]="ناجح",1,IIf([ff]="فاشل",2)))) وطبعا انا افضل دالة Switch لا يصير منها لخبطة مع كثرة عدد الحروف بالكود وبخاصة مع كثرة المتغيرات واستخدام الاحرف العربية اللى تشقلب الكود رأسا على عقب وتجيب لمحرر الاكواد صداع
  3. ارجع القيم الخالية الى 0 من خلال دالة NZ يعنى مثلا NZ([FieldNameA],0)*NZ([FieldNameB],0) وان تعذر عليكم التطبيق ضع مثالكم الذى يحتوى على تلك المشكلة
  4. على سبيل المثال حاولت تمرير اسم النموذج من خلال متغير Dim x 'As Object x = Form_frmInvoice Set frm = New x ولن فشلت التجربة
  5. السلام عليكم مشاركة مع اساتذتى العظماء هذه افكارى المتواضعة هذه الاكواد داخل موديول Public clnfrmName As New Collection Public frm As Form Public intCounterOpenForm As Integer Dim xPos As Integer Dim yPos As Integer Dim lngCount As Long Dim lngI As Long Function OpenAForm() Set frm = New Form_frmInvoice frm.Visible = True intCounterOpenForm = intCounterOpenForm + 1 frm.Caption = frm.Name & "(" & intCounterOpenForm & ")" clnfrmName.Add Item:=frm, Key:=CStr(frm.Name & "(" & intCounterOpenForm & ")") xPos = xPos + 300 yPos = yPos + 300 frm.Move xPos, yPos Set frm = Nothing End Function Function CloseAllForm() lngCount = clnfrmName.Count For lngI = 1 To lngCount clnfrmName.Remove 1 Next intCounterOpenForm = 0 xPos = 0 yPos = 0 End Function كنت اتمنى تطوير اخراج الفكرة بشكل عملى اكثر حتى لا يرتبط الكود باسم النموذج على ان يكون كود مرن ويتم استدعاءه بالشكل التالى OpenAForm("اسم النموذج المراد فتحه اكثر من مرة") ولكن عجزت بصراحة فى هذا السطر Set frm = New Form_frmInvoice Open Form more than once.accdb
  6. وفى هذا الموضوع تجد اجابة هذا السؤال باستفاضة
  7. استخدم الكود الاتى Private Sub Form_Close() On Error GoTo QuitApp_Err DoCmd.Quit acSave QuitApp_Exit: Exit Sub QuitApp_Err: MsgBox Error$ Resume QuitApp_Exit End Sub
  8. جرب عمل الاتى فى خصائص التقارير pop up=yes , modal=yes
  9. السلام عليكم ورحمة الله وبركاته مشاركة مع اساتذتى الافاضل كنا قد تطرقنا الى موضو ع شبيه لذلك وهذا >---->> رابط الموضوع واليكم المرفق بتطبيق الكود من الموضوع الذى تم التنويه عنه بعاليه والشرح تفصيلا موضوح بالموضوع مدة عمل الموظف.accdb
  10. سبحان الله اولا : فى هذا الصرح الشامخ تقدم المعلومات مجانا ثانيا : فى هذا المنتدى اهل الجود والكرم سواء كانوا اساتذة علماء واجلاء او خبراء او هواة او طلاب علم ثالثا : انت لا تعلم شئ عن ظروف الناس التى قد تسطيع تقديم المساعدة لك او لغيرك منهم الطاعن فى السن ومنهم المريض الذى قد يمنعه المرض احيانا من التواصل وتقديم يد العون ومنهم المشغول بعمله والذى هو اساس لقمة العيش بالنسبة له ولاولاده واهل بيته و و و و و................... الخ رابعا : معظم المواضيع التي لا يكون فيها رد معناه إما الموضوع صعب وإما ان الشرح مافيه تفصيل وامثلة فأنا مثلا اذا وجدت ان السؤال غير واضح اذهب الى موضوع آخر لكي استفيد من وقتي للأسف ارى بعض الاسئلة وكأن السائل يتمنن علينا بالمعلومة او يتهمنا بالتجاهل له بينما يجب ان يساعدنا بالتفاصيل حتى نساعده بالجواب وخذها قاعده اذا لم يتم الرد على سؤالك خلال يومين ووجدت اكثر من 10 قراءات فيجب عليك اعادة عرض السؤال بطريقة مختلفه وبشرح افضل وبمثال وهذا ما اقعله اذا وضعت سؤال فى المنتدى كما اننى على سبيل المثال والحمد لله تعالى اولا واخيرا على كل حال فى تلك الفترة اعانى من مشكلة عضوية لا تسمح لى بالتواجد والمشاركة كما كنت من قبل واذا دخلت الى المنتدى قد ادخل لاننى اريد شيئا معينا يخدم عملى والذى هو مصدر دخلى الاول والاخير و الوحيد واكون مضطرا للدخول وللعلم علمى لا علافة له بالبرمجة واحاول جاهدا فى تلك الدقائق القليلة تقديم المساعدة بقدر الامكان بالقاء نظرة سريعة على التساؤلات والتى احسها بسيطة ولن تستغرق منى وقت وجهد تظرا لحالتى الصحية اولا ولضيق وقتى ثانيا لا ابخل فى المشاركة وتقديم العون وعلى العموم جزاكم الله خيرا على وصفكم ونعتكم لرواد المنتدى والعرب جميعا بتلك الصفات الغير حميده ولكن بالاصالة عن نفسي وبالنيابة عن اخوانى رواد المنتدى العرب نسامح لوجه الله ونتصدق بأعراضنا لله تعالى لان اخلاقنا لا تسمح بغير ذلك وان وجدنا لك مسألة نسطيع المساعدة وتقديم يد العون فيها لن نبخل ولن نتردد ولن نقابل اسائتكم بمثلها لاننا لا نريد منكم او من غيركم جزاء او شكرا الكل هنا وانا اقلهم نبتغى وجه الله تعالى فقط ان اردتم التواجد بيننا اهلا بكم وان لم يكن لكم ما شئتم ملاحظة راجع ردود الاساتذة والخبراء تجد ان الاجابات لا تقتصر على قدر السؤال ولكن تقدم باستفاضة وبكرم وسخاء تم اغلاق الموضوع منعا لكثرة الكلام والقيل والقال .... ولكن رجاء لا تسئ الى اناس لا يستحقون ذلك
  11. الله يسلمك اعتذر عن طول الغياب ظروف عملى تحتم على ذلك فى الفترة الراهنة لم اضع الرد بوضع الرابط من أجل تأكيد انها فكرة قديمة او مكررة ولكن محور الفكرة فى اسنخدام اليونيكود هو الهدف اعرف ولكن فى الموضوع القديم تم وضع روابط لافكار اخرى وتم التطرق لموضوع الفرز والتصفية واستخدام افكار اخرى فكان الهدف اثراء الموضوع بصراحة كنت مستعجل وعاوز اقفل وكسلت اكتب كل الكلام اللى فات كل ده 😁 بس خوفت حد يفهمنى غلط ويزعل لان زعل اخوانى غالى جدا جدا جدا على ولذلك قررت البقاء والتوضيح رغم ضيق وقتى
  12. اولا ضع الكود الاتى فى وحدة نمطية Public Function ChnageDateFormat(Optional dtDateFormat As String = "dd/MM/yyyy") Shell "cmd.exe /c REG ADD ""HKEY_CURRENT_USER\Control Panel\International"" /v sShortDate /d """ & dtDateFormat & """ /F", vbHide End Function ثانيا طبق الكود الاتى بعد اسنخدام الاداة فى قاعدتك التى اشرت اليها بذلك تتخطى عقبة تنسيق التاريخ ChnageDateFormat() --------------------------------- فى حالة اردتم تغيير التنسيق الى تنسيق أخر مثلا yyyy/MM/dd ChnageDateFormat("yyyy/MM/dd") ملاحظة الحرف M الدال على تسيق الشهر لابد ان يكون Capital Letter اى يكتب كبير M وليس صغير مثل m
  13. انت تأمر يا دكتور إتفضل شوف فى المرفق النموذج اللى باسم frmOptionGroup ( √ ) أو ( x ) - الفرز -علامة.mdb
  14. تم تعديل المرفق ليسهل الاحتفاظ ببيانات جوجل داخل جدول وذلك لاضفاء المرونة فى حالة اردتم تغيير بيانات جوجل ببريد اخر او تغيير اسم النسخة التى نريد رفعها او كلمة المرور بسهولة كذلك تم حمل الملفات المقدمة من قبل دكتور حسانين @SEMO.Pa3x داخل قاعدة البيانات لعدم فقدها ممكن عمل تشفير لبيانات جوجل داخل الجدول لمن يريد GoogleDriveUploader.zip
  15. السلام عليكم ورحمة الله تعالى وبركاته الاكواد تعتمد على احد دوال ال API للويندوز وتم مراعاة العمل على كلا من النسختين 32 , 64 بيت الكود الاول فى راس الموديول وذلك لاحضار تنسيق تاريخ الجهاز Private Const LOCALE_USER_DEFAULT = &H400 Private Const LOCALE_SSHORTDATE = &H1F ' short date format string Private Const LOCALE_SLONGDATE = &H20 ' long date format string Private Const strTblFormatDate = "tblDateFormatWindows" #If VBA7 And Win64 Then Private Declare PtrSafe Function _ GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" _ (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long #Else Private Declare Function _ GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" _ (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long #End If Public Function GetDateFormatMyWin() Dim strLocale As String Dim lngRet As Long Dim strMsg As String strLocale = Space(255) lngRet = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, strLocale, Len(strLocale)) strLocale = Left(strLocale, lngRet - 1) GetDateFormatMyWin = strLocale End Function الكود الثانى التأكد من وجود جدول لحفظ تنسيق تاريخ الجهاز Function ifTableExists(tblName As String) As Boolean If DCount("[Name]", "MSysObjects", "[Name] = '" & tblName & "'") = 1 Then ifTableExists = True End Function الكود الثالث جلب البيانات لتسيق تاريخ الجهاز الذى تم حفظه بالجدول Public Function DateFormatwinSaved() As String DateFormatwinSaved = Nz(DLookup("DateFormatWindows", strTblFormatDate), "") End Function الكود الرابع تغيير تسيق التاريح لجهاز الحاسوب ولكن اولا تخزين القيم الاصلية لتنسيق تاريخ الحاسوب داخل جدول لمن يريد استرجاع التسيق الاصلى مرة اخرى Public Function ChnageDateFormat(Optional dtDateFormat As String = "dd/MM/yyyy") If GetDateFormatMyWin() = dtDateFormat Then Exit Function Else Dim mySQL As String If ifTableExists(strTblFormatDate) = False Then DoCmd.SetWarnings False mySQL = "CREATE TABLE " & strTblFormatDate mySQL = mySQL & "([ID] counter," & "[DateFormatWindows] text," & "CONSTRAINT [Index1] PRIMARY KEY ([ID]));" DoCmd.SetWarnings False: DoCmd.RunSQL mySQL: DoCmd.SetWarnings True mySQL = "INSERT INTO " & strTblFormatDate mySQL = mySQL & "( DateFormatWindows )" mySQL = mySQL & " SELECT " mySQL = mySQL & " ('" & GetDateFormatMyWin() & "') " DoCmd.SetWarnings False: DoCmd.RunSQL mySQL: DoCmd.SetWarnings True ElseIf ifTableExists(strTblFormatDate) = True Then If DCount("*", strTblFormatDate) = 0 Then mySQL = "INSERT INTO " & strTblFormatDate mySQL = mySQL & "( DateFormatWindows )" mySQL = mySQL & " SELECT " mySQL = mySQL & " ('" & GetDateFormatMyWin() & "') " DoCmd.SetWarnings False: DoCmd.RunSQL mySQL: DoCmd.SetWarnings True ElseIf DCount("*", strTblFormatDate) > 0 Then mySQL = "UPDATE " & strTblFormatDate mySQL = mySQL & " SET " & strTblFormatDate mySQL = mySQL & ".DateFormatWindows = " & Chr(34) & GetDateFormatMyWin() & Chr(34) & ";" DoCmd.SetWarnings False: DoCmd.RunSQL mySQL: DoCmd.SetWarnings True End If End If Shell "cmd.exe /c REG ADD ""HKEY_CURRENT_USER\Control Panel\International"" /v sShortDate /d """ & dtDateFormat & """ /F", vbHide End If End Function الكود الاخير ارجاع التنسيق مرة اخرى للحاسوب والذى تم الاحتفاظ به داخل الجدول Public Function ReturnOldDateFormatWin() If GetDateFormatMyWin() = DateFormatwinSaved() Then Exit Function Else Shell "cmd.exe /c REG ADD ""HKEY_CURRENT_USER\Control Panel\International"" /v sShortDate /d """ & DateFormatwinSaved & """ /F", vbHide End If End Function طيب فى النهاية يفضل استخدام ماكرو AutoExec والذى وظيفته تنفيذ إجراء او اجراءات معينة في كل مرة تبدأ فيها تشغيل قاعدة بيانات Access وفى الماكرو من خلال RunCode نكتب اسم الوظيفة التى نريد استدعاؤها وهى ChnageDateFormat() الان عند تشغيل القاعدة يتم فحص تنسيق تاريخ الجهاز وان كان مساويا للتنسيق الموجود فى الفانكشن ChnageDateFormat والذى وضعته افتراضيا من خلال Optional dtDateFormat As String = "dd/MM/yyyy" يتم تجاهل الامر وفى حالة الاختلاف يتم تغيير تنسيق تاريخ الجهاز الى هذا النسيق الذى تم الاعلان عنه فى رأس الوظيفة dd/MM/yyyy ولاضفاء المرونة قمت بتعريف متغير التنسيق على انه اختيار ووضعت الاختيار المفضل dd/MM/yyyy فى حالة اردتم تغيير التنسيق الى تنسيق أخر مثلا yyyy/MM/dd كل ما عليكم هو استدعاء الوظيفة فى الماكرو بالشكل الاتى ChnageDateFormat("yyyy/MM/dd") ان شاء الله بهذا الكود لن تواجهوا مستقبلا مشاكل اختلاف تنسيق التاريخ فى دوال المجال ولا اخطاء فى تسجيل التواريخ .. بلا ..بلا ..بلا.................... الخ الخ طيب لو اردتم ارجاع التنسيق الافتراضى الذى كان قبل ذلك والذى احتفظنا به فى الجدول كل ما عليكم هو استدعاء الوظيفة الاتية عند الاغلاق لقاعدة البيانات ReturnOldDateFormatWin() انتهى الشرح ارجوا لكم تجربة الاستمتاع بتلك الافكار وهذه التجربة الافكار والاكواد وطرح التصور حصرى من بنات افكارى وانا مجهد جدا جدا جدا قد يمكن اختصار الاكواد واختزالها ولم انتبه لذلك مثلا من شدة الارهاق فلا تؤاخذونى فى ذلك .. و ليدلوا كل بدلوه فى ذلك الامر ... تم التجربة على ويندوز 10 - 64 بيت ولا ادرى هل يعمل على باقى واختلاف نسخ الويندور ام لا انتظر الرد من حضراتكم بنتائج تجاربكم ووضع اقتراحاتكم
  16. بالمناسبة فى الحل التانى انت اشرت الى IDmvmnt Mvmnt 1 انقطاع 2 مباشر يعنى سوف تقوم باستخدام حقول رقمية واخرى نصية مما يستوجب مستقبلا الربط بينهما بالاستعلامات او العلاقات او مجال الدوال ليش تصعب السهل وفى مرفق نوع الحقل رقم Long وليه تحجز 4 Byte بحالهم علشان الارقان 1 , 2 , 3 لما ممكن تستخدم 2 Byte بس لو كان الحقل Integer , Boolean انصحك راجع هذا الدرس
  17. اسال عن التعقيدات تجد الشرح ومنه تتعلم بمرور الوقت وهذه كانت اولى خطواتى هنا ولازلت ان تعثرت فقط نصيحة لا تضع اسالة نظرية ارفق قاعدة بعدد قليل من البيانات ودع عالم الرياضيات فى مخيلتك دائما عند التصميم والتفكير الجواب يأتى بناء على معطى , مجهول , ثابت وتذكر جيدا هذه كلمات من ذهب ضعها نصب عينيك دائما وابدا
×
×
  • اضف...

Important Information