اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

الدكتور خضر الرجبي

المشرفين السابقين
  • Posts

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

  • تاريخ اخر زياره

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

  1. السلام عليكم تحياتي لأخي الكبير أبا هادي وكل عام وانت بخير ، اخي طارق واخي met ، أشكركما وسأحاول بإذن الله تلبية طلبكما قريبا. أخي عادل جلال ، أرجو منك فضلا توضيح طلبك بمثال أكثر وضوحا. مع الاحترام والتقدير
  2. السلام عليكم تحياتي لأخي أبا يوسف وللأخ الفيلسوف111 ، وكل عام وانتم بخير للأسف أخي أبا يوسف ، بعد تحميل المرفقات ومحاولة فك الضغط عنه أعطى رسالة خطأ بأن الملف معطوب. يرجى، إن كان بالإمكان، الاشارة إلى صاحب الملفات بإعادة رفعها. مع فائق الاحترام والتقدير
  3. السلام عليكم صدقت أخي طارق ، قمت بالتعديل على الوحدة النمطية ليشمل المطلوب كما يلي : المثال بعد التعديل : Example_NO_TO_Text_ARABIC__update1.rar مع الاحترام والتقدير
  4. السلام عليكم اقتران التحويل الذي ارفقته هو مفتاح الحل . الطريقة : يتم وضع الاقتران في وحدة نمطية ، ويتم طلبه من النموذج بالطريقة التالية : Private Sub convert_Click() Dim answer As String answer = NoToTxt(r, "دينار", "فلس") MsgBox answer End Sub ويمكن استعماله لأي عملة سواء كويتية أو غيرها بتغيير الرموز فقط (دينار ، فلس) واليكم المثال التطبيقي : Example_NO_TO_Text_ARABIC_.rar مع الاحترام والتقدير
  5. السلام عليكم ارجو السماح لي بهذه المداخلة ، لعل فيها الفائدة للجميع. مثال: تلوين سجل وترك أخر Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) Dim Cntl As Control On Error Resume Next For Each Cntl In Me.Controls With Cntl If .Section = 0 Then If Me.Report.CurrentRecord Mod 2 = 0 Then .BackStyle = 1 .BackColor = vbGreen Else .BackStyle = 0 End If End If End With Next End Sub وهذا البرنامج الخاص بالمثال : DifferentRecordColorsInReports.rar مع الاحترام والتقدير
  6. السلام عليكم اعتقد أن سبب المشكلة هو حقل التاريخ الثاني ، ولكن الحمد لله تم الضبط والتعديل والنقل بواسطة النسخ واللصق. الطريقة : تم بناء جدول في الأكسيس وتحديد نوع الحقول مذكرة ، ثم تم تغيير أنواع الحقول إلى الأنواع الصحيحة. الملف بعد تعديله : Update1.rar مع الاحترام والتقدير
  7. السلام عليكم أعتقد أن إحدى طرق الحل تكون بعمل برنامج بسيط في حدث (بعد التحديث) الخاص بالإسم، وذلك بقراءة السجل الذي تم اختياره في متغيرات اسميتها (t1,t2,t3,t4) والتي ستمكننا من تحديد السجل الذي تم اختياره ، وبعدها نقوم بعمل استعلام اجرائي نبني بواسطته جدول مؤقت اسميته (temp) ، وأخيراً نجعل مصدر السجلات للتقرير الجدول (temp). لاحظ : أننا في هذه الطريقة قد استغنينا عن استعلام التحديد وهي طريقتك في معالجة المسألة. Private Sub m_AfterUpdate() Dim SQL As String Dim t1 As String, t2 As String, t3 As String, t4 As String t1 = m.Column(0) t2 = Str(m.Column(1)) t3 = m.Column(2) t4 = Str(m.Column(3)) SQL = "SELECT Table1.name, Table1.Age, Table1.Address, Table1.Telephone INTO temp " & _ "FROM Table1 " & _ "WHERE Table1.name = '" & t1 & "' and " & _ " str(Table1.Age) = '" & t2 & "' and " & _ " Table1.address = '" & t3 & "' and " & _ " str(Table1.Telephone) = '" & t4 & "'" DoCmd.RunSQL SQL End Sub مثال معدل لبرنامجك : print_update1.rar مع الاحترام والتقدير
  8. السلام عليكم أعتقد أنه يمكن حل المشكلة من تحديد اللغة المناسبة من لوحة التحكم حسب الرسم التالي : مع الاحترام والتقدير
  9. السلام عليكم أشكرك أخي رضا ، وبارك الله فيك على هذه الاداة وهذه الثقة واعتذر عن تأخري في الرد لظروف طارئة قطعتني عن جميع لمنتديات في الاسبوعين الماضيين. ولعمل الجميع أن هذه من الادوات الإبداعية المتطورة التي تخدم كل من المستخدم والمبرمج على حد سواء. هدف الأداة : 1. معالجة مشكلة تغيير الهوامش من جهاز لأخر ، والاحتفاظ بنفس الاعدادات بغض النظر عن الجهاز. 2. تعديد خصائص التقرير دون الحاجة إلى التعديل في وضع التصميم وخصوصا في MDE . 3. المساعدة في تعريف الإعدادات الخاصة بالملصقات وبطريقة مرنة وسهلة. 4. طريقة جديدة ومتطورة للتحكم في كائنات الاكسيس. مع الاحترام والتقدير وداعيا الله أن يجعل هذا العمل في موازين حسناتك
  10. السلام عليكم شكرا لأخينا أبن مسقط مشاركاته الجميلة والمفيدة دائما ، داعيا الله له بالتوفيق والسداد دائما. مع الاحترام والتقدير
  11. السلام عليكم شكرا لأخينا طيف على هذا المثال الجميل ، أملين المزيد من المشاركات المتميزة. مع الاحترام والتقدير
  12. السلام عليكم شكرا لأخينا عبد المانع على هذا المثال الجميل. مع الاحترام والتقدير
  13. السلام عليكم إخواني وأخواتي ، بارك الله فيكم عدت إليكم ... "13- كود نسخ النصوص المخزنة في الحافظة والعكس" قبل فترة وخلال عملي كمشرف في منتدى أوفيسنا تعرضت لسؤال حول هذا الموضوع ولا أخفيكم في حينه أنني بحثت كثيرا جدا ولوقت طويل عن حل لهذه المسألة ولكن وللأسف دون جدوى ، اليوم بالصدفة وفي احد المواقع الاجنية وجدت ضالتي من خلال الاقترانين التاليين : Declare Function abOpenClipboard Lib "user32" Alias "OpenClipboard" (ByVal hwnd As Long) As Long Declare Function abCloseClipboard Lib "user32" Alias "CloseClipboard" () As Long Declare Function abEmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long Declare Function abIsClipboardFormatAvailable Lib "user32" Alias "IsClipboardFormatAvailable" (ByVal wFormat As Long) As Long Declare Function abSetClipboardData Lib "user32" Alias "SetClipboardData" (ByVal wFormat As Long, ByVal hMem As Long) As Long Declare Function abGetClipboardData Lib "user32" Alias "GetClipboardData" (ByVal wFormat As Long) As Long Declare Function abGlobalAlloc Lib "kernel32" Alias "GlobalAlloc" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long Declare Function abGlobalLock Lib "kernel32" Alias "GlobalLock" (ByVal hMem As Long) As Long Declare Function abGlobalUnlock Lib "kernel32" Alias "GlobalUnlock" (ByVal hMem As Long) As Boolean Declare Function abLstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long Declare Function abGlobalFree Lib "kernel32" Alias "GlobalFree" (ByVal hMem As Long) As Long Declare Function abGlobalSize Lib "kernel32" Alias "GlobalSize" (ByVal hMem As Long) As Long Const GHND = &H42 Const CF_TEXT = 1 Const APINULL = 0 Function Text2Clipboard(szText As String) Dim wLen As Integer Dim hMemory As Long Dim lpMemory As Long Dim retval As Variant Dim wFreeMemory As Boolean ' Get the length, including one extra for a CHR$(0) at the end. wLen = Len(szText) + 1 szText = szText & Chr$(0) hMemory = abGlobalAlloc(GHND, wLen + 1) If hMemory = APINULL Then msgbox "Unable to allocate memory." Exit Function End If wFreeMemory = True lpMemory = abGlobalLock(hMemory) If lpMemory = APINULL Then msgbox "Unable to lock memory." GoTo T2CB_Free End If ' Copy our string into the locked memory. retval = abLstrcpy(lpMemory, szText) ' Don't send clipboard locked memory. retval = abGlobalUnlock(hMemory) If abOpenClipboard(0&) = APINULL Then msgbox "Unable to open Clipboard. Perhaps some other application is using it." GoTo T2CB_Free End If If abEmptyClipboard() = APINULL Then msgbox "Unable to empty the clipboard." GoTo T2CB_Close End If If abSetClipboardData(CF_TEXT, hMemory) = APINULL Then msgbox "Unable to set the clipboard data." GoTo T2CB_Close End If wFreeMemory = False T2CB_Close: If abCloseClipboard() = APINULL Then msgbox "Unable to close the Clipboard." End If If wFreeMemory Then GoTo T2CB_Free Exit Function T2CB_Free: If abGlobalFree(hMemory) <> APINULL Then msgbox "Unable to free global memory." End If End Function Function Clipboard2Text() Dim wLen As Integer Dim hMemory As Long Dim hMyMemory As Long Dim lpMemory As Long Dim lpMyMemory As Long Dim retval As Variant Dim wFreeMemory As Boolean Dim wClipAvail As Integer Dim szText As String Dim wSize As Long If abIsClipboardFormatAvailable(CF_TEXT) = APINULL Then Clipboard2Text = Null Exit Function End If If abOpenClipboard(0&) = APINULL Then msgbox "Unable to open Clipboard. Perhaps some other application is using it." GoTo CB2T_Free End If hMemory = abGetClipboardData(CF_TEXT) If hMemory = APINULL Then msgbox "Unable to retrieve text from the Clipboard." Exit Function End If wSize = abGlobalSize(hMemory) szText = Space(wSize) wFreeMemory = True lpMemory = abGlobalLock(hMemory) If lpMemory = APINULL Then msgbox "Unable to lock clipboard memory." GoTo CB2T_Free End If ' Copy our string into the locked memory. retval = abLstrcpy(szText, lpMemory) ' Get rid of trailing stuff. szText = Trim(szText) ' Get rid of trailing 0. Clipboard2Text = left(szText, Len(szText) - 1) wFreeMemory = False CB2T_Close: If abCloseClipboard() = APINULL Then msgbox "Unable to close the Clipboard." End If If wFreeMemory Then GoTo CB2T_Free Exit Function CB2T_Free: If abGlobalFree(hMemory) <> APINULL Then msgbox "Unable to free global clipboard memory." End If End Function ثم قمت باختبار هذه الاقترنات وتأكدت من أنها تعمل بدون أية مشكلة ، أنظروا معي : أترككم مع المرفق لتتمتعوا بهذه النتائج التي لها فوائد عظيمة جدا . إلى اللقاء ... مع الاحترام والتقدير ClipBoard_20050806.rar
  14. السلام عليكم إخواني وأخواتي ، بارك الله فيكم عدت إليكم ... "12- استخدام عنصر ActiveX - Mircrosft Web Browser في البحث الديناميكي من داخل الأكسيس" نعم إخواني وأخواتي سنتعرف الآن ومن خلال هذا الموضوع على كيفية البحث الديناميكي الحيوي من داخل الأكسيس ، والعملية غاية في البساطة وهي كما يلي : 1. في النموذج تقوم بإضافة عنصر ActiveX - Microsoft Web Browser وضع اسمه على سبيل المثال wb ولا تغير أي شيء في خصائصه سوى حجمه كما تريد. 2. للتعامل مع هذا العنصر ولإخفاءه في وضع الفتح ضع في حدث فتح النموذج الجملة التالية : Me.wb.Visible = False 3. للبحث في اي عنوان يتم ذلك بطلب العنوان كما يلي : Me.wb.Navigate "العنوان" 4. للبحث في google باللغة العربية الطريقة كما يلي : http://www.google.com/search?lr=lang_ar&cr=&hl=ar&ie=windows-1256&oe=windows-1256&q= ومفاتيح البحث هنا 5. للبحث في google في موقع محدد كما أشرت سابقا وبإضافة ما يلي في نهاية البحث : &as_sitesearch=الموقع&safe=images على سبيل المثال للبحث في الفريق العربي للبرمجة نضع العنوان كاملا كما يلي : Me.wb.Navigate "http://www.google.com/search?lr=lang_ar&cr=&hl=ar&ie=windows-1256&oe=windows-1256&q=" & SearchString & " &as_sitesearch=arabteam2000-forum.com&safe=images" وأنا متأكد من أنكم ستستمتعون في استخدام هذه الأداة المفيدة والتي يمكن تطويعها ووضعها في برامجكم المختلفة. إلى اللقاء ... مع الاحترام والتقدير InternetSearch_20050806.rar
  15. السلام عليكم إخواني وأخواتي ، بارك الله فيكم عدت إليكم ... "11- طريقة تبديل عرض النموذج الفرعي برمجيا وديناميكيا خلال العمل" ربما يود أحدنا في احدى التطبيقات أن يكون هناك امكانية لعرض النماذج الفرعية بطريقتين عرض نموذج وعرض ورقة بيانات وإليكم هذا الاسلوب البسيط باستخدام DoCmd.RunCommand التي جاءت كبديل DoMenuItem وهو أمر خاص بالاكسيس ولا ينصح باستخدامه إذا كنتم تفكرون في تحويل التطبيق في النهاية إلى بيئة اخرى مثل VB أو VB.NET أو حتى للنسخ السابقة من الاكسيس. ولكن الامر DoCmd.RunCommand مفيد ورائع ويمكن استخدامه بكفاءة وسهولة مع أكثر من 500 معامل مختلف لمن يستخدم الاكسيس فحسب وغير معني بالتحويل ومنها مثالنا . في مثالي عملت بشكل تقليدي جدولين وقمت بربطهما على الرقم وثم قمت بانشاء نموذج رئيس للسندات وفرعي للحركات وزر مخصص لهدف الموضوع وهو التبديل بين طريقتي العرض للنموذج الفرعي كما يلي : Option Compare Database Public p As Byte Private Sub أمر6_Click() If Nz(p, 0) = 0 Then Me.الحركات.SetFocus DoCmd.RunCommand acCmdSubformFormView p = 1 Else Me.الحركات.SetFocus DoCmd.RunCommand acCmdSubformDatasheetView p = 0 End If End Sub المتغير p بناء على قيمته سيتم تغيير طريقة العرض التبديلية . إلى اللقاء ... مع الاحترام والتقدير ChangeSubFormView_20050805.rar
  16. السلام عليكم أخي مسك 7 ، بارك الله فيك يؤسفني ابلاغك أنه لا يوجد طريقة لأن التنسيق الشرطي محدود بثلاث شروط فقط لا غير. مع الاحترام والتقدير
  17. السلام عليكم إخواني وأخواتي ، بارك الله فيكم عدت إليكم ... "10- برمجة التنسيق الشرطي بناء على التنقل بين السجلات في نموذج مجدول" إخواني لننظر للصورتين التاليتين اللتين تمثلان نموذج مجدول موضوع حديثنا اليوم ، الصورة الاولى تمثل كيف يتغير لون السجل عندما نتنقل من سجل لأخر ، وفي الصورة الثانية تغير خلفية الحقل عند تحريره (عند التركيز) . وفي هذا الموضوع سألقي الضوء على طريقتي الخاصة بمعالجة تغيير لون السجل عند الانتقال من سجل لأخر لأن التنسيق الشرطي بحدودياته التي بالاكسيس لا يستطيع معالجة هذه المسألة بشكل مباشر ومبسط . ومن الفوائد الضمنية للموضوع تعلم كيفية تحديد التنسيق الشرطي لمربعات النص التي في تفصيل النموذج المجدول تلقائيا وبرمجيا. الطريقة تعتمد على وضع حقل خاص في مصدر السجلات (الجدول أو الاستعلام) الذي سيكون مصدراً للنموذج المجدول ، وقد أطلقت عليه اختصار (تم) تنسيق مشروط ... ثم في النموذج وفي حدث في الحال الذي يتم تفعيله كلما تنقلنا بين السجلات نقوم بإعادة تعيين الحقل (تم) للقيم False ويتم تعيين للقيم true للسجل الحالي وذلك كما يلي : Private Sub Form_Current() DoCmd.SetWarnings False DoCmd.RunSQL "UPDATE الطلاب SET الطلاب.تم= False;" DoCmd.SetWarnings True Me.تم= True End Sub هكذا سيكون الحقل (تم) = true فقط للسجل الحالي . الان الآمر أصبح أكثر وضوحا ، سنبني التنسيق الشرطي بناء على قيم هذا الحقل ولكنني لا أريد في كل نموذج أن اقوم بتحرير التنسيق الشرطي لمربعات النص في وضع التصميم وعوضا عن ذلك قمت ببناء الاقتران التالي الذي يحدد تلقائيا التنسيق الشرطي حسبما اريده أن يكون كما يلي : Private Sub التنسيق_الشرطي () Dim objFormat As FormatCondition Dim ctl As Control For Each ctl In Me Flag = (ctl.Section = 0) And _ (ctl.ControlType = acTextBox) If Flag Then ctl.FormatConditions.Delete Set objFormat = ctl.FormatConditions.Add( _ Type:=acFieldHasFocus) objFormat.BackColor = vbYellow With ctl.FormatConditions.Add( _ Type:=acExpression, _ Expression1:="Forms!الطلاب.تم = true") .ForeColor = vbBlack .BackColor = vbMagenta End With End If Next End Sub وهكذا فإن شرط التركيز هو خلفية صفراء وشرط عدم التركيز وحيثما يكون الحقل (تم) = true تكون الخلفية باللون Magenta ، أليس هذا الحل جميلا ؟؟ أترككم لتتمتعوا مع المرفق واجراء تجاربكم الخاصة به متمنيا لكم الفائدة دائما. وإلى اللقاء ... مع الاحترام والتقدير ConditionalFormatingTrick_20050805.rar
  18. وعليكم السلام ورحمة الله وبركاته أشكرك أخي طيف لهذا الاطراء ، واعدك إن شاء الله أن أقدم المزيد من المواضيع التي ارجو من الله أن يكون فيها الفائدة للجميع. مع الاحترام والتقدير
  19. السلام عليكم إخواني وأخواتي ، بارك الله فيكم عدت إليكم ... "9- بناء مربع تحرير وسرد يحتوي على تصنيفات وفروعها" انظروا معي فضلا للصورة التالية : إن كنتم مهتمين بطريقة بناء مثل هذا الكمبو الذي يحتوي على تصنيفات وفروع لها فأرجو منك متابعة هذا الموضوع الممتع معي ... ولكي اسهل عليكم فهم الموضوع سأشرحه من نقطة الصفر ... 1. نقوم ببناء جدول مؤلف من ثلاث حقول هي معرف_التصنيف مفتاح رئيس وترقيم تلقائي ، التصنيف عبارة عن نص ، ومعرف_الأب عبارن عن رقم وقد سميت هذا الجدول التصنيفات. 2. يمكن تعبئة الجدول مباشرة بوضوع التصنيفات الرئيسة بحيث نحدد معرف الأب لها صفر والتصنيفات الفرعية نضع لها معرف الاب = معرف التصنيف الذي تنتمي له ، ولكني سأشرح لكم طريقة أمتع للتعبئة ... 3. لتعبئة النماذج عن طريق نموذج رئيسي فيه الاصناف وفرعي فيه الاصناف الفرعية نقوم بما يلي : 3.1 نعمل الاستعلام qryCategories والذي يرجع لنا الاصناف الرئيسة انظروا إلى طريقة تصميمه SELECT التصنيفات.معرف_التصنيف, التصنيفات.التصنيف, التصنيفات.معرف_الأب FROM التصنيفات WHERE (((التصنيفات.معرف_الأب)=0)) ORDER BY التصنيفات.التصنيف; 3.2 نعمل الاستعلام qryCategoriesSub والذي يرجع لنا الاصناف المتفرعة انظروا إلى طريقة تصميمه SELECT التصنيفات.معرف_التصنيف, التصنيفات.التصنيف, التصنيفات.معرف_الأب FROM التصنيفات WHERE (((التصنيفات.معرف_الأب)<>0)) ORDER BY التصنيفات.التصنيف; 3.3 نعمل نموذج frmCategories مصدره qryCategories نضع فيه حقل التصنيف فقط. 3.4 نعمل نموذج frmCategoriesSub مصدره qryCategoriesSub نضع فيه حقل التصنيف فقط ومن نوع ورقة بيانات 3.5 لربط النموذجين ببعضهما نفتح النموذج frmCategories في وضع التصميم ونجر اليه من نافذة القاعدة النموذج frmCategoriesSub ليصبح فرعيا به ونعرف في خصائص الربط بأن الحقول الرئيسة للربط هي معرف_التصنيف والفرعية هي معرف_الأب. 4. الآن نأتي إلى الهدف الآساس من الموضوع وهو مربع التحرير والسرد ما في الصورة اعلاه ، نعمل نموذج جديد فارغ ، ونضع فيه مربع تحرير وسرد نجعل مصدره الاستعلام qryCombo والذي طريقة بناءه كما يلي : SELECT t1.معرف_التصنيف, IIf(t1.معرف_الأب=0,t1.التصنيف,t2.التصنيف & " - " & t1.التصنيف) AS قائمة_الأصناف, IIf(t1.معرف_الأب=0,t1.التصنيف," - " & t1.التصنيف) AS معرفات_الأصناف FROM التصنيفات AS t1 LEFT JOIN التصنيفات AS t2 ON t1.معرف_الأب = t2.معرف_التصنيف ORDER BY IIf(t1.معرف_الأب=0,t1.التصنيف,t2.التصنيف & " - " & t1.التصنيف); الآن افتح النموذج الكمبو المتفرع وتمتع بالنتائج إلى اللقاء ... BranchingCombo_20050804.rar
  20. السلام عليكم إخواني وأخواتي ، بارك الله فيكم جميعاً عدت إليكم ... "8- خاصية الترتيب المتبدلة حسب الحقول للبيانات في نموذج مجدول" لننظر إلى النموذج التالي من المرفق ، بالتأكيد سيكون الأمر رائعا لو توفرت لدينا أداة بسيطة بحيث لو ضغطنا على الرقم يتم الترتيب تصاعديا والضغط الثانية تنازليا وهكذا يكون الترتيب تبديليا ولكل الحقول وليس للرقم فحسب وإليكم الطريقة .. تضعون الإقتران التالي في وحدة نمطية Public Sub ChangeSortOrder _ (frm as Form, strFld as String) On Error Goto ErrHand If frm.OrderBy = strFld Then 'If it's already ordered by this field name, 'you want to reverse it. frm.OrderBy = strFld & " DESC" Else frm.OrderBy = strFld End If frm.OrderByOn = True ExitProc: Exit Sub ErrHand: MsgBox Err.Num & " " & Err.Desc Goto ExitProc End Sub ثم لكل حقل في حدث عند النقر تطلبون الاقتران على سبيل المثال كما يلي من حقل الرقم Private Sub الرقم_تسمية_Click() Call ChangeSortOrder(Me, "الرقم") End Sub إلى اللقاء ... مع الاحترام والتقدير SortingAZ_ZA.rar
  21. السلام عليكم أخواي الأصيل وشاهر ، أشكركما إخواني وأخواتي ، بارك الله فيكم جميعا عدت إليكم ... "7- هل يوفر الأكسيس خاصية الربط FULL OUTER JOIN " من المعروف أن الأكسيس يوفر اساسا ثلاث أنواع من طرق الربط بين جدولين بغرض عرض البيانات باشكال مختلفة ، في هذا الموضوع سألقي الضوء على هذه الأنواع وسأعرض لكم كيف نضيف طريقة جديدة ببعض الاجتهاد . في مثالي جدولي الموظفين و الموردين وفي كل جدول اسم الموظف أو المورد ومدينته وسأبني الربط بناء على المدينة. أولا : للناقش الطرق الثلاث لأنواع الربط بين جدولين الموفرة في الأكسيس : وقبل أي شيء للنظر لمحتويات الجدولين Suppliers الموردين = {(خضر ،القدس)، (محمد،الخليل)،(سمير،غزة)،(رامي،نابلس)،(سعاد،بيت لحم)،(فاطمة،رام الله)،(زينب ،القدس)} Employees الموظفين = {(سهيلة،جنين)،(راوية،بيت لحم)،(زهرة،رفح)،(ربيع،طولكرم)،(سعيد،رفح)،(نافذ،نابلس)،(احمد،القدس)} ولو احببنا تمثيل الجدولين (المجموعتين) باستخدام اشكال فن الرياضية حسب التشارك في المدينة فالنتيجة ستكون كما يلي : 1. Inner Join وطريقة التعريف كما يلي : والنتيجة هي العناصر المشتركة بين الجدولين حسب المدينة كما يلي : وللنظر إلى جملة SQL الخاصة بهذه الطريقة للربط ونلاحظ أنها inner join 2. left outer join والنتيجة هي العناصر المتوفرة في الموردين وغير متوفرة التقاطع إنظر إلى الرسم التوضيح بأشكال فن مرة أخرى . وللنظر إلى جملة SQL الخاصة بهذه الطريقة للربط ونلاحظ أنها left join 3. right outer join والنتيجة هي العناصر المتوفرة في الموظفين وغير متوفرة التقاطع . وللنظر إلى جملة SQL الخاصة بهذه الطريقة للربط ونلاحظ أنها right join ثانياً : الان نأتي لهدف الموضوع الأساس وهو بناء طريقة ربط جديدة بين الجداول وهي FULL OUTER JOIN بحيث تكون النتيجة جميع العناصر من الجدولين يعني الاتحاد set1 Union Set2 Union Set3 حيث Union تعني اتحاد والنتيجة ستكون كما يلي : والطريقة هي بناء استعلام توحيدي لكل المجموعات السابقة والغير المتقاطعة كما يلي : SELECT Suppliers.SupplierName, Suppliers.SupplierCity, Employees.EmplyeeName, Employees.EmployeeCity FROM Employees INNER JOIN Suppliers ON Employees.EmployeeCity = Suppliers.SupplierCity Union all SELECT Suppliers.SupplierName, Suppliers.SupplierCity, Employees.EmplyeeName, Employees.EmployeeCity FROM Suppliers LEFT JOIN Employees ON Suppliers.SupplierCity = Employees.EmployeeCity WHERE (((Employees.EmployeeCity) Is Null)) UNION ALL SELECT Suppliers.SupplierName, Suppliers.SupplierCity, Employees.EmplyeeName, Employees.EmployeeCity FROM Suppliers RIGHT JOIN Employees ON Suppliers.SupplierCity = Employees.EmployeeCity WHERE (((Suppliers.SupplierCity) Is Null)); إلى اللقاء ... مع الاحترام والتقدير FULL_OUTER_JOIN.rar
  22. وعليكم السلام ورحمة الله وبركاته أخي ابا هادي ، بارك الله فيك باسمي واسم كل المهتمين بإدواتك الإبداعية أشكرك على هذه الأدوات المفيدة والرائعة التي تقدمها لنا داعيا الله لك بالتوفيق والسرور والسعادة في الدنيا والأخرة. مع الاحترام والتقدير
  23. السلام عليكم أشكرك أخي المتنور ، الله يزيدك العافية. علماً أن هذه الأضواء ستبقى دائما وبشكل مستمر بإذن الله وبمعدل موضوعين إلى ثلاثة اسبوعيا فالقليل الدائم خير من الكثير المنقطع. مع احترامي وتقديري لك
  24. السلام عليكم إخواني وأخواتي ، بارك الله فيكم جميع. عدت إليكم ... "6- فرز وتصفية سجلات التقرير حسب ما تم تحديده في النموذج" سؤال : عندي نموذج وفي التعامل معه أقوم بالتصفية فيظهر لي جزء من السجلات حسب عوامل التصفية التي احددها ثم اقوم بفرز (ترتيب) هذه السجلات تصاعديا أو تنازليا حسب حقل معين ، وما أريده هو أنه عند الضغط على زر الطباعة للتقرير المتعلق بهذا النموذج أن يطبع لي هذه السجلات تماما حسب عوامل التصفية والفرز التي تم تحديدها في النموذج. الجواب : تلقيت هذا السؤال من عدة أشخاص بأشكال مختلفة فتارة الحديث عن التصفية فقط وتارة عن الفرز(الترتيب) وتارة عن استخدام المعاملات في الحالتين ، والآن أود أن ألقي الضوء على الطريقة النموذجية للتعامل مع هذه المسألة الشيقة والمفيدة للكثيرين. أولا : نقل عوامل التصفية إلى التقرير إن ما يتم تصفيته في النموذج يخزن تلقائيا في FILTER النموذج وما عليك عمله حتى تطبع التقرير بنفس طريقة التصفية التي عملت على النموذج هو بإضافة هذه الفلتر في معلمات التقرير عند طلبه كما يلي : DoCmd.OpenReport "f1", acViewPreview, , Me.Filter حيث f1 اسم التقرير acViewPreview للمعاينة قبل الطباعة ولا تنسى وضع فاصلتين ,, وليس واحدة بعد طريقة العرض acViewPreview وأخير me.filter هي التصفية التي تم تحديدها في وضع الفتح للنموذج وتعمل هذا مع كل أوامر فتح التقارير الموجودة في النموذج مع تغيير اسم التقرير فقط ثانيا : نقل عوامل الفرز إلى التقرير في النموذج ولز الأمر الخاص بمعاينة التقرير تضع في إجراء حدث عند النقر ما يلي : stDocName = "test" DoCmd.OpenReport stDocName, acPreview, , , , Me.OrderBy أرجو الانتباه لعدد الفواصل لأنه مهم جدا. في التقرير وفي حدث الفتح تضع ما يلي : Private Sub Report_Open(Cancel As Integer) Me.OrderBy = Me.OpenArgs Me.OrderByOn = True End Sub النتيجة هي فرز (ترتيب) التقرير حسب نفس الترتيب الذي تم تحديده في النموذج وهذه الطريقة سأسميها "استخدام OpenArgs في ترتيب التقارير بحسب الترتيب في النموذج" ولا تعارض بين الإثنتين ولنقل الفرز والتصفية معا إلى التقرير يتم طلب التقرير كما يلي : DoCmd.OpenReport "f1", acViewPreview, , Me.Filter, , Me.OrderBy مع الإنتباه للفواصل لأنها مهمة جدا . إلى اللقاء ... مع الاحترام والتقدير
×
×
  • اضف...

Important Information