الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ماهي صيغة كود الفرز ؟

بدأه kafi في 27 يوليو 2014 · 20 رد · 2,682 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

 

السلام عليكم ورحمة الله وبركاته

 

لدي نموذج فرعي موضوع على نموذج رئيسي

ارغب بوضع زرين على النموذج الرئيسي من اجل المساعدة على فرز السجلات اما حسب الاسم او حسب التاريخ

 

اسم النموذج الرئيسي

Beda_Oal_Modah_List

 

اسم النموذج الفرعي

Beda_Oal_Modah_Sub

 

علماً ان النموذج الفرعي يأخذ بياناته من استعلام اسمه

Beda_Oal_Modah_Q1

 

الفرز حسب حقل الاسم (beda)

 

الفرز حسب حقل التاريخ هو (date-sales)

 

ارجو المساعدة في كتابة الاكواد

والف الف شكر

 

post-32358-0-86710200-1406464871_thumb.j

#2

السلام عليكم أخي العزيز ورحمة الله وبركاته

كل عام وأنتم بخير

يكفي أن تضع الكود التالي :

Docmd.SetOrderBy "Date ASC"

or

Docmd.SetOrderBy "Date Desc"
#3

شكرا اخي khodor

على اجابتك

 

ولكن الكود الذي تفضلت به لم يعمل

 

ارفقت مثال من اجل ان تتم المحاولة عليه
ارجو التعديل عليه

 

والف شكر

 

Q01.rar

#4

وعليكم السلام :)

 

الطريقة اللي انا استعملها هي ان اضغط على اسم الحقل مرة فيكون الفرز تنازلي وعند الضغط مرة ثانية يصير الفرز تصاعدي :) ،

لهذا ، فاني اضع اللون الاحمر لآسماء الحقول اللي فيها ميزة الفرز ، حتى يعرفها المستخدم :)

 

هذه الصورة المتحركة تشرح العملية (واذا لم تتحرك الصورة ، اضغط عليها وستتحرك :) ) :

 

post-273849-0-88877300-1406487290_thumb.

 

 

وهذا الكود لكل حقل:

Private Sub Label0_Click()

    Me.OrderBy = DoubleClick_Sort("Auto_ID")
    Me.OrderByOn = True

End Sub

Private Sub Label1_Click()

    Me.OrderBy = DoubleClick_Sort("Auto_Date")
    Me.OrderByOn = True

End Sub

Private Sub Label2_Click()

'note we are sorting the Full_Name with the DOB
    Me.OrderBy = DoubleClick_Sort("Full_Name") & ", DOB"
    Me.OrderByOn = True

End Sub

Private Sub Label3_Click()

    Me.OrderBy = DoubleClick_Sort("DOB")
    Me.OrderByOn = True

End Sub

Private Sub Label4_Click()

    Me.OrderBy = DoubleClick_Sort("Mobile")
    Me.OrderByOn = True

End Sub

وهذه الوحدة النمطية التي تقوم بالعملية:

Option Compare Database
Public Last_Clicked As String


Public Function DoubleClick_Sort(ctl_Name)
'
'use1: Sort the field Name1 (Asc and then Desc)
'Me.OrderBy = DoubleClick_Sort("Name1")
'Me.OrderByOn = True
'
'use1: Sort the field Print_it (Asc and then Desc) , the field Sequence in Asc , the field Name1 in Asc order
'Me.OrderBy = Me.OrderBy = DoubleClick_Sort("Print_it") & ", Sequence, Name1"
'Me.OrderByOn = True
'

    'Last_Clicked control have the following syntax: Control_Name|Asc or Desc
    sBar = InStr(Last_Clicked, "|")
    
    If sBar > 0 Then
        'extract the field name and the orderby
        sLastControl = Mid(Last_Clicked, 1, sBar - 1)
        sOrderby = Mid(Last_Clicked, sBar + 1)

        'now lets see if the same control was clicked last
        If sLastControl = ctl_Name Then
        
            'a control name exists
'           MsgBox sLastControl & vbCrLf & sOrderby
            If sOrderby = "Desc" Then
                sOrderby = "Asc"
            Else
                sOrderby = "Desc"
            End If
            
            'save the opposite sort order
            Last_Clicked = ctl_Name & "|" & sOrderby
       Else
            Last_Clicked = ctl_Name & "|Asc"
       End If
        
    Else
        'it doesn't exist
        Last_Clicked = ctl_Name & "|Asc"
    End If
    
    DoubleClick_Sort = ctl_Name & " " & sOrderby

End Function

فكل اللي تعمله انك تضع الوحدة النمطية في البرنامج مرة واحدة ، ثم لكل حقل تعمل له الحدث :)

 

جعفر

228.Sort.mdb.zip

1
#5

الآن لاحظت ان لديك نموذج فرعي ، وهو بصيغة ورقة بيانات (اي انه لا يوجد حدث عند الضغط على اسم الحقول :(

 

هذا كود فرز التاريخ (ولوسمحت ان تلصق الوحدة النمطية من ردي اعلاه) :

Private Sub امر39_Click()
'DoCmd.SetOrderBy "Date Desc"

    Me.Beda_Oal_Modah_Sub.Form.OrderBy = DoubleClick_Sort("date-sales")
    Me.Beda_Oal_Modah_Sub.Form.OrderByOn = True

End Sub

جعفر

1
#6

بارك الله فيكم اخواني khodor و جعفر و جزاكم الله خير الجزاء و جعل ما تقدمونه في موازين حسناتكم .. اللهم آمين

 

و كل عام و الجميع بخير و عافية

 

ارفق مثال للفائدة  للفرز باي حقل بالنقر عليه و استخدام زر امر واحد لفرز الحقل تصاعديا و تنازلياً و ذلك بالإستفادة من الخاصية Tag  لزر الامر و بتعيين قيمها بحدث عند النقر لمربع النص.

 

طبعاً المثال لنموذج رئيسي ويمكن الاستفادة من الفكرة لعملها على النموذج الفرعي.

 

 

بالتوفيق للجميع

sort _2003.rar

#7

السلام عليكم أخي العزيز ورحمة الله وبركاته

تفضل لقد تم حل المشكلة

 

khodor-Q01.rar

1
#8

شكرا على اهتمامك أستاذي العزيز المشرف يوسف أحمد.

1
#9

كل عام وانتم بخير

اخواني الكرام

 

شكرا على تفاعلكم معي...بارك الله فيكم

 

تم تجريب طريقة الاخ جعفر

والحمد لله عملت بنجاح

 

تم تجربت طريقة الاخ khodor

والحمد لله عملت بنجاح

 

ولكن في كلا الطريقتين وجدت مشكلة، تتمثل فيما اذا اردت اضافة زر اخر بحيث احصل على فرز السجلات حسب تسلسل ادخالها اي حسب x-id

 

كتبت الكود التالي وفق طريقة الاخ khodor

Me.Beda_Oal_Modah_Sub.Form.OrderBy = "x-id Desc"
Me.Beda_Oal_Modah_Sub.Form.OrderByOn = True

ولكن لم ينجح الامر....؟؟؟؟

 

 

وكذلك كتب الكود التالي وفق طريقة الاخ جعفر

Me.Beda_Oal_Modah_Sub.Form.OrderBy = DoubleClick_Sort("x-id")
    Me.Beda_Oal_Modah_Sub.Form.OrderByOn = True

وايضا الامر لم ينجح

 

ارجو المساعدة في تمكيني بان افرز السجلات حسب تسلسل ادخالها

 

بارك الله فيكم

والف شكر

 

Q01 A _ Khodor.rar

Q01 -B-Jaffer.rar

#10

اخي :)

 

برنامج الاكسس لا يحب بعض الاسماء ، ومن هذه الاسماء تلك التي فيها علامة الناقص مثل x-ID ، لهذا ننصح بعدم استخدام هي العلامة في مسميات الحقول :)

الافضل دائما استخدام اسم مثل x_ID :)

 

في حالتك ، ولحل مشكلتك ، خلي اسم الحقل بين قوسين مربعين هكذا:  [x-ID]

يعني الكود سيصبح:

DoubleClick_Sort("[x-id]")

ولاحظت انك عملت تغيير في الوحدة النمطية ، حيث ان برنامجي يعمل فرز تصاعدي ، وعند الضغط ثانيا يعمل الفرز تنازليا ، وانك الغيت الفرز تصاعدياَ !!

على العموم هذا راجع لك :)

 

 

جعفر

تم تعديل هذه المشاركة بواسطة jjafferr في 28 يوليو 2014 في 02:26

1
#11

السلام عليكم

 

شكرا اخي جعفر على تواصلك

بارك الله فيك

 

تم تجريب ماتفضلت به بان اضع اسم الحقل x-id ضمن قوسين

ولكن الامر لم ينجح

 

ارجو التعديل على المثال المرفق

 

والف شكر

 

post-32358-0-88044200-1406522751_thumb.j

Q01 -C-Jaffer.rar

#12

وعليكم السلام

ادخل في تصميم النموذج ، في مواصفات ، وانتقل بينها وانتبه لكلمة x-id واحذفها ةاحفظ النموذج ، ثم جرب :)

جعفر

#13

السلام عليكم

لم افهم اخي جعفر ما قصدته بمشاركتك الاخيرة

 

ومع ذلك حسب مافهمت، قمت بازالة جميع الاسطر من الكود البرمجي التي بها x-id ياستثناء الكود المتعلق بالزر الذي نريد ان نفرز وفقه

ولكن لم ينجح الامر

 

ارجو المساعدة نظرا للاهمية

بارك الله فيك

#14

عفوا اخي ، انا كنت نائم لما كتبت لك مشاركتي السابقة ، فتوضيحي ما كان جيد :(

 

الصورة التالية توضح قصدي:

post-273849-0-71489700-1406549075_thumb.

 

 

امسح الكلمة x-id من هنا فقط ، احفظ النموذج ، ولا تلمس الكود :)

 

اسمح لي ان اشرح لك الكود شو يعمل:

الكود يضع اسم الحقل الذي نريد فرزه في هذه الخانه (كم ترى في الصورة في خانة Order By) ، سواء تصاعديا او تنازليا ،

ولكن النموذج لا يحفظ هذه المعلومة عند غلقه ، ولكن

عندما لا تزال تعمل تغييرات في تصميم النموذج ، ثم تحفظ النموذج ، فانك تحفظ آخر قيمة تم استعماها في عملية الفرز :)

لذا ، ولما تخلص عمل التعديلات على النموذج ، امسح المعلومة كاللتي الموجودة في الصورة ، واحفظ النموذج :)

 

وهنا اود ان ارجع مرة اخرى الى مشاركتي السابقة حين قلت لك بأن اكسس لا يحب علامة الناقص "-" ، فهو يعتبرها عملية حسابية بين الخانتين x و id ، وبما انه لا يوجد حقل id في النموذج ، لذا فان النموذج يسألك عن هذه القيمة :)

 

جعفر

1
#15

الف الف شكر

اخي جعفر

على توضيحك للامر

بارك الله فيك

تم تطبيق التعليمات التي تفضلت بها

واصبح المثال يعمل بشكل جيد مائة بالمائة

قمت بتطوير المثال قليلا

حيث وضعت زر وحيد (قلاب)

بدلا من زرين

ووضعت الاكواد اللازمة

وكل شي مائة بالمائة

كما انني قمت بمزامنة الطباعة مع حالة الفرز

ولكنني هنا اضطررت الى ان يكون لدي زوج من التقارير مستندة على زوج من الاستعلامات

حسب حالة كل فرز

ارجو الاطلاع على المثال المعدل

وسؤالي هل هناك طريقة اخرى افضل من الطريقة التي عملتها من اجل مزامنة تقارير الطباعة

بحيث يكون هناك تقرير واحد واستعلام واحد

Q01 -D-Jaffer.rar

#16

السلام عليكم ورحمة الله وبركاته

 

بعد بحث في المنتدى، وجدت اجابة من الاخ جعفر لحالة مماثلة لسؤالي

 

قمت بوضع زر جديد باسم معاينة 1

ووضعت الكود التالي

 Dim stDocName As String
    
    stDocName = "Beda_Oal_Modah_List_Report"
    DoCmd.OpenReport stDocName, acPreview
    
    If Me.flag_sort = "by beda" Then
        Reports!Beda_Oal_Modah_List_Report.OrderBy = Me.Beda_Oal_Modah_Sub.Form!beda
        Reports!Beda_Oal_Modah_List_Report.OrderByOn = True
    End If

عندما تكون القيم مفروزة على الاسم، وعند الضغط على زر معاينة 1

فلا يتم الفرز حسب الاسم، وانما تظهر عبارة اسم الحقل الاول بندورة

 

 

اظن ان الكود بحاجة الى تعديل طفيف ,,,,,,,,,,,وتصبح الامور عال العال

 

ارجو اخ جعفر

الاطلاع على المثال الجديد المرفق والارشاد الى مكمن الخطأ والتصويب

 

بارك الله فيك

 

Q01-E-Jaffer.rar

post-32358-0-06446700-1406577976_thumb.j

#17

حياك الله اخي :)

 

الحمدلله ان مواضيعي منها فائدة :)

 

الكود مفروض يصير:

Private Sub Command8_Click()
On Error GoTo Err_امر9_Click

    Dim stDocName As String
    
    stDocName = "Beda_Oal_Modah_List_Report"
    DoCmd.OpenReport stDocName, acPreview
    
   
        Reports!Beda_Oal_Modah_List_Report.OrderBy = Me.Beda_Oal_Modah_Sub.Form.OrderBy    
        Reports!Beda_Oal_Modah_List_Report.OrderByOn = True
  
    
       

Exit_امر9_Click:
    Exit Sub

Err_امر9_Click:
    MsgBox Err.Description
    Resume Exit_امر9_Click
End Sub

والتقرير عندك مليان كود ، ليش!!!!

 

 

جعفر

#18

السلام عليكم

 

تم تجربة ما تفضلت به اخي جعفر

والحمد لله ، الكود اصبح يعمل

بارك الله فيك

 

ولكن ظهرت لي مشكلة جديدة

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

 

ارجو الدلالة الى مكمن الخطأ والارشاد

 

بارك الله فيك على استمرارك معي في حل المشاكل

 

اما بالنسبة الى كثرة الاكواد في التقرير، فهي ضرورية بالنسبة لي وتتحكم بتنسيق وشكل اخراج التقرير ( من حيث اظهار فواصل ام لا للارقام، وبحيث ان يكون العبارات المكتوبة بالتقرير ملونة ام لا....الخ )

 

ارفق مثال جديد به الكود الجديد

ارجو الاطلاع عليه

والف شكر

Q01-F-Jaffer.rar

تم تعديل هذه المشاركة بواسطة kafi في 31 يوليو 2014 في 00:38

#19

حياك الله اخي :)

اعمل تقرير جديد من الصفر ، ثم ﻻ تجعل فيه أي كود ، وجرب :)

تعليقي السابق عن الكود كان لهذا السبب :)

جعفر

1
#20

الف الف شكر

اخي جعفر

جزاك الله عني كل خير

الحمد لله الآن انتهى كل شي

واصحبت الامور جاهزة مائة بالمائة

شكرا على ملاجظتك القيمة المتمثلة بانشاء تقرير جديد من الصفر

فعلا بعد ان تم انشاء التقرير من الصفر لم تعد مشكلة التعليق واردة

وقد تبين لي ان سبب المشكلة ليست الاكواد ، بدليل انني ارجعت كل الاكواد الى التقرير الذي انشأته من الصفر ولم يحدث التعليق

بل ربما المشكلة في شي داخلي بالتقرير

الف شكر مجدداً

بارك الله فيك

تم تعديل هذه المشاركة بواسطة kafi في 31 يوليو 2014 في 15:16

#21

:)

مواضيع مشابهة