منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
حفظ قيم مربعات الاختيار فى قاعدة البيانات واسترجاعها - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغات البرمجة الاخرى (http://vb4arb.com/vb/forumdisplay.php?fid=4)
+--- قسم : قسم لغة vb6.0 (http://vb4arb.com/vb/forumdisplay.php?fid=18)
+---- قسم : قسم أسئلة vb6.0 (http://vb4arb.com/vb/forumdisplay.php?fid=28)
+---- الموضوع : حفظ قيم مربعات الاختيار فى قاعدة البيانات واسترجاعها (/showthread.php?tid=49200)



حفظ قيم مربعات الاختيار فى قاعدة البيانات واسترجاعها - haitham Muhammed - 19-06-24

كيف يمكن حفظ قيم مربعات الاختيار داخل حقل واحد فى حالة وجود اكثر من 20 مربع اختيار بدلا من عمل حقل لكل مربع اختيار لنتخزين بياناته


RE: حفظ قيم مربعات الاختيار فى قاعدة البيانات واسترجاعها - Taha Okla - 20-06-24

ممكن ولكن ليس في الفيجول بيزك6  لأن الباينري محدود
في الدوت نت ممكن لحد محدد وليس بلا حدود..

يمكن في الفيجول بيزك6 ولكن كـ التالي : 
ولكن لو أفترضت أن المتغير هو من نوع Integer  أو Long   يعني رقمي وليس باينري .. وهذا أبسط للاستيعاب أكثر من الباينري.
لأنه يمكن أن يزيد مدى المتغير ..
.......................................................................
لا أعرف أن كنت ستستوعب ما أقوله هنا
ولكن أعطيك الطريقة وعليك العمل : 
- إن ضبطت معك أو مع غيرك : نكن قد نفعنا من استفاد منها،
- وإن لم تضبط : فليس لدي شرح أكثر من هذا ..

الطريقة تعتمد على المعاملات المنطقية : And - Xor
فهمك لها من الدراسة (المدرسة أو الأكاديمية أو أي طريقة تعلمت بها - هذا إن مرت معك) ربما يساعدك على فهم ما سأقوله هنا..


أولاً : لن أدخل معك بقواعد البيانات : لا بد أنك تعرف كيفية تخزين قيمة(رقم) أو تسترجع قيمة من حقل معين في قاعدة البيانات.
ثانياً : أنا سأتحدث معك مباشرة عن تلك القيمة :
- وكأنها أصبحت بين يديك في حال قمت بإسترجاعها من القاعدة وكيف توظفها لتحديد ما يناسب القيمة ،، 
- أو كيف تجهزهذه القيمة للتخزين في حال عرف ما تريد تحديده من مربعات الاختيار..

في البداية عليك أن تقوم ببناء بلوك (Enum)  تحدد فيه عدد القيم التي تريد  إستخدامها في برنامجك..
مثلاً هي أربع قيم : 
بالتالي سيكون هذا البلوك على الشكل التالي فرضا أن اسم هذا البلوك هو (TA): 
كود :
Enum TA
   A1 = 1
   A2 = 2
   A3 = 4
   A4 = 8
End Enum

لاحظ أنه يبدأ من القيمة 1 وكل قيمة بعده هي رقم مضاعف لما قبله (هذه الأرقام إجبارية وليست إختيارية (كي لا تقع بالأخطاء المنطقية مستقبلاً))
يعني لو أردت إضافة قيمة خامسة ستكون هي مضاعف الرقم السابق لها وستكون (8×2) أي أنه :  A5=16
وهكذا ...
وهذا البلوك يكون في بداية الكود أعلى الصفحة أي أعلى كل شيء.. يعني لا يوجد أكواد قبله سوى التصريحات (التعاريف) إن أدرت إضافة متغيرات عامة..


ثم نقوم الآن بإضافة متغير عام   ليكن مثلاً  (Tx)  تستطيع إضافته قبل ذاك البلوك أو بعده (لا توجد مشكلة).
نعرف هذا المتغير على البلوك نفسه يعني : 
كود :
Dim Tx As TA



تضع الان كود التحقق ضمن تغير قيمة التشك بوكس  ليتم تخزين القيمة فيكون الكود هو :
كود :
Private Sub Check1_Click()
   Tx = Tx Xor 1
End Sub

Private Sub Check2_Click()
   Tx = Tx Xor 2
End Sub

Private Sub Check3_Click()
   Tx = Tx Xor 4
End Sub

Private Sub Check4_Click()
   Tx = Tx Xor 8
End Sub

لاحظ أننا نقارن كل مرة قيمة المتغير الذي عرفنا مع رقم معين (وهذا الرقم هو نفس ترتيب الأرقام التي اخترناها في  بلوك الـ Enum السابق )
1  ثم 2 ثم 4 ثم 8 ثم 16 ثم 32  وهكذا .... إلخ.
Xor     هنا تقول : قارن قيمة المتغير مع القيمة 1 إن كانت موجودة أمسحها و خَزِّن وإن لم تكن موجودة أضفها و خَزِّن.
يعني تقول أعكس الحالة بوجود أو عدم وجدود ما نقارن معه..


لاحظ أن الكود السابق غير مكتمل : فما ينقصه هو  كود تخزين القيمة ضمن الخلية التي تريد التخزين فيها في قاعدة البيانات ..
أي أن تخزن القيمة (Tx)  هذا نتركها عليك : وبحسب الطريقة التي تحب أن تتعامل معها في تخزين هذه القيمة ..
إما أن تخزنها بعد الضغط على التشيك فتكتب كود التخزين في كل تشيك بعد سطر Xor

أو تجعل التخزين في النهاية بعدإنتهاء عملك من خلاال الضغط على زر حفظ    مثلاً.



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

الآن جاء دور الاسترجاع :
على فرض أننا استرجعنا تلك القيمة وكانت تساوي 7  
بالتالي نقوم بالتحقق من تلك القيمة (7)  مع التشكات وما يقابل كل واحدة منها من قيمة متغير وذلك من خلال المعامل المنطقي And

فيصبح الكود : 
كود :
   Tx = XXXX   '  القيمة التي استرجعناها من قاعدة البيانات
   If (Tx And 1) = 1 Then
       Check1.Value = 1
   Else
       Check1.Value = 0
   End If
   
   If (Tx And 2) = 2 Then
       Check2.Value = 1
   Else
       Check2.Value = 0
   End If
   
   If (Tx And 4) = 4 Then
       Check3.Value = 1
   Else
       Check3.Value = 0
   End If

لاحظ أننا :
- مع الـ Check1  نقارن القيمة المرتجعة مع الرقم 1
- ومع الـ Check2  نقارن القيمة المرتجعة مع الرقم 2
- ومع الـ Check3  نقارن القيمة المرتجعة مع الرقم 4
- ومع الـ Check4  نقارن القيمة المرتجعة مع الرقم 8


وهكذا مع القيمة التي فرضناها في الـ Enum  بالترتيب..

بالتالي بحسب قيمة الرقم سيقوم بتحديد التشكات أو إلغاء تحديدها..

إلى هنا نكون قد انتهينا ..
وجاء دورك لتطبق ما شرحناه أعلاه ..

-----------------------------------------

أرجو أن يحملك دماغك إلى هذه اللحظة وتستطيع تطبيق ما ذكرناه أعلاه ..
فإن فعلت : تكون تعلمت طريقة مميزة تساعدك في تبسيط تخزين الكثير من المتغيرات 
ومن أهمها : 
- طريقة تبسيط التعامل مع صلاحيات المدير و المستخدمين..
- طريقة تلوين أو تخصيص إعدادت النوافذ لديك...
....
- والكثير .. إلخ

بالتوفيق ...