موضوع منقو لمن المنتدي القديم
الكاتب : أنا و هي
--------------------------------------------------------------------------------
كيف يمكن ترقيم أسطر نموذج فرعي؟
بسم الله الرحمن الرحيم
الأخوة الأعزاء.... كيف يمكن وضع عنصر نص يحتوي على رقم الصف في النموذج الفرعي
وللإضاح افترض أن هناك نموذج فرعي يضم اسماء الطلاب في الدورة ... وعندما تنتقل من دورة إلى أخرى في النموذج الرئيسي يتغير الجدول الذي يضم أسماء الطلاب في الدورة....
أريد مقابل كل طالب رقم تسلسل حسب ترتيبه في الجدول ويبدأ الرقم بالواحد وينتهي إلى عدد الطلاب في الدورة مثلا إن كان عدد الطلاب في الدورة 5 يكون ترقم الطلاب 1،2،3،4،5 وإن كان عدد الطلاب في الطورة 9مليون يكون ترقيم الطلاب 1،2،3،3،4،5،6،،،،،،،9000000 وهكذا...
أفيدوني يرحمكم الله
الكاتب: أناوهي بتاريخ: 9/1/2002 2:26:26 AM
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
إجابة
1- أنشئ استعلام جديد وأدرج فيه حقول جدول المواد .
2- في شبكة الاستعلام في حقل اكتب :
Code:
التسلسل: تسلسل([iD])
3- في الوحدة النمطية العامة أكتب :
Public Function تسلسل(المفتاح_الأساسي As Long) As Long Static الرقم As Long Static الرقم2 As Long If الرقم = المفتاح_الأساسي Then الرقم2 = الرقم2 + 1 Else الرقم2 = 1 End If الرقم = المفتاح_الأساسي تسلسل = الرقم2 End Function
ولك تحياتي
--------------------------------------------------------------------------------
الكاتب: ابوحمود. بتاريخ: 9/1/2002 5:01:13 AM
--------------------------------------------------------------------------------
مشاركة
اخوي ابو حمود : مشكور جدا جربت طريقتك وما عرفت اطبقها لكن من طريقتك خطرت لي الفكرة التالية واظنها نفس فكرتك:
في الوحدة النمطية
Global Num1 As Long Public Function Taslsl(MyRecNum As Integer) Num1 = Num1 + 1 Taslsl = Num1 If Num1 = MyRecNum Then Num1 = 0 End Function وفي النموذج نسوي مربع نص جديد ويكون مصدر عنصر التحكم فيه =Taslsl(RecordsetClone.RecordCount) وعند اغلاق النموذج الحدث : Num1 = 0
الصراحة الفكرة ما ضبطت معي 100% لكن يمكن يستفاد منها
--------------------------------------------------------------------------------
الكاتب: osama457 بتاريخ: 9/1/2002 4:47:16 PM
--------------------------------------------------------------------------------
شكر، ودعوة
الأخ أسامة / شكرا لفكرتك وجزاك الله خير ... وللتذكير فقط : الخصائص الموجودة في التقارير غير موجودة في النماذج.
الأخ أبوحمود / شكرا على الكود وجزاك الله خير... وقد قمت بتطبيقه وواجهتني المشكلة التالية. عندما يختفي العمود أو حقل التسلسل ثم يظهر من جديد يبدأ بأرقام جديدة. مثل لو كان في الدورة طالبان في المرة الأولى يأخذان التسلسل 1و2 ثم إن حركت شريط التمرير وأختفى العمود ثم عدت إليه يأخذان التسلسل 3و4 ثم 5و6 .... وهكذا
أطرح الفكرة التالية ألايمكن حل المشكلة هذه عن طريق المصفوفة ... في هذه الحالة نحن بحاجة إلى طريقة سريعة لترتيب المصفوفة، والبحث فيها
وتقبلوا كل إحترام وتقدير.
الكاتب: أناوهي بتاريخ: 9/2/2002 12:32:42 AM
--------------------------------------------------------------------------------
مشاركة ثانية
في الوحدة النمطية العامة اكتب
Function RcNum(frm As Form, fldName As String, mID As Variant) As Variant Dim RstClone As Recordset Dim Fld As Field Dim I As Long RcNum = Null If IsNull(mID) Then Exit Function Set RstClone = frm.RecordsetClone If RstClone.RecordCount = 0 Then Exit Function Set Fld = RstClone.Fields(fldName) With RstClone .MoveFirst Do Until .EOF I = I + 1 If Fld = mID Then Exit Do .MoveNext Loop End With RstClone.Close RcNum = I End Function وفي النموذج الفرعي اعمل مربع نص جديد وفي مصدر عنصر التحكم اكتب =RcNum([Form];"ID";[ID])
وغير كلمة ID باسم الحقل اللي هو المفتاح أو الحقل الفريد عندك بشرط يكون ما يقبل قيم فارغة
ولا تنسى مرجع Dao في المراجع
والله اعلم
الكاتب: osama457 بتاريخ: 9/2/2002 12:51:36 AM
--------------------------------------------------------------------------------
الكاتب: ابوحمود. بتاريخ: 9/2/2002 4:54:24 AM
--------------------------------------------------------------------------------
لم انتبه للردود السابقة
حل على السريع :
اجعل مربع النص غير ممكن وتنحل المشكلة .
ولك تحياتي
--------------------------------------------------------------------------------
الكاتب: ابوحمود. بتاريخ: 9/2/2002 5:09:17 AM
--------------------------------------------------------------------------------
يمكنك ذلك
يمكنك ذلك كالتالي :
اضف هذه الدالة عند حدث " قبل الادراج " في النموذج الفرعي حيث ان الخاصية RecordsetClone تمثل السجلات المرتبطة بالنموذج الحالي مهما كانت تلك السجلات
SNo = التسلسل
Private Sub Form_BeforeInsert(Cancel As Integer) On Error Resume Next Dim RST As Recordset Set RST = Form.RecordsetClone If RST.RecordCount = 0 Then Me![SNo] = 1 Exit Sub End If RST.MoveLast Me![SNo] = RST![SNo] + 1
الكاتب: ابوهاني بتاريخ: 9/2/2002 1:46:08 PM
--------------------------------------------------------------------------------
الأخ ابوهاني
لكن كيف يعيد الترقيم من 1 مرة أخرى للدورة التالية ؟
ولك تحياتي
الكاتب: ابوحمود. بتاريخ: 9/2/2002 7:39:19 PM
--------------------------------------------------------------------------------
نعم يمكن
اخي ابو حمود
كيف حالك ... والله زمان عن هذه المناقشات الممتعة.
طبعا الاخ السائل يستخدم طريقة Headrs/Lines فالنموذج الفرعي مرتبط مع النموذج الرئيسي وعند الانتقال من دورة الى اخرى فان عدد السجلات سوف يكون فقط العدد الفعلي المربوط في العلاقة وعند ادخال دورة جديدة فان عدد السجلات طبعا سيكون صفر فسوف يبدا الترقيم من جديد .
الكاتب: ابوهاني بتاريخ: 9/3/2002 12:52:25 AM
--------------------------------------------------------------------------------
إجابة
فكرة جيدة جداً .
ولكن جربت الكود فلم تنجح الفكرة حيث ظهر لي رقم واحد في كل مرة .
وقد عدلت في الكود بعض الشيء ليعمل :
On Error Resume Next If Me.RecordsetClone.RecordCount = 0 Then Me![sno] = 1 Exit Sub End If Me.RecordsetClone.MoveLast Me![sno] = Me.RecordsetClone![sno] + 1
والآن ياصاحب السؤال اختر أي الطريقتين تحب فالطريقة التي ذكرتها لاتحفظ رقم التسلسل في جدول وإنما اجعل النموذج الفرعي مبني على استعلام كما وضحت سابقاً ، وطريقة أبوهاني تحتاج إلى حقل باسم sno أضفه للجدول المبني عليه الاستعلام الفرعي .
ولك تحياتي
--------------------------------------------------------------------------------
الكاتب: ابوحمود. بتاريخ: 9/3/2002 10:18:38 PM
--------------------------------------------------------------------------------
ما جربتم الكود
انا اللي فهمته ان السائل يقصد الترقيم للعرض وليس للإدخال
يعني كل ما عرض نموذج فرعي يجي مسلسل
وعلى كذا الكود اللي انا حطيته في الاخير ماشي ، جربته ويضبط الترقيم حتى لو غيرت الفرز او سويت فلتر
--------------------------------------------------------------------------------
الكاتب: osama457 بتاريخ: 9/4/2002 9:52:01 AM
--------------------------------------------------------------------------------
مثال
مثال
http://www.pcpages.com/osama457/Numer.zip
--------------------------------------------------------------------------------
الكاتب: osama457 بتاريخ: 9/6/2002 4:33:57 AM
--------------------------------------------------------------------------------
رائع يا اسامه
الأخ أسامه
أولا في البداية اعتذر لعدم الإشارة إلى الكود الذي ذكرته في إجابتي السابقة ، وذلك أنني -والحق يقال- لم أستطع تطبيقه على مثال فلذلك لم أهتم به وأكرر أسفي .
وبعد رؤيتي للمثال أحببت أن أهنئ نفسي والأعضاء بالمنتدى على انضمامك له ، فحقيقة الكود رائع جداً وفكرته ممتازة ، ولا أخفيك جلست في تحليله حتى فهمته بالرغم من إرفاق المثال اكثر من نصف ساعة حتى فهمته وفهمت طريقة عمله .
وهذا شرح مبسط لما فهمته ، آمل منك التصحيح إن كان هناك غلط في فهمي (مع ملاحظة أن الشرح نسخته من الوحدة النمطية في المثال لذلك قد يكون غير متناسق) :
' يلزم أن تمرر اسم النموذج الفرعي واسم الحقل المفتاح الأساسي وقيمة المفتاح عند كل استدعاء للدالة
' تفتح الدالة ريكوردست من سجلات النموذج الفرعي
' إذا كانت الريكوردست تساوي صفر فمعناه لايوجد سجلات وأنهي الدالة
' يقوم بعمل حلقة تكرار مشروطة بعدد سجلات الريكوردست
' يبحث عن القيمة في الحقل الممر اسمه إلى الدالة وذلك في الريكوردست المفتوحة
' ويتأكد هل تطابق قيمته قيمة المفتاح الأساسي المرر إلى الدالة
' فإذا كانت تطابق ينهي الدالة وإلا يستمر في الحلقة
' ويضيف في كل دورة واحد إلى المتغير
' I
' لغرض إسناد قيمته للدالة كبيانات لمربع النص الذي نرغب في ظهور التسلسل فيه
وفقك الله ورعاك .
ولك تحياتي
--------------------------------------------------------------------------------
الكاتب: ابوحمود. بتاريخ: 9/6/2002 9:34:27 AM
--------------------------------------------------------------------------------
الله يحفظك
مشكور اخوي ابو حمود وتقبل الله دعاك
شرحك وافي ومثلك ما يصحح له مثلي
والله يحفظك
--------------------------------------------------------------------------------
الكاتب: osama457 بتاريخ: 9/6/2002 11:03:17 AM
--------------------------------------------------------------------------------
شكر وتقدير
الأخوة الأعزاء أسامة، أبوحمود، أبوهاني،..... شكرا لكم جميعا
وشكر ا للأخ أسامة على المثال الرائع الذي قدمه ... وقد جربتها وأوفى بالغرض..
--------------------------------------------------------------------------------
من لم يكن في زيادة فهو فينقصان
الكاتب: أناوهي
