تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تعديل على اجراء مخزن
#1
السلام عليكم 
لدي كود اجراء مخزن تم طرحة من احد الاخوة الافاضل . الطالب

 الكود  يفحص الباركود قبل الاضافة اذا كان موجودة و لا ان كانت موجود يظهر رسالة وان لا فايضيفها 

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

الكود

PHP كود :
ALTER PROCEDURE [dbo].[StoredProcedure2]


 @
barCodeNo bigint OUTPUT,
 
   @barCode varchar(50) = ''  ,
 
   @itemCode int 0
AS
 
   /* التأكد من إدخال بيانات */
 
   IF RTRIM(@barCode) = ''
 
   BEGIN
        RETURN 99999
    END

    
/* التأكد من موجود سجل مسبق */
 
   IF EXISTS (SELECT [barCodeFROM [Uint_ItemsTblWHERE [barCode]=@barCode )
 
   BEGIN
   SELECT  
@barCodeNo  MAX(barCodeFROM Uint_ItemsTbl  WHERE itemCode=@itemCode AND barCode=@barCode 
   
--محتاج ارجع بقيمة الاستعلام الى تكست بوكس فى الفورم 
        RETURN 55555
    END

    BEGIN 
TRY
 
       /* إدخال البيانات */
 
       INSERT INTO [Uint_ItemsTbl] ([barCode], [itemCode]) VALUES (@barCode, @itemCode)
 
   END TRY
 
   BEGIN CATCH
 
       RETURN -1
    END 
CATCH

 
   RETURN 0 

كود  VB.net


PHP كود :
     Using cmd As New SqlCommand("StoredProcedure2"conn)
 
           cmd.CommandType CommandType.StoredProcedure
            cmd
.Parameters.AddWithValue("@itemCode"TxtGrossIncome.Text.Trim)
 
           cmd.Parameters.AddWithValue("@barCode "txtPhone.Text.Trim)
 
           cmd.Parameters.AddWithValue("@barCodeNo "txtbarCode.Text.Trim)
 
           Dim param As New SqlParameter("returnValue"Nothing)
 
           param.Direction ParameterDirection.ReturnValue
            cmd
.Parameters.Add(param)
 
           conn.Open()
 
           cmd.ExecuteNonQuery()
 
           conn.Close()
 
           Dim retVal As Integer cmd.Parameters("returnValue").Value
            MsgBox
("Return Value:  " retVal)
 
           Select Case retVal
                Case 0
                    MsgBox
("تمت إضافة البيانات")
 
               Case 99999
                    MsgBox
("يجب إدخال بيانات")
 
               Case 55555
                    MsgBox
("الاسم موجود مسبقاً" retVal vbNewLine "@barCodeNo")
 
               Case Else
 
                   MsgBox("Return Value:  " retVal vbNewLine "فشل")
 
           End Select
        End Using 

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

لو موجود انا محتاج ارجع نفس الباركود الى الفورم
الرد }}}
تم الشكر بواسطة:
#2
وعليكم السلام

هذة طريقة إذا كنت تستخدم SQL SERVER 2012 فأعلى ، بالتحكم في الإجراء المخزن بواسطة العبارة THROW

SQL :
   

VB.NET :
   

ملاحظات :
   


VB.NET
كود :
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

       Using conn As New SqlClient.SqlConnection(My.Settings.MyConStr)
           Try
               Using cmd As New SqlCommand("StoredProcedure2", conn)
                   cmd.CommandType = CommandType.StoredProcedure
                   cmd.Parameters.AddWithValue("@itemCode", TxtGrossIncome.Text.Trim)
                   cmd.Parameters.AddWithValue("@barCode ", txtPhone.Text.Trim)

                   conn.Open()
                   cmd.ExecuteNonQuery()

                   MsgBox("تمت الإضافة بنجاح")
               End Using
           Catch SqlEx As SqlException

               If SqlEx.Number = 50601 Then
                   Dim barCodeNo As String = SqlEx.Message
                   MsgBox($"الباركود موجود بالفعل، رقم الباركود هو : {barCodeNo}", MsgBoxStyle.Exclamation, $"Sql Server Error")
               Else
                   MsgBox(SqlEx.Message, MsgBoxStyle.Critical, $"Sql Server Error : {SqlEx.Number}, Line:{SqlEx.LineNumber}")
               End If

           Catch ex As Exception

               MsgBox(ex.Message, MsgBoxStyle.Critical, "Application Error")

           Finally

               conn.Close()

           End Try
       End Using

   End Sub



SQL :
كود :
ALTER PROCEDURE StoredProcedure2
   @barCode nvarchar(50) = '',
   @itemCode int = 0
AS
BEGIN
    SET NOCOUNT ON;

   /* التأكد من إدخال بيانات */
   IF(@barCode IS NULL OR @barCode = '')
   BEGIN
       ;THROW 50600, N'عفواً، تأكد من إدخال بيانات.', 1;
   END

   /* التأكد من موجود سجل مسبق */
   IF EXISTS (SELECT [barCode] FROM [Uint_ItemsTbl] WHERE [barCode] = @barCode)
   BEGIN
        DECLARE @barCodeNo bigint = (SELECT barCode FROM Uint_ItemsTbl WHERE itemCode = @itemCode AND barCode = @barCode)
       --محتاج ارجع بقيمة الاستعلام الى تكست بوكس فى الفورم
       ;THROW 50601, @barCodeNo, 1;
   END

   BEGIN TRY    
        /* إدخال البيانات */
       INSERT INTO [Uint_ItemsTbl] ([barCode], [itemCode]) VALUES (@barCode, @itemCode)
   END TRY
   BEGIN CATCH
        DECLARE @ErrorMsg AS NVARCHAR(500) = ERROR_MESSAGE()
        ;THROW 50602, @ErrorMsg, 1;        
   END CATCH

END
GO

ملاحظة :
في الإجراء المخزن : THROW وظيفتها ترمي الخطاء,  فقط
والبرنامج يلتقط الخطاء ( بواسطة العبارة Catch SqlEx As SqlException )
الرد }}}
تم الشكر بواسطة: new_programer , new_programer , Taha Okla , ahmed_king2023
#3
شكر. جدا. على الرد والمساعدة

إن شاءالله.

هجرب الكود. إن شاءالله يكون المطلوب
الرد }}}
تم الشكر بواسطة:
#4
طيب انا شغال على سيكوال سيرفر 2008rd وفيجوال ستوديو 2010

اغير جملة ال throw
بايه

اسف علشان خبرتى قليله فى السيكوال
الرد }}}
تم الشكر بواسطة:
#5
ممكن. استاذي الفاضل
عبدالله الدوسري

توضح لي كيف اعدل الكود ليعمل مع سيكوال. 2008
الرد }}}
تم الشكر بواسطة:
#6
(11-04-23, 02:55 AM)new_programer كتب : ممكن. استاذي الفاضل
               عبدالله الدوسري

توضح لي كيف اعدل الكود ليعمل مع سيكوال. 2008

الأفضل تغير الـ SQL Server  لديك لإصدار أحدث

بعض الإجراءات تفرق سرعتها بشكل كبير جداً
مقارنة بـ SQL Server قبل وبعد 2014 

قبل 2014 بعض الاجراءات والدوال تحتاج كتباتها بعددد مرات حاجتك لها
بينما بعد 2014 أصبح يتعامل معها كإجراء أو وظائف ضمنية (inline)  
وكأنهم يجعلوا للـ SQL Server دور كبير في الذكاء الصناعي(كـ تعبير تقريبي)..
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
#7
(09-04-23, 10:36 PM)new_programer كتب : السلام عليكم 
لدي كود اجراء مخزن تم طرحة من احد الاخوة الافاضل . الطالب

 الكود  يفحص الباركود قبل الاضافة اذا كان موجودة و لا ان كانت موجود يظهر رسالة وان لا فايضيفها 

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

الكود

PHP كود :
ALTER PROCEDURE [dbo].[StoredProcedure2]


 @
barCodeNo bigint OUTPUT,
 
   @barCode varchar(50) = ''  ,
 
   @itemCode int 0
AS
 
   /* التأكد من إدخال بيانات */
 
   IF RTRIM(@barCode) = ''
 
   BEGIN
        RETURN 99999
    END

    
/* التأكد من موجود سجل مسبق */
 
   IF EXISTS (SELECT [barCodeFROM [Uint_ItemsTblWHERE [barCode]=@barCode )
 
   BEGIN
   SELECT  
@barCodeNo  MAX(barCodeFROM Uint_ItemsTbl  WHERE itemCode=@itemCode AND barCode=@barCode 
   
--محتاج ارجع بقيمة الاستعلام الى تكست بوكس فى الفورم 
        RETURN 55555
    END

    BEGIN 
TRY
 
       /* إدخال البيانات */
 
       INSERT INTO [Uint_ItemsTbl] ([barCode], [itemCode]) VALUES (@barCode, @itemCode)
 
   END TRY
 
   BEGIN CATCH
 
       RETURN -1
    END 
CATCH

 
   RETURN 0 

كود  VB.net


PHP كود :
     Using cmd As New SqlCommand("StoredProcedure2"conn)
 
           cmd.CommandType CommandType.StoredProcedure
            cmd
.Parameters.AddWithValue("@itemCode"TxtGrossIncome.Text.Trim)
 
           cmd.Parameters.AddWithValue("@barCode "txtPhone.Text.Trim)
 
           cmd.Parameters.AddWithValue("@barCodeNo "txtbarCode.Text.Trim)
 
           Dim param As New SqlParameter("returnValue"Nothing)
 
           param.Direction ParameterDirection.ReturnValue
            cmd
.Parameters.Add(param)
 
           conn.Open()
 
           cmd.ExecuteNonQuery()
 
           conn.Close()
 
           Dim retVal As Integer cmd.Parameters("returnValue").Value
            MsgBox
("Return Value:  " retVal)
 
           Select Case retVal
                Case 0
                    MsgBox
("تمت إضافة البيانات")
 
               Case 99999
                    MsgBox
("يجب إدخال بيانات")
 
               Case 55555
                    MsgBox
("الاسم موجود مسبقاً" retVal vbNewLine "@barCodeNo")
 
               Case Else
 
                   MsgBox("Return Value:  " retVal vbNewLine "فشل")
 
           End Select
        End Using 

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

لو موجود   انا محتاج ارجع نفس الباركود الى الفورم

لا توجد مشكلة في الكود والStored Procedure

لكن طالما ظهرت لك رسالة بأن الباركود موجود
فأنت من الأساس وضعته في txtbarCode
يعني مكتوب لديك أصلا، فما المشكلة!
الرد }}}
تم الشكر بواسطة: new_programer
#8
شكرا جدا.
المشكلة عندى امكانيات الجهاز ضعيفة ومش قادر استخدم اصدارات اعلي

بالنسبة الكود الكود اللى بستخدمة. كبير

انا بعمل استعلام عن كود الصنف مع كود المورد مع كود المخزن

لو يوجد باركود محتاج ارجعة فى تكست

لو مافيش هيعمل انشاء الباركود الجديد
الرد }}}
تم الشكر بواسطة:
#9
(11-04-23, 11:37 AM)new_programer كتب : شكرا جدا.
المشكلة عندى امكانيات الجهاز ضعيفة ومش قادر استخدم اصدارات اعلي

بالنسبة الكود  الكود اللى بستخدمة. كبير

انا بعمل استعلام عن كود الصنف مع كود المورد مع كود المخزن

لو يوجد باركود  محتاج ارجعة فى تكست

لو مافيش هيعمل انشاء الباركود الجديد

المقصد ان الباركود انت كاتبه في txtbarCode أثناء الاستعلام
فعند الاستعلام عن 'كود الصنف مع كود المورد مع كود المخزن' ورجع برسالة أنه موجود (كما هو واضح في الكود) فيكون الباركود اللذي استعلمت عنه يعتبر جديد وهو الموجود في txtbarCode أتناء الاستعلام
(09-04-23, 10:36 PM)new_programer كتب :
PHP كود :
Case 55555
        MsgBox
("الاسم موجود مسبقاً" retVal vbNewLine "@barCodeNo"
بدل (الاسم موجود مسبقاً) أكتب (الباركود موجود مسبقاً)
الرد }}}
تم الشكر بواسطة: new_programer
#10
لا. استاذي الفاضل انا لا استعلم عن الباركود دة مجرد مثال لان الكود عندى كبير
فعملت مثال مختصر للتوضيح الفكرة

انا محتاج اعمل استعلام لو يوجد باركود
الصنف مع المورد مع المخزن مع الوحدة

لو يوجد بيانات يرجع بالباركود

لو مافيش بيانات هيتم انشاء باركود
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  تعديل على فاتورة مبيعات خالد كامل1 4 124 26-03-24, 10:49 PM
آخر رد: خالد كامل1
  تعديل كود ارسال صورة الى الواتس new_programer 2 169 21-03-24, 10:07 PM
آخر رد: new_programer
  تعديل صب المجموع الكلي والمعدل والتقدير مصمم هاوي 3 173 19-03-24, 01:33 AM
آخر رد: مصمم هاوي
  تعديل طول حقل معين في جميع جداول القاعدة atefkhalf2004 1 108 09-03-24, 03:17 AM
آخر رد: atefkhalf2004
  تعديل بيانات عمود DataGridView دفعة واحدة مصمم هاوي 2 198 05-03-24, 08:27 PM
آخر رد: مصمم هاوي
  طريقة اجراء نسخة احتياطية و استرجاعها ؟ Osama NY 2 473 07-02-24, 08:59 PM
آخر رد: Kamil
  ممكن تعديل في كود التفقيط للارقام melad2002 2 365 01-01-24, 08:47 PM
آخر رد: melad2002
  [VB.NET] اريد تعديل في الكود عند طباعة DGV abu_hisham7 1 443 03-12-23, 02:40 AM
آخر رد: abu_hisham7
  [VB.NET] محتاج مساعدة تعديل على كود ZEEN4ZEEN 4 434 08-10-23, 09:11 PM
آخر رد: ZEEN4ZEEN
  محتاج تعديل على سورس كود - حفظ البيانات بدون قاعدة بيانات new_programer 5 680 30-08-23, 12:21 AM
آخر رد: atefkhalf2004

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


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