تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[تم الحل] مشكلة فى كود ال Update على SQL
#5
(09-04-19, 02:08 AM)elgokr كتب :
وعليكم السلام ورحمة الله وبركاته

اسف لتاخري بالرد لعدم تواجدى تقريباً امس
على اى حال شوف ركز معايا هنا فى الشرح لتوضح ما سبب
الخطاء الذى لديك ولماذا هذا وكيف حلها والحل سيعتمد انك تفهم الفكرة
حتى لا تقع بها مجدداً

اولاً فى كود الخاص بـ : 
PHP كود :
stored procedure 

انت تستخدم على هذا النحو
كود :
ALTER proc [dbo].[Update_Invoice]
@JOB_NO int,
@ENGINEER_RESPOSIBLE varchar(250),
@DATE datetime,
@COMPANY_NAME varchar(250),
@CUSTOMER_NAME varchar(250),
@SUBJECT varchar(250),
@REFERENCE varchar(250),
@ACKNOWLEDGMENT_COPY varchar(250),
@ACKNOWLEDGMENT_DATE varchar(250),
@NOTES varchar(250)
as
update INVOICES
set NOTES=@NOTES,
JOB_NO=@JOB_NO,
ENGINEER_RESPOSIBLE=@ENGINEER_RESPOSIBLE,
date=@DATE,
COMPANY_NAME=@COMPANY_NAME,
CUSTOMER_NAME=@CUSTOMER_NAME,
SUBJECT=@SUBJECT,
REFERENCE=@REFERENCE,
ACKNOWLEDGMENT_COPY=@ACKNOWLEDGMENT_COPY,
ACKNOWLEDGMENT_DATE=@ACKNOWLEDGMENT_DATE

where NOTES=@NOTES

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

السطر الذى يسبب مشكلة فهو :
كود :
           where NOTES = @NOTES

بالسطر ده انت كانت بتقول
ان عدل البيانات اللى انت كتبتها بنائاً على توافق جميع الملاحظات
لما هو مدخل فى textBox خاص الملاحظات

وهذا خطاء جداً
لانك يبدو لم تستوعب فكرة كلمة where فى كود التحديث

الفكرة من هذه الكلمة هو كا فكرة البحث او الفلتر تماماً
بمعنى انت محتاج تعدل بيانات على شخص واحد باسم : maxruined
والشخص ده يحمل ID رقم 34222

فهنا لاتمام تعديل بيانات للشخص ده فقط دون التعديل على اى شخص اخر
فهنا انا مطلوب ان اقوم بعمل 
كود :
where uid = @uid

والتى سيتم ارسال قيمة @uid بـ 34222

او انك تستخدم بهذا الشكل
كود :
where username = @username

والى هيكون قيمته هو maxruined
طيب ايهم افضل طريقة الـ id ولا user
بكل تاكيد وبدون اى تفكير عن طريق id

لان مش بس المساحة فى البحث اللى هيقلل من الوقت فى تنفيذ الامر
كذلك لضمان ان الرقم بطبيعة الحال غير مكرر عكس الاسم من الممكن ان يكون كا الاسم العام
وقد يكون مكرر من تشابه الاسماء بالعالم ولكن اذا كان الاسم كا اسم مستخدم غير مكرر فيمكن استخدامه
ولكن سيكون مدة تنفيذ الامر اكثر وقتاً من تنفيذ  الامر من خلال الرقم

فهنا لحل المشكلة يجب ان يكون الكود الخاص بك

لاخر سطر بهذا الشكل
كود :
where JOB_NO = @JOB_NO

وبكده يكون تم حل المشكلة
طيب بخصوص الملاحظات اللى رايتها واريد التحدث عنها

الملاحظة الاولى وهو هذا السطر من نفس الكود
كود :
JOB_NO = @JOB_NO,

من المفترض ان هذا العمود عبارة عن رقم الوظيفة
اللى ادخل اول مرة ولا يقبل للتغيير وكذلك للتكرار
بمعنى ان هذا العمود يفترض انه عبارة عن ID 
اذا كان موجود او لا فى الجدول عمود باسم ID
وياخذ رقم تلقائي عند ادخال
فايضاً عمود JOB_NO يجب ان يكون محدد بمفتاح 
حتى لا يكون به اى تكرار فى الارقام

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

ايضاً هذا السطر
كود :
JOB_NO = @JOB_NO,

لم يعد وجود وسط الكود اى اهمية

فقط يكفي ان يكون تواجده بهذا السطر فقط
كود :
where JOB_NO = @JOB_NO

طيب الملاحظة الثانية وبنفس الكود

وهو عن هذا السطر
كود :
ACKNOWLEDGMENT_DATE = @ACKNOWLEDGMENT_DATE

ما الاحظه انه من المفترض ان يكون هذا العمود تاريخ

ولكن مع ذلك تم تعريف قيمة المدخلة لهذا العمود نص من خلال هذا السطر
كود :
@ACKNOWLEDGMENT_DATE varchar(250),

وهذا خطاء اذا كان العمود فعلياً تاريخ

فيجب ان يكون السطر بهذا الشكل
كود :
@ACKNOWLEDGMENT_DATE datetime,

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

طيب الملاحظة الاخيرة
وهى بناءاً ما تم الشرح بخصوص عمود JOB_NO
فهنا عند اتمام تحرير البيانات فيجب ان تكون textBox الخاص بقيمة JOB_NO
ان تجعل خصائصه للقراءة فقط اى غير قابل للتعديل عليه من قبل المستخدم

لان كما تم الشرح انه سيكون مستخدم فى سطر
كود :
where JOB_NO = @JOB_NO

وهذا يعنى ان القيمة هنا موجودة فعلياً قبل اتمام التعديل وبعده
الا اذا كنت تريد اتمام التعديل و تريد ايضاً تكرار الارقام بهذا العمود
فيجب عليك اضاً استخدام عمود ID للترقيم التسلسلى التلقائي

بالنهاية الكود الخاص بـ stored procedure سيكون بهذا الشكل

وتذكر بانى جعلت تعريف ACKNOWLEDGMENT_DATE بكونه تاريخ فعدله فقط لما هو لديك
كود :
           ALTER proc[dbo].[Update_Invoice]
           @JOB_NO int,  
           @ENGINEER_RESPOSIBLE varchar(250),  
           @DATE datetime,
           @COMPANY_NAME varchar(250),
           @CUSTOMER_NAME varchar(250),  
           @SUBJECT varchar(250),  
           @REFERENCE varchar(250),  
           @ACKNOWLEDGMENT_COPY varchar(250),
           @ACKNOWLEDGMENT_DATE datetime,  
           @NOTES varchar(250)  
           as
           update INVOICES
           set JOB_NO = @JOB_NO,    
           ENGINEER_RESPOSIBLE = @ENGINEER_RESPOSIBLE,
           date = @DATE,  
           COMPANY_NAME = @COMPANY_NAME,
           CUSTOMER_NAME = @CUSTOMER_NAME,  
           SUBJECT = @SUBJECT,  
           REFERENCE = @REFERENCE,  
           ACKNOWLEDGMENT_COPY = @ACKNOWLEDGMENT_COPY,  
           ACKNOWLEDGMENT_DATE = @ACKNOWLEDGMENT_DATE,
           NOTES = @NOTES
           where JOB_NO = @JOB_NO  

وبالنهاية بعد مراجعة عمود ACKNOWLEDGMENT_DATE
وان صح التعبير بانه من نوع تاريخ وليس نص

فستاتى فى كود الـ C#
وتاتى على هذا السطر
كود :
param[8] = new SqlParameter("@ACKNOWLEDGMENT_DATE", SqlDbType.VarChar, 250);

وتجعله على هذا النحو
كود :
param[8] = new SqlParameter("@ACKNOWLEDGMENT_DATE", SqlDbType.DateTime);

بكدة يكون تم حل المشكلة مع الملاحظات الموضحة لك

اتمنى ان يكون الشرح بسيط
وبه جميع ما تريده تماماً

تحياتى لك
وتمنياتى لك التوفيق

حرفياً .. من اكتر الناس اللى بتشرح بطريقه رهيبه .. شكراً جداً 
بس فيه مشكلة اخيره 
وهى اني لما عملت جدول جديد سميته S.N وحددته بمفتاح علشان ميعملش تكرار للارقام 
بس المشكلة انى لو حذفت سطر فى النص مثلاً عندى ارقام من 1 الى 10 لو حذفت الرقم 4 هلاقي زي كدا 
1.2.3.5.6.7.8.9.10 من غير رقم 4 .. كنت عايزه يعمل ابديت للارقام بعد ما امسح اى سطر من الداتا بيز 
وتانى مره الف مليون شكر
الرد }}}
تم الشكر بواسطة: elgokr


الردود في هذا الموضوع
RE: مشكلة فى كود ال Update على SQL - بواسطة elgokr - 09-04-19, 02:08 AM
RE: مشكلة فى كود ال Update على SQL - بواسطة maxruined - 09-04-19, 03:06 PM
RE: مشكلة فى كود ال Update على SQL - بواسطة elgokr - 10-04-19, 09:54 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] مشكلة في مؤشر بايثون reem.564 0 263 08-05-25, 05:51 AM
آخر رد: reem.564
  [C#.NET] مشكلة عند عمل ال dataSet لعمل تقرير باستخدام ال Report Viewer ؟ Ashraf Baraka 0 323 04-12-24, 02:21 AM
آخر رد: Ashraf Baraka
  [C#.NET] مساعدة في مشكلة سورس كود kamel1978 5 1,017 30-11-24, 02:32 PM
آخر رد: altoki939
  مشكلة في اتصال سيد أحمد 2 434 24-09-24, 01:34 AM
آخر رد: Taha Okla
  [C#.NET] مشكلة حجم الادوات عند برمجة واجهات الويندوز Ahmed Alsharafi 1 465 03-08-24, 08:50 AM
آخر رد: WAEL ABED
Star [سؤال] مشكلة في السحب والأفلات داخل الفورم عند التصميم reduouo 1 623 02-03-24, 02:39 AM
آخر رد: Taha Okla
  مشكلة في المشاركة الدولية او خارج الشبكة issamsaid 1 930 22-11-23, 03:03 AM
آخر رد: HASAN6.0
  [تم الحل] مشكلة الاتصال بقاعده بيانات SQL على الشبكة maxruined 5 5,193 08-11-23, 01:00 AM
آخر رد: الحزين اليماني
  مشكلة في كلاس سطور الحياة 3 1,144 06-06-23, 09:47 AM
آخر رد: fouadhdfouad
  [سؤال] مشكلة في جملة التحديث سطور الحياة 4 1,391 02-06-23, 01:02 PM
آخر رد: سطور الحياة

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم