المشاركات : 761
المواضيع 134
الإنتساب : May 2015
السمعة :
62
الشكر: 667
تم شكره 1388 مرات في 627 مشاركات
02-08-20, 08:05 PM
(آخر تعديل لهذه المشاركة : 02-08-20, 08:07 PM {2} بواسطة مصمم هاوي.)
السلام عليكم ورحمة الله وبركاتهُ
تقبلَ اللهُ منا ومنكم صالح الأعمال، وتقبل أضحيتكم
لدي مشروع إدارة مكتبة مركزية، متصل بقاعدة بيانات sql 2008 r2 - والأمور كلها تمام إلا في الطريقة الصحيحة لانقاص كمية الكتب بعد الإعارة وعند إعادة الكتب المعارة
قمتُ باستدعاء جدول الكتب ثم طرحت الآتي:
عدد الكتب الباقية = العدد الإجمالي للكتب - عدد نسخ الكتب المعارة
وعند إعادة الكتاب المعار يتم زيارة نسخة الكتاب المعار.
وكانت العملية تسير تمام، ولكنني أرى هذه الطريقة غير ذات جدوي على المدى البعيد، خاصة أنني لاحظتُ أنه حين نفاذ نسخ الكتب فإن الناتج يبدأ في السالب.
أي: إذا كان العدد الإجمال للكتب (0) فإن نتيجة الطرح تأتي بالعدد سالب (0 - 10 = -10).
السؤال: عند نفاذ نسخ الكتاب المفروض أنه لايمكن إعارة كتاب باعتبار أنه غير موجود وهذا كود الحفظ
كود :
If RS.State = 1 Then RS.Close
RS.open "select * from Table_aliieara where ID='" & Trim(TextAID.Text) & "'", cn, adOpenKeyset, adLockOptimistic
If RS.RecordCount <> 1 Then
RS.AddNew
RS!ID = Trim(TextAID.Text)
RS!Cod_altasnif = Trim(TextCod.Text)
RS!tasnif_BooK = Trim(Combotasnif.Text)
RS!altasnif_type = Trim(Listtype.Text)
RS!Book_name = Trim(TextBook.Text)
RS!almualaf_name = Trim(TextalMoalf.Text)
RS!almustaeir_name = Trim(Textalmustaeir.Text)
RS!almustaeir_sifat = Trim(Textsifat.Text)
RS!College_Name = Trim(TextCollege.Text)
RS!alqism_name = Trim(Textalqism.Text)
RS!Study_number = Trim(TextSnumber.Text)
RS!aliieara_Date = Trim(TextSDate.Text)
RS!number_days = Trim(TextNDays.Text)
RS!Return_date = Trim(TextEDate.Text)
RS!ID_Count = Trim(TextCount.Text)
RS!ID_CCount = Trim(TextCCount.Text)
RS!DAT = Trim(TextDAT.Text)
RS!Time = Trim(TextTime.Text)
RS.Update
FillSubtract
End If
' ============================
Call Form_Load
Call Clear_Text
حيث Table_aliieara جدول الإعارة
وهذا كود تحديث جدول الكتب
كود :
Sub FillSubtract()
' ===========================
If RS.State = 1 Then RS.Close
RS.open "select * from Table_Add_books where ID_Cod='" & Trim(TextID.Text) & "'", cn, adOpenKeyset, adLockOptimistic
If RS.RecordCount <> 0 Then
RS.Update
RS!ID_Cod = Trim(TextID.Text)
RS!ID_alnuskh = Trim(TextIDalnuskh1.Text)
' ==================================================
TextIDalnuskh1 = Val(TextIDalnuskh) - Val(TextCount)
' ==================================================
RS.Update
MsgBox "تم إعـارة كتاب : " & " " & TextBook.Text & " - عدد النسخ الباقية : " & TextIDalnuskh1.Text & " - كتاباً - " & " - لـ : " & Textalmustaeir.Text & " - الصفة : " & Textsifat.Text & " - الكلية : " & TextCollege.Text & " - الرقم الدراسي : " & TextSnumber.Text & " - بنجاح " & "", vbInformation + vbMsgBoxRight, "إجــراء الإعارة ..."
End If
Call Form_Load
' ============
End Sub
حيث Table_Add_books جدول الكتب
ID_alnuskh حقل عدد نسخ الكتاب وهو المطلوب تحديثه عند الإعارة والإعادة
TextIDalnuskh1 عدد الكتب الباقية
(TextIDalnuskh) العدد الإجمالي للكتب
(TextCount) تكست عدد الكتب المعارة
TextIDalnuskh1 = Val(TextIDalnuskh) - Val(TextCount)
أرجو أنني قد استطعت إيصالي الفكرة جيداً وإلا اسوي مثال بسيط لتتضح الفكرة أكثر.
أرجو مشاركتي الحل الأمثل والأحسن والأنجع.
إذا طُعِنتَ من الخلفِ فاعلمْ أنك في المقدمةِ
المشاركات : 1,556
المواضيع 14
الإنتساب : Apr 2013
السمعة :
253
الشكر: 3551
تم شكره 4875 مرات في 1243 مشاركات
وعليكم السلام ورحمة الله وبركاته ،،
عملك تمام التمام ولكن ينقصك نقطة واحده لتكمل العملية بأكمل وجه .
أولاً والمفروض اذا كان عدد كمية الكتاب صفر فبالتأكيد الكتاب غير موجود في المكتبة ليحسب بالسالب كما تفضلت في سؤالك .
الآلية تتم كالتالي :
استعلام عن الكتاب اما برقم باركود او برقم خاص للكتاب لجلب بياناته ومن ثم كتابة اسم المستعير ومدة الاستعارة .... إلخ هنا تجلب الكمية المتبقية وبعد اضافة بيانات المستعير تعمل حفظ للسجل وايضاً تعديل الكمية المتبقية للكتاب سالب الكمية المستعارة . ولا بد يتبقى عدد الكتاب في المكتبة كما الكمية الموجوده في البرنامج عند الإستعلام فبالتالي لن تجد كتاب بعد الإستعلام عنه كميته صفر .
أو تعمل شرط اذا الكمية المتبقية صفر لا تنفذ الكود واظهر رسالة .
يا رحمن الدنيا والآخرة ورحيمهما
المشاركات : 761
المواضيع 134
الإنتساب : May 2015
السمعة :
62
الشكر: 667
تم شكره 1388 مرات في 627 مشاركات
(02-08-20, 09:56 PM)حريف برمجة كتب : أو تعمل شرط اذا الكمية المتبقية صفر لا تنفذ الكود واظهر رسالة .
هذا هو الشرط الذي فشلت في تحقيقه وأتمنى منك أخي خريف برمجة مشكورا صياغة الكود مع الشرط
أما بقية العملية فكلها تمام
إذا طُعِنتَ من الخلفِ فاعلمْ أنك في المقدمةِ
المشاركات : 1,556
المواضيع 14
الإنتساب : Apr 2013
السمعة :
253
الشكر: 3551
تم شكره 4875 مرات في 1243 مشاركات
(02-08-20, 11:18 PM)مصمم هاوي كتب : (02-08-20, 09:56 PM)حريف برمجة كتب : أو تعمل شرط اذا الكمية المتبقية صفر لا تنفذ الكود واظهر رسالة .
هذا هو الشرط الذي فشلت في تحقيقه وأتمنى منك أخي خريف برمجة مشكورا صياغة الكود مع الشرط
أما بقية العملية فكلها تمام
اتوقع والله اعلم الحل كالتالي ضع الكود كامل في زر الحفظ وأستغني عن الاكواد السابقة ،، وجرب :
كود :
If RS.State = 1 Then RS.Close
RS.open "select * from Table_Add_books where ID_Cod='" & Trim(TextID.Text) & "'", cn, adOpenKeyset, adLockOptimistic
If RS.RecordCount <> 0 Then
RS.Update
RS!ID_Cod = Trim(TextID.Text)
RS!ID_alnuskh = Trim(TextIDalnuskh1.Text)
' ==================================================
TextIDalnuskh1 = Val(TextIDalnuskh) - Val(TextCount)
' ==================================================
RS.Update
' =====هنا كود حفظ بيانات مستعير الكتاب
If RS.State = 1 Then RS.Close
RS.open "select * from Table_aliieara where ID='" & Trim(TextAID.Text) & "'", cn, adOpenKeyset, adLockOptimistic
If RS.RecordCount <> 1 Then
RS.AddNew
RS!ID = Trim(TextAID.Text)
RS!Cod_altasnif = Trim(TextCod.Text)
RS!tasnif_BooK = Trim(Combotasnif.Text)
RS!altasnif_type = Trim(Listtype.Text)
RS!Book_name = Trim(TextBook.Text)
RS!almualaf_name = Trim(TextalMoalf.Text)
RS!almustaeir_name = Trim(Textalmustaeir.Text)
RS!almustaeir_sifat = Trim(Textsifat.Text)
RS!College_Name = Trim(TextCollege.Text)
RS!alqism_name = Trim(Textalqism.Text)
RS!Study_number = Trim(TextSnumber.Text)
RS!aliieara_Date = Trim(TextSDate.Text)
RS!number_days = Trim(TextNDays.Text)
RS!Return_date = Trim(TextEDate.Text)
RS!ID_Count = Trim(TextCount.Text)
RS!ID_CCount = Trim(TextCCount.Text)
RS!DAT = Trim(TextDAT.Text)
RS!Time = Trim(TextTime.Text)
RS.Update
End If
' ============================
MsgBox "تم إعـارة كتاب : " & " " & TextBook.Text & " - عدد النسخ الباقية : " & TextIDalnuskh1.Text & " - كتاباً - " & " - لـ : " & Textalmustaeir.Text & " - الصفة : " & Textsifat.Text & " - الكلية : " & TextCollege.Text & " - الرقم الدراسي : " & TextSnumber.Text & " - بنجاح " & "", vbInformation + vbMsgBoxRight, "إجــراء الإعارة ..."
Call Form_Load
Call Clear_Text
Else
MsgBox "عفواً.. الكتاب غير موجود"
End If
يا رحمن الدنيا والآخرة ورحيمهما
المشاركات : 761
المواضيع 134
الإنتساب : May 2015
السمعة :
62
الشكر: 667
تم شكره 1388 مرات في 627 مشاركات
03-08-20, 02:15 AM
(آخر تعديل لهذه المشاركة : 03-08-20, 02:44 AM {2} بواسطة مصمم هاوي.)
(03-08-20, 01:30 AM)حريف برمجة كتب : (02-08-20, 11:18 PM)مصمم هاوي كتب : (02-08-20, 09:56 PM)حريف برمجة كتب : أو تعمل شرط اذا الكمية المتبقية صفر لا تنفذ الكود واظهر رسالة .
هذا هو الشرط الذي فشلت في تحقيقه وأتمنى منك أخي خريف برمجة مشكورا صياغة الكود مع الشرط
أما بقية العملية فكلها تمام
اتوقع والله اعلم الحل كالتالي ضع الكود كامل في زر الحفظ وأستغني عن الاكواد السابقة ،، وجرب :
كود :
If RS.State = 1 Then RS.Close
RS.open "select * from Table_Add_books where ID_Cod='" & Trim(TextID.Text) & "'", cn, adOpenKeyset, adLockOptimistic
If RS.RecordCount <> 0 Then
RS.Update
RS!ID_Cod = Trim(TextID.Text)
RS!ID_alnuskh = Trim(TextIDalnuskh1.Text)
' ==================================================
TextIDalnuskh1 = Val(TextIDalnuskh) - Val(TextCount)
' ==================================================
RS.Update
' =====هنا كود حفظ بيانات مستعير الكتاب
If RS.State = 1 Then RS.Close
RS.open "select * from Table_aliieara where ID='" & Trim(TextAID.Text) & "'", cn, adOpenKeyset, adLockOptimistic
If RS.RecordCount <> 1 Then
RS.AddNew
RS!ID = Trim(TextAID.Text)
RS!Cod_altasnif = Trim(TextCod.Text)
RS!tasnif_BooK = Trim(Combotasnif.Text)
RS!altasnif_type = Trim(Listtype.Text)
RS!Book_name = Trim(TextBook.Text)
RS!almualaf_name = Trim(TextalMoalf.Text)
RS!almustaeir_name = Trim(Textalmustaeir.Text)
RS!almustaeir_sifat = Trim(Textsifat.Text)
RS!College_Name = Trim(TextCollege.Text)
RS!alqism_name = Trim(Textalqism.Text)
RS!Study_number = Trim(TextSnumber.Text)
RS!aliieara_Date = Trim(TextSDate.Text)
RS!number_days = Trim(TextNDays.Text)
RS!Return_date = Trim(TextEDate.Text)
RS!ID_Count = Trim(TextCount.Text)
RS!ID_CCount = Trim(TextCCount.Text)
RS!DAT = Trim(TextDAT.Text)
RS!Time = Trim(TextTime.Text)
RS.Update
End If
' ============================
MsgBox "تم إعـارة كتاب : " & " " & TextBook.Text & " - عدد النسخ الباقية : " & TextIDalnuskh1.Text & " - كتاباً - " & " - لـ : " & Textalmustaeir.Text & " - الصفة : " & Textsifat.Text & " - الكلية : " & TextCollege.Text & " - الرقم الدراسي : " & TextSnumber.Text & " - بنجاح " & "", vbInformation + vbMsgBoxRight, "إجــراء الإعارة ..."
Call Form_Load
Call Clear_Text
Else
MsgBox "عفواً.. الكتاب غير موجود"
End If
بارك الله فيك أستاذي الفاضل، أجرب الكود واخبرك النتيجة
بعد تجربة الكود لم يتغيير أي شى فمازالت تظهر النتيجة سالبة.
وقد أكون غفلتُ شيئاً مهماً والذي أقصد التعديل عليه وهو:
أن الكتاب قد يحتوي على عدة نسخ، فلو فرضنا ان عدد نسخ كتاب ما (10) نسخ وتمت إعارة نسخة واحدة
فيبقى عدد النسخ (9) .... وهكذا إلى أن يصل عدد نسخ الكتاب (0).
وفي هذه الحالة تظهر رسالة عدم وجود الكتاب المطلوب؟
مع ملاحظة: أن بيانات الكتاب تظل باقية في الجدول، والذي يتغير ويتحدث بشكل دوري حسب الإعارة والإعادة هو حقل عدد نسخ الكتاب
TextIDalnuskh = (عدد نسخ الكتاب)
وهذا هو المطلوب تماماً
إذا طُعِنتَ من الخلفِ فاعلمْ أنك في المقدمةِ
المشاركات : 2,008
المواضيع 58
الإنتساب : Oct 2014
السمعة :
1,005
الشكر: 31833
تم شكره 22865 مرات في 2187 مشاركات
وعليكم السلام ورحمة الله وبركاته
أهلا بك أخي الكريم , وكل عام وأنت بخير , الشكر الجزيل للأخ "حريف برمجة" على تقديم المساعده الله يجعلها في ميزان حسناته , هذا تعديل آخر لكود الحفظ :
PHP كود :
If RS.State = 1 Then RS.Close RS.open "select * from Table_Add_books where ID_Cod='" & Trim(TextID.Text) & "'", cn, adOpenKeyset, adLockOptimistic If RS.RecordCount <= 0 Then If RS.State = 1 Then RS.Close MsgBox "لم يتم العثور على بيانات هذا الكتاب", vbExclamation, "إجــراء الإعارة ..." Exit Sub End If If RS!ID_alnuskh <= 0 Then If RS.State = 1 Then RS.Close MsgBox "لايوجد نسخ متاحة للإستعارة لهذا الكتاب تم إستعارة جميع النسخ", vbExclamation, "إجــراء الإعارة ..." Exit Sub End If If Val(Trim(TextCount.Text)) <= 0 Then If RS.State = 1 Then RS.Close MsgBox "أكتب عدد النسخ المراد إستعارتها لهذا الكتاب", vbExclamation, "إجــراء الإعارة ..." Exit Sub End If If Val(Trim(TextCount.Text)) > RS!ID_alnuskh Then If RS.State = 1 Then RS.Close MsgBox "عدد النسخ المراد إستعارتها أكبر من عدد النسخ المتبقية لهذا الكتاب", vbExclamation, "إجــراء الإعارة ..." Exit Sub End If
TextIDalnuskh.Text = RS!ID_alnuskh
If RS.State = 1 Then RS.Close RS.open "select * from Table_aliieara where ID='" & Trim(TextAID.Text) & "'", cn, adOpenKeyset, adLockOptimistic If RS.RecordCount <> 1 Then
RS.AddNew RS!ID = Trim(TextAID.Text) RS!Cod_altasnif = Trim(TextCod.Text) RS!tasnif_BooK = Trim(Combotasnif.Text) RS!altasnif_type = Trim(Listtype.Text) RS!Book_name = Trim(TextBook.Text) RS!almualaf_name = Trim(TextalMoalf.Text) RS!almustaeir_name = Trim(Textalmustaeir.Text) RS!almustaeir_sifat = Trim(Textsifat.Text) RS!College_Name = Trim(TextCollege.Text) RS!alqism_name = Trim(Textalqism.Text) RS!Study_number = Trim(TextSnumber.Text) RS!aliieara_Date = Trim(TextSDate.Text) RS!number_days = Trim(TextNDays.Text) RS!Return_date = Trim(TextEDate.Text) RS!ID_Count = Trim(TextCount.Text) RS!ID_CCount = Trim(TextCCount.Text) RS!DAT = Trim(TextDAT.Text) RS!Time = Trim(TextTime.Text) RS.Update If RS.State = 1 Then RS.Close 'FillSubtract cn.Execute "update Table_Add_books set ID_alnuskh=ID_alnuskh-" & Val(TextCount) & " Where ID_Cod='" & Trim(TextID.Text) & "'" DoEvents TextIDalnuskh1 = Val(TextIDalnuskh) - Val(TextCount)
MsgBox "تم إعـارة كتاب : " & " " & TextBook.Text & " - عدد النسخ الباقية : " & TextIDalnuskh1.Text & " - كتاباً - " & " - لـ : " & Textalmustaeir.Text & " - الصفة : " & Textsifat.Text & " - الكلية : " & TextCollege.Text & " - الرقم الدراسي : " & TextSnumber.Text & " - بنجاح " & "", vbInformation + vbMsgBoxRight, "إجــراء الإعارة ..."
End If ' ============================ Call Form_Load Call Clear_Text
- جربه ورد خبر إن ضبط معاك , بالتوفيق .
كود :
For Each Breathe in MyLife
Breathe.Say " سبحان الله والحمد لله ولا إله إلا الله والله أكبر أستغر الله العظيم وأتوب إليه"
Next
المشاركات : 761
المواضيع 134
الإنتساب : May 2015
السمعة :
62
الشكر: 667
تم شكره 1388 مرات في 627 مشاركات
(03-08-20, 03:17 AM)Ahmed_Mansoor كتب : وعليكم السلام ورحمة الله وبركاته
أهلا بك أخي الكريم , وكل عام وأنت بخير , الشكر الجزيل للأخ "حريف برمجة" على تقديم المساعده الله يجعلها في ميزان حسناته , هذا تعديل آخر لكود الحفظ :
PHP كود :
If RS.State = 1 Then RS.Close RS.open "select * from Table_Add_books where ID_Cod='" & Trim(TextID.Text) & "'", cn, adOpenKeyset, adLockOptimistic If RS.RecordCount <= 0 Then If RS.State = 1 Then RS.Close MsgBox "لم يتم العثور على بيانات هذا الكتاب", vbExclamation, "إجــراء الإعارة ..." Exit Sub End If If RS!ID_alnuskh <= 0 Then If RS.State = 1 Then RS.Close MsgBox "لايوجد نسخ متاحة للإستعارة لهذا الكتاب تم إستعارة جميع النسخ", vbExclamation, "إجــراء الإعارة ..." Exit Sub End If If Val(Trim(TextCount.Text)) <= 0 Then If RS.State = 1 Then RS.Close MsgBox "أكتب عدد النسخ المراد إستعارتها لهذا الكتاب", vbExclamation, "إجــراء الإعارة ..." Exit Sub End If If Val(Trim(TextCount.Text)) > RS!ID_alnuskh Then If RS.State = 1 Then RS.Close MsgBox "عدد النسخ المراد إستعارتها أكبر من عدد النسخ المتبقية لهذا الكتاب", vbExclamation, "إجــراء الإعارة ..." Exit Sub End If
TextIDalnuskh.Text = RS!ID_alnuskh
If RS.State = 1 Then RS.Close RS.open "select * from Table_aliieara where ID='" & Trim(TextAID.Text) & "'", cn, adOpenKeyset, adLockOptimistic If RS.RecordCount <> 1 Then
RS.AddNew RS!ID = Trim(TextAID.Text) RS!Cod_altasnif = Trim(TextCod.Text) RS!tasnif_BooK = Trim(Combotasnif.Text) RS!altasnif_type = Trim(Listtype.Text) RS!Book_name = Trim(TextBook.Text) RS!almualaf_name = Trim(TextalMoalf.Text) RS!almustaeir_name = Trim(Textalmustaeir.Text) RS!almustaeir_sifat = Trim(Textsifat.Text) RS!College_Name = Trim(TextCollege.Text) RS!alqism_name = Trim(Textalqism.Text) RS!Study_number = Trim(TextSnumber.Text) RS!aliieara_Date = Trim(TextSDate.Text) RS!number_days = Trim(TextNDays.Text) RS!Return_date = Trim(TextEDate.Text) RS!ID_Count = Trim(TextCount.Text) RS!ID_CCount = Trim(TextCCount.Text) RS!DAT = Trim(TextDAT.Text) RS!Time = Trim(TextTime.Text) RS.Update If RS.State = 1 Then RS.Close 'FillSubtract cn.Execute "update Table_Add_books set ID_alnuskh=ID_alnuskh-" & Val(TextCount) & " Where ID_Cod='" & Trim(TextID.Text) & "'" DoEvents TextIDalnuskh1 = Val(TextIDalnuskh) - Val(TextCount)
MsgBox "تم إعـارة كتاب : " & " " & TextBook.Text & " - عدد النسخ الباقية : " & TextIDalnuskh1.Text & " - كتاباً - " & " - لـ : " & Textalmustaeir.Text & " - الصفة : " & Textsifat.Text & " - الكلية : " & TextCollege.Text & " - الرقم الدراسي : " & TextSnumber.Text & " - بنجاح " & "", vbInformation + vbMsgBoxRight, "إجــراء الإعارة ..."
End If ' ============================ Call Form_Load Call Clear_Text
- جربه ورد خبر إن ضبط معاك , بالتوفيق .
تقبل الله منا ومنكم أخي الحبيب وأستاذي الكريم أحمد منصور.
وبخصوص الضبط فكيف لايضبط معي وهو من لمساتك الفنية المبدعة ... فسوف يضبط إن شاء الله تعالى
وفعلاً قد ضبط معي والحمد لله رب العالمين.
فأسال الله العظيم أن يمنَّ عليك بالخير والبركات
وأن يرزقك من الخيري الدنيا والآخرة
وأن يُطيل في عمرك أعواماً مديدة في صحة وعافية على حُسن العمل.
ولاانسَ أخي وأستاذي خريف برمجة على تقديم المساعدة واستعداده لتقديم ماهو أفضل وأحسن
فجزاهُ الله كل خير، وله من الدعاء ماهو احسنه..
إذا طُعِنتَ من الخلفِ فاعلمْ أنك في المقدمةِ
المشاركات : 2,008
المواضيع 58
الإنتساب : Oct 2014
السمعة :
1,005
الشكر: 31833
تم شكره 22865 مرات في 2187 مشاركات
السلام عليكم ورحمة الله وبركاته
أهلا بك أخي الكريم ,اللهم آمين يارب العالمين وإياك أخي العزيز , شكرا جزيلا لك وجزاك الله كل خير , بالتوفيق .
كود :
For Each Breathe in MyLife
Breathe.Say " سبحان الله والحمد لله ولا إله إلا الله والله أكبر أستغر الله العظيم وأتوب إليه"
Next
|