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

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

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

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

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

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

  1. 1. يمكن نسخ السطر الاخضر (الرابط) إلى شريط العنوان في مستكشف الانترنت الخا ص بك ثم ضغط زر (go) الذي بمحاذاة الشريط من الجهة اليمنى. 2. بعدها تظهر لك الصفحة المطلوبة لتنزل منها البرنامج وهذا شكل جزء منها Access Password English trial [version 1.4]: Download (500 Kb) 3. بالضغط على Download سيتم تحميل البرنامج إلى حاسوبك بالتوفيق
  2. 1. أود أن أشكرك أخي أبا هادي على دقتك وعلى تعقيباتك الرائعة (وخصوصا) البرمجية التي يستفاد منها بحق. 2. إن استعمالي لمصطلح نموذج منبثق ليس من واقع تجارب ولا مجازا وإنما هو مسمى قياسيا حيث أنه يستخدم بالعربية في أكسس كخاصية تعطى للنموذج (بنعم أو لا ) . 3. خاصية المنبثق تعني باللغة الانجليزية (Popup) وإذا ما اعطيت لنموذج فإنه يبقى ظاهرا دائما فوق الاطارات الاخرى المفتوحة. وإليك هذان الاقتباسان من شروحات أكسس نفسها: أولا : النماذج والتقارير المنبثقة إنشاء نموذج أو تقرير منبثق قبل القيام بالإجراء التالي، قم بإنشاء النموذج أو التقرير الذي تريده. قم بفتح النموذج أو التقرير في طريقة عرض "التصميم". انقر نقراً مزدوجاً فوق محدد النموذج أو محدد التقرير لفتح صفحة الخصائص. في مربع الخاصية "منبثق"، انقر فوق "نعم". قم بأحد الإجراءات التالية: بالنسبة للنموذج أو التقرير المنبثق غير المشروط إذا كنت تريد أن تتمكن من تغيير حجم النموذج أو التقرير، في مربع الخاصية "نمط_الحدود" ، انقر فوق "رفيع". قم بإنشاء ماكرو أو إجراء حدث لفتح النموذج أو التقرير المنبثق. ملاحظة يحتوي نموذج Suppliers "الموردون" في تطبيق نموذج Northwind على مثال لإجراء حدث يقوم بعرض نموذج منبثق غير مشروط. قم بفتح قاعدة بيانات Northwind في المجلد الفرعي Samples "نماذج" في المجلد Office، ثم قم بفتح نموذج Suppliers "الموردون" في طريقة عرض "التصميم". انقر فوق الزر "إنشاء" بجانب بجانب مربع الخاصية "عند_النقر" للزر "مراجعة المنتجات". للحصول على نموذج أو تقرير منبثق مشروط في مربع الخاصية "مشروط"، انقر فوق "نعم". في مربع الخاصية "نمط الحدود"، انقر فوق "حوار". قم بإنشاء ماكرو أو إجراء حدث لفتح نموذج أو تقرير منبثق. قم بإرفاق إجراء الماكرو أو الحدث إلى نموذج أو تقرير بواسطة تحديد اسم الماكرو أو إجراء الحدث كإعداد لخاصية الإجراء المناسب. على سبيل المثال، اكتب اسم الماكرو أو إجراء الحدث في مربع الخاصية "عند_النقر" لزر الأمر. لتحديد وضع النموذج أو التقرير المنبثق على الشاشة، قم بفتحه في طريقة عرض "التصميم"، وقم بتكبير الإطار Microsoft Access، قم بوضع الإطار حيث تريد، ثم قم بحفظ النموذج أو التقرير. سوف يظهر الإطار المنبثق في هذا الموقع عند فتح النموذج أو التقرير (مع اعتبار أنه تم تعيين الخاصية "توسيط_تلقائي" إلى "لا" وأنك لم تقم بتحديد موقعه في إجراء الحدث الذي يقوم بفتح الكائن المنبثق). ملاحظة إذا أردت استخدام النموذج كنموذج عادي وكذلك مربع حوار، يمكنك استخدام الإعداد "حوار" للإجراء OpenForm لفتح النموذج مؤقتاً كمربع حوار بدلاً من استخدام هذا الإجراء. ثانيا : النماذج الفرعية التنقل بين نموذج رئيسي ونموذج فرعي في طريقة العرض "نموذج" قم بأحد الإجراءات التالية: للتبديل من النموذج الرئيسي إلى نموذج فرعي، انقر فوق أي مكان في النموذج الفرعي. للتبديل من النموذج الفرعي إلى النموذج الرئيسي، انقر فوق أي عنصر تحكم في النموذج الرئيسي (وليس فوق خلفية النموذج الرئيسي). للانتقال من الحقل الأخير في النموذج الرئيسي إلى الحقل الأول في النموذج الفرعي، اضغط TAB. للانتقال من الحقل الأول في النموذج الفرعي إلى الحقل الأخير في النموذج الرئيسي، اضغط CTRL+SHIFT+TAB. للانتقال من الحقل الأخير في النموذج الفرعي إلى الحقل التالي في النموذج الرئيسي أو إلى الحقل الأول في السجل التالي أو الصفحة التالية للنموذج الرئيسي، اضغط CTRL+TAB. إذا كانت الخاصية Cycle للنموذج تم تعيينها إلى السجل الحالي أو الصفحة الحالية، يجب عليك استخدام أزرار التنقل أو طرق أخرى تم توفيرها في النموذج للتنقل إلى السجل التالي. 4. يوجد عندي تعليق أخير على تسمية النماذج الفرعية حيث يسميها البعض وخصوصا في الكتب بالنماذج المرتبطة .
  3. يوجد برنامج أخر يتعامل مع مجموعة العمل (workgroup) موجود في الرابط التالي: http://www.thegrideon.com/accesspass.html
  4. بإمكانك استرجاع كلمة السر لقاعدة البيانات الخاصة بك وكلمات السر لمستخدمي القاعدة وذلك عن طريق (Access Password Recovery Master) من شركة (Pixler) مجانا عن طريق الرابط التالي: http://www.rixler.com/access_password_recovery.htm
  5. خاصية OpenArgs في أكسس 2002 والفائدة منها في التقارير: 1. نسخة أكسس 2002 هي الاولى التي تسمح بنقل القيمة إلى التقارير عن طريق الخاصية OpenArgs. 2. قبل ذلك كانت هذه الخاصية متوفرة فقط للنماذج. 3. طبعا وكما للنماذج فإن التعامل مع هذه الخاصية متوفر فقط من البرمجة (VBA) أو الماكرو. 4. هدف هذه الخاصية هي نقل قيمة إلى التقرير عند فتحه بإستخدم طريقة Docmd.OpenReport 5. الشكل التالي هو المعتمد لإستخدام هذه الخاصية : DoCmd.OpenReport(reportname, view, filtername, wherecondition, windowmode, OpenArgs) 6. مثال أولا: لفتح تقرير البنك وإرسال كلمة Hello له DoCmd.OpenReport "banks", acViewPreview, , , , "hello" ثانيا: للإستفادة من القيمة Hello في التقرير على سبيل المثال كعنوان فنضع في مربع نص العنوان =Reports.banks.OpenArgs الخلاصة : وهكذا كما يتبين لنا أن OpenArgs أصبحت كمتغير لقيمة مررت إلى التقرير يستخدم في كل مكان في التقرير.
  6. 1. لا يجوز وضع أمر طباعة تقرير في حدث (عند عدم وجود بيانات) أو أي حدث أخر داخل التقرير ولذلك نلجأ إلى خطة برمجية 2. الخطة البرمجية هي من 3 خطوات كما يلي : خطوة 1: نعرف متغير منطقي (Boolean) عام Public في وحدة نمطية ولنسميه NoData Public NoData As Boolean خطوة 2: في حدث (عند عدم وجود بيانات) للتقرير الاول نكتب السطر NoData = True خطوة 3: بعدها في عملية طلب التقرير نستخدم المنطق البرمجي التالي : NoData = False DoCmd.OpenReport "report1", acViewPreview If NoData Then DoCmd.Close acDefault DoCmd.OpenReport "report2", acViewPreview End If
  7. بما أنك شرحت أن نسخ الجداول سيتم عن طريق الازرار فأنت ترغب في حل بالبرمجة وفيما يلي الخطوات: 1. صمم الزرين وسميهما الاسماء المناسبة 2. في حدث النقر للز أدخل جمل النسخ المناسبة باستخدام DoCmd.TransferDatabase والتي لها عدة معلمات (Parameters) وهي على الترتيب طريقة النسخ إما إستيراد acImport أو تصدير acExport نوع القاعدة ونكتب "Microsoft Access" اسم القاعدة مع الدليل مثال "C:\My Documents\test.mdb" نوع الكيان المراد نسخه إما جدول acTable أو تقرير acReport وهكذا... اسم الكيان المراد نسخه في القاعدة المصدر مثال "Table1" اسم الكيان النتيجة في القاعدة الهدف مثال "Table2" فتكون الجملة متكاملة على سبيل المثال بالصورة التالية DoCmd.TransferDatabase acImport, "Microsoft Access", _ "C:\My Documents\test.mdb", acTable, "table1", _ "table2" في المثال السابق يتم نسخ الجدول table1 من القاعدة test إلى القاعدة الحالية (المفتوحة) ويتم تسميته table2
  8. بالنسبة للسؤال الثاني: لا يجوز طباعة أكثر من سطر في حقل نص يجب تحويل نوع الحقل إلى مذكرة
  9. السؤال الأول: لا يوجد أية شروط يجب تحقيقها لوضع النموذج الرئيسي والفرعي معا في نموذج واحد ويمكن الاضافة من النموذجين ولحل المشكلة حاول مراجعة ما يلي: 1. أن العلاقة مبنية بين مفتاح أساسي (رئيسي) في الجدول الرئيسي ومفتاح أجنبي في الجدول المرتبط (مسموح فيه التكرار ) أي علاقة 1 ـــ متعدد 2. تأكد من خاصية السماح بالإضافة للنموذج الرئيسي أنها نعم . السؤال الثاني: أنشأ التقرير بناء على نفس الاستعلام أو الجدولين المنشأ عليهما النموذج الرئيسي والفرعي واجعل الحقول الرئيسية (من الجدول الرئيسي) في مقطع رأس الصفحة والحقول المرتبطة ( من الجدول المرتبط) في مقطع التفصيل. إقتراح : لا تحاول حل المشكلة الثانية قبل حل المشكلة الاولى.
  10. من تحليل وفهم السؤال يتضح أن جدول المبيعات للزبائن CustomersSales يحتوي على حقلين أساسيين اسم الزبون ومبلغ المبيعات CustomerName و SalesAmount ويراد أن يعمل استعلام يظهر أن الزبون محمد اشترى بمبلغ مجموعه 90 ( 50+10+30) وهذا الامر يتم كما يلي: من إستعلامات ثم جديد : 1. نختار معالج الاستعلامات البسيطة وثم 2. نختار اسم الجدول المطلوب (CustomersSales) وثم 3. نختار الحقول المطلوب إظهارها ولا ننسى الحقلين الاساسيين CusomerName و SalesAmount ثم 4. نختار استعلام ملخص وثم 5. خيارات الملخص وثم 6. نضع إشارة صح عند مجموع وبعدها 7. موافق وبعدها 8. إنهاء هكذا ينشأ الاستعلام المطلوب الذي يبين بجانب كل زبون مجموع مشترياته. تنويه: واضح من السؤال أن المستفسر لم يأخذ بعين الاعتبار قضية Data Normalization في قواعد البيانات والاسلوب المتبع في معالجة المسألة هو ليس المحبذ ولكنه بكل الاحوال يحل المشكلة.
  11. لربط النموذج الرئيسي بنموذج منبثق (وليس فرعي : لأن النموذج الفرعي له طريقة ربط أسهل ) على نفس الرقم الذي نختاره في مربع التحرير والسرد في النموذج الرئيسي يجب أن ندخل كود بحث في حدث عند التحميل OnLoad للنموذج المنبثق كما يلي: Dim DBsRajabi As Database Dim RstProducts As Object Set DBsRajabi = CurrentDb RstProducts = DBsRajabi.OpenRecordset("select productid والحقول الاخرى from الجدول المطلوب", dbOpenDynaset) RstProducts.MoveLast RstProducts.FindFirst "productid = '" & Me.ADD_ProductID & "'" If Not RstProducts.NoMatch Then RstProducts.Edit عملية التعديل أو الحذف المطلوب إجرائها RstProducts.Update End If RstProducts.Close
  12. يوجد طريقة وهي وضع الجملة التالية في حدث عند التركيز أو حدث في الحال Me.RowHeight = 350 ويوجد خاصية أيضا لعرض العمود توضع في نفس الاحداث المذكورة ME.customerid.ColumnWidth = 800 وعلما أيضا أن ColumnWidth = 0 تخفي العمود ColumnWidth = -1 ترجع العرض المعياري (Default) للعمود بالطبع، RowHeight تعمل لكل سطور وقة البيانات في النموذج الفرعي بينماcolumnwidth تتفاعل مع حقل فقط ، مثال ذلك : me.customerid.columnwidth = 0 لإخفاء حقل رمز الزبون
  13. هل جربت الطريقة التالية : عند عرض التقرير على الشاشة (أي في وضع العرض) ملف --> تصدير... --> حفظ بنوع والانواع المتوفرة كثيرة منها EXCEL 97-2002 HTML SNAPSHOT XML
  14. 1. لا أعتقد أنه يوجد كود لفتح الماكرو في وضع التصميم من داخل البرنامج ( Microsoft Visual Basic Programming) وذلك لانه يختلف عن فتح النموذج على سبيل المثال فالطرق (Methods) التي تفتح في وضع التصميم في VB تبدأ أسماء أوامرها بكلمة Open مثل openform، openquery وهكذا ولكن الامر الطريقة الوحيدة المتوفرة للتامل مع الماكرو هي RunMacro وهذه لا يمكن استخدامها إلا لتنفيذ ماكرو. 2. إذا أردنا أن نبرمج الاوامر المنسدلة من شريط الاوامر الاساسي فإننا نلاحظ أيضا أن الشريط لا يحتوي على أمر لذلك. 3. إذا تفحصنا عناصر ال ActiveX أيضا نلاحظ أنه لا يوجد ما يفيدنا لعمل المطلوب والله أعلم
  15. 1. Echo عبارة عن خاصية تعطي حالة متبدلة لعملية إعادة رسم الشاشة (Screen Repainting) أي True و False. 2. عندما تكون True تظهر عملية إعادة رسم الشاشة أمام المستخدم والعكس صحيح. 3. إستخداماتها : في بعض الحالات وعندما نريد تنفيذ برنامج (كود) كبير نسبيا ويؤثر على عملية إعادة رسم الشاشة وعلى عناصر التحكم الظاهرة (الكنترولات) فإنه من المفضل تحويل Echo إلى False لغاية الانتهاء من البرنامج ومن ثم نرجعها إلى True. 4. خاصية Echo يفضل إستخدامها مع الكيان Application وكانت سابقا في 1995 تستخدم مع الكيان DoCmd. 5. كيفية إستخدامها المثلى: Application.echo false call the Program Application.echo true
  16. حل السؤال المتعلق بترميز أرقام البنوك لكل بنك رقم تسلسلي لوحده، لقد ذكرت في شرحك أن dmax لا تعمل وإليك البديل البرمجي التالي : 1. من فهم السؤال يتضح أن قاعدة البيانات تحتوي على جدول البنوك Banks والذي يحتوي بشكل أساسي على حقلين رمز البنك BankID و اسم البنك BankNam وهو مفهرس مع سماح التكرار ورمز البنك مفتاح غير رئيسي حيث يسمح بتكرار الرقم للبنوك المختلفة والمطلوب عمل ترميز تسلسلي مستقل لكل بنك 2. في حدث بعد التحديث AfterUpdate نضع الكود التالي: Private Sub BankName_AfterUpdate() On Error Resume Next Dim DBsRajabi As Database Dim RstBanks As Recordset Set DBsRajabi = CurrentDb Set RstBanks = DBsRajabi.OpenRecordset("select bankid,bankname from banks ", dbOpenSnapshot) Max = 0 With RstBanks .MoveFirst Do While Not .EOF If .Fields(0) > Max And Trim(.Fields(1)) = Trim(Me.BankName) Then Max = .Fields(0) .MoveNext Loop End With Max = Max + 1 RstBanks.Close Me.BankID = Max End Sub
  17. يتضح من تحليل وفهم السؤال المتغيرات التالية: تاريخ التعيين في العمل EmploymentDate تاريخ الاحتساب الحالي CurrentDate عمر الموظف Age الرصيد Balance الشهور التي مضت على تعيين الموظف Months رصيد الاجازة العارضة ABalance 1. حل المشكلة الاولى أولا : معادلة حساب العمر بالسنوات هي Me.age = DateDiff("yyyy", Me.EmploymentDate, Me.currentdate) ثانيا : معادلة احتساب الرصيد هي Me.balance = IIf(Me.months >= 6, IIf(Me.age >= 50, 50 * 21 + (Me.age - 50) * 30, Me.age * 21), 0) 2. حل المشكلة الثانية إذا اردنا تعديل رصيد الاجازة العارضة فنعمل حسب الخوارزمية التالية: 1. x = عدد أيام الاجازة العارضة + رصيد الاجازة العارضة 2. y = ناتج قسمة x على 6 3. معادلة الاجازة العارضة هي ABalance= iif(y>=1,6,x) وأقترح وضع المعادلات جميعها في حدث عند النقر لز أمر يتم إنشائه وتسميته حساب الاجازة
  18. أقترح ضغط البرنامج قبل محاولة تحويله وذلك من أدوات --> أدوات مساعدة لقواعد البيانات --> ضغط قاعدة البيانات وإصلاحها
  19. 1. يوجد خطأ في الكود المذكور ونلاحظ ذلك بعد التمعن في شكلي أمر Insert Into Syntax Multiple-record append query: INSERT INTO target [(field1[, field2[, ...]])] [IN externaldatabase] SELECT [source.]field1[, field2[, ...] FROM tableexpression [sql] Single-record append query: INSERT INTO target [(field1[, field2[, ...]])] VALUES (value1[, value2[, ...]) 2. لا يجوز استخدام كلمة Select إذا اردنا إضافة سجل واحد فقط إلى الجدول وهو ما عمل في المثال المطروح من المستفسر
  20. افتراضات الحل 1. جدول فيه البضائع رموزها وأسمائها وأسعارها والباركود ولنقل Products وطبعا جدول البضائع فيه حقل لعدد الملصقات المطلوبة. 2. جدول لشكل ورقة الملصقات ولنسميه Labels وهنا إفترضت أن الورقة تحتوي على 3 ملصقات عرضيا وكل ملصق يحتوي عل ثلاث سطور بيانات يتم تعبئة الجدول بناء على الضغط على زر الامر PrintLabels 3. تصميم التقرير Labels بناء على الجدول Labels الكود المبنى على الافتراضات السابقة هو ما يلي: Private Sub PrinLabels_Click() ' Code for Printing Labels On Error Resume Next Dim DBsRajabi As Database Dim RstProducts As Recordset Dim rstLabels As Recordset On Error GoTo NoRecors_Err Set DBsRajabi = CurrentDb Set RstProducts = DBsRajabi.OpenRecordset("SELECT Productid, productname,Barcode,NoLabels from Products ", dbOpenSnapshot) ' Fields(0) = Productid , Fields(1) = Productname , Fields(2) = barcode , Fields(3) = NoLabels Set rstLabels = DBsRajabi.OpenRecordset("Labels", dbOpenDynaset) ' The following query will clear the labels table (delete all records) DoCmd.OpenQuery "labels_delete Query" CC = 1 rstLabels.AddNew With RstProducts 'Populate Recordset. .MoveLast .MoveFirst Do While Not .EOF For I = 1 To .Fields(3) ' Fields(3) from Products = # of labels wanted If CC = 4 Then CC = 1 rstLabels.Update rstLabels.AddNew End If Select Case CC Case 1: rstLabels!label1_line1 = .Fields(0) rstLabels!label1_line2 = .Fields(1) rstLabels!label1_line3 = .Fields(2) Case 2: rstLabels!label2_line1 = .Fields(0) rstLabels!label2_line2 = .Fields(1) rstLabels!label2_line3 = .Fields(2) Case 3: rstLabels!label3_line1 = .Fields(0) rstLabels!label3_line2 = .Fields(1) rstLabels!label3_line3 = .Fields(2) End Select CC = CC + 1 Next I .MoveNext Loop .Close End With rstLabels.Update rstLabels.Close DBsRajabi.Close DoCmd.OpenReport "Labels", acViewPreview Exit Sub NoRecors_Err: MsgBox "No Labels to Print", vbCritical End Sub
  21. 1. ننشأ الجدول ولنسميه Trains ونضع فيه لنقل 5 حقول Day1, Day2, Day3, Day4, Day4 كلها من نوع رقم وحجم الحقل بايت ورمز خاص بالقطار يميز كل قطار عن غيره ولنقل TrainId من نوع نص وحجم الحقل لنقل 10 وهذا هو بالطبع المفتاح الرئيسي للجدول. 2. ننشأ النموذج الذي سندخل فيه تاريخ المغادرة ولنسميه FromDate وتاريخ الرجوع ولنسميه ToDate (وطبعا التاريخ يشمل اليوم والساعة) ويجب أن يكون في النموذج بالطبع رمز القطار TrainId وهو عبارة عن مربع تحرير وسرد بحثي. 3. بعد تعيين القطار المطلوب الحساب له من خلال TrainId وتحديد تاريخ المغادرة والرجوع نضغط على زر أمر نسميه ComputeDays يصمم ليقوم بالعملية الحسابية المطلوبة في السؤال ونضع الكود التالي في حدث (عند النقر) لذلك الزر Private Sub ComputeDays_Click() ' Compute the difference between the two dates in hours D = DateDiff("h", Me.FromDate, Me.ToDate) ' Reset the days in the table Me.Day1 = 0 Me.Day2 = 0 Me.Day3 = 0 Me.Day4 = 0 Me.Day5 = 0 ' The main loop For c = 1 To 5 If D / 24 > 1 Then ' This condition to check for days Select Case c Case 1: Me.Day1 = 24 Case 2: Me.Day2 = 24 Case 3: Me.Day3 = 24 Case 4: Me.Day4 = 24 Case 5: Me.Day5 = 24 End Select Else ' This else is for days Select Case i Case 1: Me.Day1 = D Case 2: Me.Day2 = D Case 3: Me.Day3 = D Case 4: Me.Day4 = D Case 5: Me.Day5 = D End Select Exit For End If D = D - 24 Next c End Sub
  22. بإمكان المبرمج إغلاق النموذج المفتوح بناء على فترة زمنية لم يستخدم فيها المستخدم الحاسوب سواء الفأرة (Mouse) أو لوحة المفاتيح (Keyboard) وذلك بتعريف عدة أحداث كما يلي: 1. حدث عند التحميل OnLoad Private Sub Form_Load() Me.TimerInterval =20 'تعريف الوقت المطلوب قبل الانهاء End Sub حيث أن TimeInterval هو زمن الانتظار قبل الإغلاق بالمللي ثانية 2. حدث عند عداد الوقت FormTimer Private Sub Form_Timer() DoCmd.Quit 'للخروج من النموذج End Sub 3. حدث عند النقر Click وحدث عند الضغط على مفتاح Private Sub Form_Click() Me.TimerInterval = 20 ' إعادة تعريف الوقت End Sub Private Sub Form_KeyPress(KeyAscii As Integer) Me.TimerInterval = 20 ' إعادة تعريف الوقت End Sub
×
×
  • اضف...

Important Information