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

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (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=35970)



تعديل كود تحديث مخزن الكتب بعد الإعارة - مصمم هاوي - 02-08-20

السلام عليكم ورحمة الله وبركاتهُ
تقبلَ اللهُ منا ومنكم صالح الأعمال، وتقبل أضحيتكم

لدي مشروع إدارة مكتبة مركزية، متصل بقاعدة بيانات 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)

أرجو أنني قد استطعت إيصالي الفكرة جيداً وإلا اسوي مثال بسيط لتتضح الفكرة أكثر.
أرجو مشاركتي الحل الأمثل والأحسن والأنجع.


RE: تعديل كود تحديث مخزن الكتب بعد الإعارة - حريف برمجة - 02-08-20

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

عملك تمام التمام ولكن ينقصك نقطة واحده لتكمل العملية بأكمل وجه .

أولاً والمفروض اذا كان عدد كمية الكتاب صفر فبالتأكيد الكتاب غير موجود في المكتبة ليحسب بالسالب كما تفضلت في سؤالك .

الآلية تتم كالتالي :
استعلام عن الكتاب اما برقم باركود او برقم خاص للكتاب لجلب بياناته ومن ثم كتابة اسم المستعير ومدة الاستعارة .... إلخ هنا تجلب الكمية المتبقية وبعد اضافة بيانات المستعير تعمل حفظ للسجل وايضاً تعديل الكمية المتبقية للكتاب سالب الكمية المستعارة . ولا بد يتبقى عدد الكتاب في المكتبة كما الكمية الموجوده في البرنامج عند الإستعلام فبالتالي لن تجد كتاب بعد الإستعلام عنه كميته صفر .

أو تعمل شرط اذا الكمية المتبقية صفر لا تنفذ الكود واظهر رسالة .


RE: تعديل كود تحديث مخزن الكتب بعد الإعارة - مصمم هاوي - 02-08-20

(02-08-20, 09:56 PM)حريف برمجة كتب : أو تعمل شرط اذا الكمية المتبقية صفر لا تنفذ الكود واظهر رسالة .

هذا هو الشرط الذي فشلت في تحقيقه وأتمنى منك أخي خريف برمجة مشكورا صياغة الكود مع الشرط
أما بقية العملية فكلها تمام


RE: تعديل كود تحديث مخزن الكتب بعد الإعارة - حريف برمجة - 03-08-20

(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



RE: تعديل كود تحديث مخزن الكتب بعد الإعارة - مصمم هاوي - 03-08-20

(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 = (عدد نسخ الكتاب)
وهذا هو المطلوب تماماً


RE: تعديل كود تحديث مخزن الكتب بعد الإعارة - Ahmed_Mansoor - 03-08-20

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

أهلا بك أخي الكريم , وكل عام وأنت بخير , الشكر الجزيل للأخ "حريف برمجة" على تقديم المساعده الله يجعلها في ميزان حسناته , هذا تعديل آخر لكود الحفظ :

PHP كود :
If RS.State 1 Then RS.Close
RS
.open "select * from Table_Add_books where ID_Cod='" Trim(TextID.Text) & "'"cnadOpenKeysetadLockOptimistic
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) & "'"cnadOpenKeysetadLockOptimistic
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 

- جربه ورد خبر إن ضبط معاك , بالتوفيق .


RE: تعديل كود تحديث مخزن الكتب بعد الإعارة - مصمم هاوي - 03-08-20

(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) & "'"cnadOpenKeysetadLockOptimistic
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) & "'"cnadOpenKeysetadLockOptimistic
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 

- جربه ورد خبر إن ضبط معاك , بالتوفيق .

تقبل الله منا ومنكم أخي الحبيب وأستاذي الكريم أحمد منصور.
وبخصوص الضبط فكيف لايضبط معي وهو من لمساتك الفنية المبدعة ... فسوف يضبط إن شاء الله تعالى
وفعلاً قد ضبط معي والحمد لله رب العالمين.
فأسال الله العظيم أن يمنَّ عليك بالخير والبركات
وأن يرزقك من الخيري الدنيا والآخرة
وأن يُطيل في عمرك أعواماً مديدة في صحة وعافية على حُسن العمل.

ولاانسَ أخي وأستاذي خريف برمجة على تقديم المساعدة واستعداده لتقديم ماهو أفضل وأحسن
فجزاهُ الله كل خير، وله من الدعاء ماهو احسنه..


RE: تعديل كود تحديث مخزن الكتب بعد الإعارة - Ahmed_Mansoor - 07-08-20

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

أهلا بك أخي الكريم ,اللهم آمين يارب العالمين وإياك أخي العزيز , شكرا جزيلا لك وجزاك الله كل خير , بالتوفيق .