توقيت مدينة القدس الشريف

 مكتبة تعليم أكسس

Education Library Accessــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

   Upload and download files تحميل وتنزيل الملفات                                                       Upload Files رفع ملفات

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

-: المواضيع

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

إنشاء استعلام مخفي وإنشاء نموذج مبني علي الاستعلام

نعرف أنة عند إنشاء نموذج لإدخال البيانات أن هذا النموذج يكون مبني علي بيانات موجودة بجدول ويكون مصدر البيانات للنموذج أو قد يكون مبني علي إستعلام وفي كلا الحالتين يكون مصدر البيان للنموذج معروف وكائن ضمن كائنات قاعدة البيانات أو قد يكون النموذج غي منضم وسبق ان شرحنا كيفية إنشاء نموذج غي منضم

لكن أن يكون النموذج مبني علي إستعلام يتم إنشاءة عند فتح النموذج وبعد ان يتم إجراء اللازم من قبل المستخدم سواء إدخال بيانات أو تعديل فيها وعند إغلاق النموذج يتم حذف الاستعلام من قاعدة البيانات فهذا هو الموضوع الذي سوف نقوم بشرحة

   في قاعدة البيانات قم بإنشاء جدول وسمه كما تشاء

tbl1 إسم جدول البيانات وبة مجموعة حقول يمكنك معرفتها بعرض تصميم الجدول

في الوحدات النمطية إنشئ وحدة نمطية جديدة بها الكود التالي

Sub CreateIt()

' إنشاء الاستعلام QryRate المبني علي الجدول tbl1
    Dim qdf As Object
    Set qdf = CurrentDb.CreateQueryDef("QryRate", "SELECT SN,Name,Age,Rhour,Whour, [whour]*[RHour] AS TRate FROM tlb1;")

End Sub

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

Sub DeleteIt()

' حذف الاستعلام بعد إغلاق النموذج
    CurrentDb.QueryDefs.Delete "QryRate"
End Sub
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

صمم النموذج وضع الحقول المطلوبة دون تحديد مصدر السجل للنموذج أما بانسبة للحقول فحدد مصدر عنصر التحكم حسب الحقول الموجودة بالجدول وبنفس المسمى 

ثم وفي حدث عند التحميل ضع الكود التالي

 Private Sub Form_Load()
   CreateIt                            ' إستدعاء الوحدة النمطية الجزء الخاص بإنشاء الاستعلام
   Me.RecordSource = "QryRate"    ' تحديد مصدر السجل للنموذج
   DoCmd.GoToRecord , , acNewRec
   t.Value = "سجل جديد"

End Sub
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

وفي حدث عند الاغلاق ضع الكود التالي

Private Sub Form_Close()
   DeleteIt             ' إستدعاء الوحدة النمطية الجزء الخاص بحذف الاستعلام
End Sub

والمثال المرفق يوضح ذلك

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

  كيف يمكن تغير لون النموذج حسب رغبة المستخدم

عندما نقوم بتصميم قاعدة بيانات فإن المبرمج يقوم بإختيار ألوان النماذج حسب رغبتة وحسب إختيارة للالوان التي براها مناسبة من وجهة نظرة ولكن قد تختلف رغبة مستخدمي البرنامج فيطلبوا أن تكون الالوان بخلاف ذلك وحسب رغبتهم وهذا يكلف الجهد الكبير في تغير الالوان ولكن إن تغلبت علي هذة المشكلة من البداية وأخذت ذلك في الاعتبار عند تصميم نماذجك تكون قد وفرت علي نفسك الجهد والعناء وحققت رغبة مستخدمي البرنامج وأضفت ميزة لبرنامجك وأظهرتة بشكل جميل

سوف نقوم بشرح إمكانية تغير لون النموذج بطريقتين ومرفق مثال يوضح ذلك

الطريقة الاولي  : إنشئ جدول خاص بالالوان وجميعنا يعرف أن الالوان يتم التعامل معها برقم يمثل كل لون من الالوان فمثلا الاسود يأخذ الرقم 0 والاحمر يأخذ الرقم 255 وهكذا

ss علي النموذج ضع مربع خانة بحجم النموذج وسمه

R ضع مربع تحرير وسرد يأخذ قيمة من جدول الالوان وسمه

ثم في حدث عند فتح النموذج أكتب الكود التالي

       Private Sub Form_Open(Cancel As Integer)
       Me!SS.BackColor = 16506566   '     سماوي
       Me!v.BackColor = Me!SS.BackColor      '  تغير لون الشيط السفلي بلون النموذج

       Me!D.ForeColor = 0         ' إظهار التاريخ باللون الاسود
       Me!T.ForeColor = 0         ' إظهار الساعة باللون الاسود
       R.Visible = False            ' إخفاء مربع التحرير والسرد
       End Sub

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

في حدث عداد الوقت إكتب الكود التالي 

          Private Sub Form_Timer()
          Me!T = Time

       '   تغيير لون النموذج

         If (Me!T = #9:30:00 AM#) Then
         Me!SS.BackColor = 13027071
         ElseIf (Me!T = #1:40:00 PM#) Then
         Me!SS.BackColor = 1200
         End If

         End Sub

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

إختار مربع التحرير والسرد وفي حدث بعد التحديث ضع الكود التالي

    Private Sub R_AfterUpdate()
    Me!SS.BackColor = Me!R    '  جعل لون النموذج حسب قيمة اللون المدخلة في مربع التحرير والسرد 
    Me!v.BackColor = Me!R 

'  تغيير الوان العناصر الاخرى لتتوافق مع اللون المختار وإخفاء بعض العناصر وإظهار أخرى       

         If R < 1 Or R > 255 Then
         Me!D.ForeColor = 0  '     أسود     
         Me!T.ForeColor = 0
         Me!tc.ForeColor = 0
         Me!l.ForeColor = 0

         DoCmd.GoToControl "Id"
         R.Visible = False
         tc.Visible = True
         Else
         Me!D.ForeColor = 16777215  '    أبيض
         Me!T.ForeColor = 16777215
         Me!tc.ForeColor = 16777215
         Me!l.ForeColor = 16777215

         DoCmd.GoToControl "Id"
         R.Visible = False
         tc.Visible = True

         End If
         End Sub

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

الطريقة الثانية : فهي تتمثل في عمل مربعات للالوان يمثل كل مربع لون معين وننشئ جدول لتخزين قيمة اللون فية ثم نضع الاكواد التالية

في حدث عند التحميل للنموذج

    Private Sub Form_Load()
    Me!SS.BackColor = Me!R
    Me!v.BackColor = Me!R

    End Sub

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

في حدث عداد الوقت للنموذج

      Private Sub Form_Timer()
      Me!T = Time
      If (Me!T = #9:30:00 AM#) Then
      Me!SS.BackColor = 16744448
      Me.Color = "16744448"
      stDocName = "Q1"
      DoCmd.SetWarnings off

       '    إدخال قيمة اللون وحفظها في جدول اللون A

      DoCmd.OpenQuery stDocName, acNormal, acEdit
      DoCmd.RunSQL "INSERT INTO A(Color)SELECT Color AS Color;"
      Me!v.BackColor = Me!Color

      ElseIf (Me!T = #1:24:00 PM#) Then
      Me!SS.BackColor = 1200
      Me.Color = "1200"
      stDocName = "Q1"
      DoCmd.SetWarnings off

      DoCmd.OpenQuery stDocName, acNormal, acEdit
      DoCmd.RunSQL "INSERT INTO A(Color)SELECT Color AS Color;"
      Me!v.BackColor = Me!Color

      End If
      End Sub

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

في حدث عند النقر علي مربع اللون نضع الكود التالي لكل مربع لون مع مراعاة تغير قيمة اللون

      Private Sub s2_Click()
      Me!SS.BackColor = 16744448
      Me!D.ForeColor = 16777215  'أبيض 
      Me!T.ForeColor = 16777215

      Me.Color = "16744448"
      stDocName = "Q1"
      DoCmd.SetWarnings off

      DoCmd.OpenQuery stDocName, acNormal, acEdit
      DoCmd.RunSQL "INSERT INTO A(Color)SELECT Color AS Color;"
      Me!v.BackColor = Me!Color

      End Sub
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

والمثال التالي يوضح كلتا الطريقتين

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

إخفاء وإظهار الجداول والكائنات الاخري في قاعدة البيانات

الاستعلامات - النماذج -الماكرو - الوحدات النمطية - التقارير

 

قاعدة بيانات أكسس هي من قواعد البيانات التي تشمل جميع الكائنات سواء الجداول والنماذج والتقارير والاستعلامات والوحدات النمطية داخل إطار واحد وهو إطار قاعدة بيانات أكسس وبالتالي فإنة من السهولة الوصول الي محتوي قاعدة البيانات وإكتشاف محتوياتها ملم يكون هناك نوع من أنواع الحماية لقاعدة البيانات لمنع المستخدم الي الوصول الي كائنات القاعدة واسلوب الاخفاء لهذة الكائنات من الامور التي قد تصعب من مهمة الي مستخدم عادي للبرنامج من العبث بمحتويات الجداول من البيانات

 

MDE وكذلك لو تم تحويل قاعدة البيانات كنوع من الحماية الي الصيغة

فإنة من السهل الوصول الي جداول البيانات والعبث بها لذلك فإن إخفاء الجداول تكون طريقة مثلي لحماية البيانات وكذلك إخفاء باقي الكائنات كنوع من أنواع الحماية لها من العبث وتغير محتواها

وقد تسأل وماذا نفعل إن أردنا تعديل أوإضافة الي البرنامج حسب متطلبات العمل فكيف يمكن إظهار الكائنات حتي نجري عليها التعديل أو الاضافة

والجواب هو موجود في العنوان إخفاء وإظهار الكائنات ولكن يجب عليك أن تكون صلاحية الاخفاء والاظهار الي المسؤول عن البرنامج وليس من إختصاص المستخدمين وبالتالي يتم عمل كلمة سر لفتح هذا النموذج الخاص بعملية الاخفاء والاظهارللكائنات

والمثال المرفق يوضح كيفية إخفاء كل نوع من أنواع الكائنات التي تشتمل عليها قاعدة البيانات وكذلك كيفية إظهارها وإمكانية إخفاء وإظهار الكائنات جميعا ويمكنك نسخ كود إخفاء الكائنات جميعا ووضعة في حدث عند التحميل للنموذج الرئيسي ليتم عند فتحة إخفاء كل الكائنات

ونسخ كود إظهار كل الكائنات ووضعة في حدث عند الفتح لنموذج خاص بالمسؤول عن البرنامج ليتم إظهار كل الكائنات المخفية

هذا الكود يوضع عند التحميل أو عند الفتح للنموذج

 

Private Sub Form_Load_Click()
Call hiddenobj
Call TQ_hidden
DoCmd.OpenForm "mainfrm"

End Sub

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ 

Private Sub Form_open_Click()
Call objshow
Call TQshow
DoCmd.OpenForm "mainfrm"
End Sub

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ  

كود إخفاء النماذج والماكرو والوحدات النمطية والتقارير

 

Function hiddenobj()
Dim obj As AccessObject
Dim dbs As Object
Dim qry As QueryDefs
Set db = CurrentDb

Set dbs = Application.CurrentProject
For Each obj In dbs.AllReports
SetHiddenAttribute acReport, obj.Name, True
Next obj
For Each obj In dbs.AllMacros
SetHiddenAttribute acMacro, obj.Name, True
Next obj
For Each obj In dbs.AllModules
SetHiddenAttribute acModule, obj.Name, TrueNext obj
DoCmd.Close
For Each obj In dbs.AllForms
SetHiddenAttribute acForm, obj.Name, True
Next obj

Application.SetOption "Show Hidden Objects", 0
Application.SetOption "Show System Objects", 0

End Function

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

كود إظهار النماذج والماكرو والوحدات النمطية والتقارير

Function objshow()
    Dim obj As AccessObject
Dim dbs As Object
Dim qry As QueryDefs
Set db = CurrentDb

Set dbs = Application.CurrentProject
For Each obj In dbs.AllReports
SetHiddenAttribute acReport, obj.Name, False
Next obj
For Each obj In dbs.AllMacros
SetHiddenAttribute acMacro, obj.Name, False
Next obj
For Each obj In dbs.AllModules
SetHiddenAttribute acModule, obj.Name, False
Next obj
DoCmd.Close
For Each obj In dbs.AllForms
SetHiddenAttribute acForm, obj.Name, False
Next obj

End Function

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

كود إخفاء الجداول والاستعلامات

 

Function TQ_hidden()
Dim db As Database
Dim obj As AccessObject, dbs As Object

Dim tdf As TableDef
Dim qry As QueryDefs
Set dbs = Application.CurrentData
Set db = CurrentDb
For Each obj In dbs.AllTables
Set tdf = db.TableDefs(obj.Name)

If Left(tdf.Name, 4) <> "msys" And tdf.Attributes <> 1073741824 Then
tdf.Attributes = tdf.Attributes + dbHiddenObject
End If
Next

For Each obj In dbs.AllQueries
SetHiddenAttribute acQuery, obj.Name, True
Next obj

Application.SetOption "Show Hidden Objects", 0
Application.SetOption "Show System Objects", 0
Set tdf = Nothing
db.Close
Set db = Nothing

End Function
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

كود إظهار الجداول والاستعلامات

 

Function TQshow()
 Dim db As Database
Dim obj As AccessObject, dbs As Object
Dim qry As QueryDefs
Set dbs = Application.CurrentData
Set db = CurrentDb

For Each obj In dbs.AllQueries
SetHiddenAttribute acQuery, obj.Name, False

Next obj
    Set dbs = CurrentDb
    For Each tdf In dbs.TableDefs
    If Left(tdf.Name, 4) <> "msys" And tdf.Attributes <> 1073741824 _
    And tdf.Attributes = 1 Then
            tdf.Attributes = tdf.Attributes - dbHiddenObject

    End If
    Next tdf
    Set dbs = Nothing

db.Close
Set db = Nothing

End Function

واليك المثال المرفق

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

إخفاء وإظهار الجداول المرتبطة

 

من الطرق التي يلجا لها مسؤول قاعدة البيانات للحفاظ علي جداول البيانات خوفا من ان يقوم المستخدم من حذف أحد الجداول بطريق العمد او الخطا هو تقسيم قاعدة البيانات الي قسمين الاولي بها الجداول والثانية بها بافي الكائنات نماذج واستعلامات وتقارير وغير ذلك من الكائنات ثم يقوم بربط قاعدة واجهة البرنامج بجداول القاعدة الاولي وتسمي في هذة الحالة بالجداول المرتبطة ويظن البعض أنة بهذة الطريقة قد حمي الجداول من العبث بها أو العبث ببياناتها وهذا غير صحيح فإذا لم تكن هناك طرق حماية للبيانات من الحذف والتعديل فإن المستخدم يستطيع العبث بالبيانات صحيح أنة في حالة حذف أحد الجداول فإنة يحذف الارتباط بالجدول فقط أما الجدول الاساسي فيبقي كما هو لانه موجود بقاعدة أخري

وكما أمكن إخفاء الجداول والكائنات في قاعدة البيانات فإنة من الممكن إخفاء الجداول المرتبطة وإظهار عند الحاجة لها

كود إخفاء الجداول المرتبطة

Private Sub hide_link_Table_Click()
Dim db As Database
Dim tdf As TableDef
Set db = CurrentDb
For Each tdf In db.TableDefs
If tdf.Attributes = 1073741824 Then tdf.Attributes = 1
Next
txt.Value = " تم إخفاء الجداول المرتبطة بنجاح"
    txt.ForeColor = 255

db.Close
Set tdf = Nothing
Set db = Nothing

End Sub
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

كود إظهار الجداول المرتبطة

Private Sub show_link_Table_Click()
Dim dbs As Database, tdf As TableDef
   
    Set dbs = CurrentDb
    For Each tdf In dbs.TableDefs
    If Left(tdf.Name, 4) <> "msys" _
    And tdf.Attributes = 1 Then
            tdf.Attributes = tdf.Attributes - dbHiddenObject
    End If
    If tdf.Attributes = 1073741825 Then tdf.Attributes = 0
    Next tdf
    txt.Value = " تم إظهار الجداول المرتبطة بنجاح"
    txt.ForeColor = 170055
    Set dbs = Nothing


End Sub

والمثال التالي يشرح طريقة التعامل مع الجداول المرتبطة

 

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

حذف الجداول

من الامور التي يحتاجها المبرمج والتي يمكن ان يلجا اليها وخاصة إذا كان بصدد عمل نسخ من البرنامج تعمل لفترة محدودة كنسخ تجريبية تم تعطيلها هو اسلوب حذف جداول البيانات وبالتالي يتم تدمير قاعدة البيانات ولاتعمل باقي الكائنات الموجودة بقاعدة البيانات نظرا لارتباطها بالجداوال التي بنيت علي اساسها

ولحذف الجداول من قاعدة البيانات أكتب الكود التالي

 

Function TableDelete()
On Error Resume Next
Dim MyDb As Database
Dim MyTable As TableDef
Dim MyTableCount As Integer

Set MyDb = Application.CurrentDb
MyTableCount = MyDb.TableDefs.Count
For I = MyTableCount - 1 To o Step -1
Set MyTable = MyDb.TableDefs(I)
MyTableName = MyTable.Name
If Left$(MyTableName, 4) <> "Msys" Then MyDb.TableDefs.Delete (MyTableName)
Next
MyDb.Close
End Function

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

ثم أكتب الكود التالي في حدث عند الفنح للنموذج الرئيسي

 

Private Sub Form_Open(Cancel As Integer)
On Error GoTo MyErr:

Dim MyFirst As Date
Dim MyInDate
Dim MyTableName As String
MyInDate = DFirst("[startdate]", "[timetbl]")
If Not IsNull(MyInDate) Then
MyFirst = MyInDate
txt.Value = "هذة النسخة تجريبية لمدة 15 يوم"
txt.ForeColor = 1602135
Else

DoCmd.SetWarnings False
DoCmd.RunSQL ("INSERT INTO timetbl ( startdate ) SELECT Date() ;")
DoCmd.SetWarnings True
MyFirst = Date
txt.Value = "سيتم تشغيل النسخة التجريبية لمدة 15 يوم من تاريخة"
txt.ForeColor = 0
End If

If MyFirst <= Date - 15 Then
txt.Value = "إنتهت الفترة التجريبيو وسيتم وقف البرنامج"
txt.ForeColor = 255
Call TableDelete
Else
If MyFirst > Date Then
txt.Value = "تم التلاعب بتاريخ البرنامج وسيتم إيقافة"
Call TableDelete
End If
End If
Exit Sub

MyErr:
If Err.Number = 3078 Then
txt.Value = "تم وقف البرنامج"
txt.ForeColor = 255
Quit
Else

MsgBox Err.Number & vbCrLf & Err.Description
End If

End Sub

 

والنثال يوضح الفكرة

 

 

 

 

جــــــديد

 

<   التالي                  السابق   >

 

    الملفات         عامة         فلسطين        أخرى

   الرئيسية        الصور         المقالات   

 
Make a Free Website with Yola.