تعديل على اجراء مخزن - new_programer - 09-04-23
السلام عليكم
لدي كود اجراء مخزن تم طرحة من احد الاخوة الافاضل . الطالب
الكود يفحص الباركود قبل الاضافة اذا كان موجودة و لا ان كانت موجود يظهر رسالة وان لا فايضيفها
انا محتاج لو الكود موجود يطبع قيمة الباركود فى تكست بوكس
الكود
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 [barCode] FROM [Uint_ItemsTbl] WHERE [barCode]=@barCode ) BEGIN SELECT @barCodeNo = MAX(barCode) FROM 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
انا بعمل استعلام عن هل يوجد باركود لصنف مع مورد
لو موجود انا محتاج ارجع نفس الباركود الى الفورم
RE: تعديل على اجراء مخزن - عبدالله الدوسري - 10-04-23
وعليكم السلام
هذة طريقة إذا كنت تستخدم SQL SERVER 2012 فأعلى ، بالتحكم في الإجراء المخزن بواسطة العبارة THROW
SQL :
[attachment=28833]
VB.NET :
[attachment=28832]
ملاحظات :
[attachment=28834]
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 )
RE: تعديل على اجراء مخزن - new_programer - 10-04-23
شكر. جدا. على الرد والمساعدة
إن شاءالله.
هجرب الكود. إن شاءالله يكون المطلوب
RE: تعديل على اجراء مخزن - new_programer - 10-04-23
طيب انا شغال على سيكوال سيرفر 2008rd وفيجوال ستوديو 2010
اغير جملة ال throw
بايه
اسف علشان خبرتى قليله فى السيكوال
RE: تعديل على اجراء مخزن - new_programer - 11-04-23
ممكن. استاذي الفاضل
عبدالله الدوسري
توضح لي كيف اعدل الكود ليعمل مع سيكوال. 2008
RE: تعديل على اجراء مخزن - Taha Okla - 11-04-23
(11-04-23, 02:55 AM)new_programer كتب : ممكن. استاذي الفاضل
عبدالله الدوسري
توضح لي كيف اعدل الكود ليعمل مع سيكوال. 2008
الأفضل تغير الـ SQL Server لديك لإصدار أحدث
بعض الإجراءات تفرق سرعتها بشكل كبير جداً
مقارنة بـ SQL Server قبل وبعد 2014
قبل 2014 بعض الاجراءات والدوال تحتاج كتباتها بعددد مرات حاجتك لها
بينما بعد 2014 أصبح يتعامل معها كإجراء أو وظائف ضمنية (inline)
وكأنهم يجعلوا للـ SQL Server دور كبير في الذكاء الصناعي(كـ تعبير تقريبي)..
RE: تعديل على اجراء مخزن - - 11-04-23
(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 [barCode] FROM [Uint_ItemsTbl] WHERE [barCode]=@barCode ) BEGIN SELECT @barCodeNo = MAX(barCode) FROM 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
يعني مكتوب لديك أصلا، فما المشكلة!
RE: تعديل على اجراء مخزن - new_programer - 11-04-23
شكرا جدا.
المشكلة عندى امكانيات الجهاز ضعيفة ومش قادر استخدم اصدارات اعلي
بالنسبة الكود الكود اللى بستخدمة. كبير
انا بعمل استعلام عن كود الصنف مع كود المورد مع كود المخزن
لو يوجد باركود محتاج ارجعة فى تكست
لو مافيش هيعمل انشاء الباركود الجديد
RE: تعديل على اجراء مخزن - - 11-04-23
(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")
بدل (الاسم موجود مسبقاً) أكتب (الباركود موجود مسبقاً)
RE: تعديل على اجراء مخزن - new_programer - 11-04-23
لا. استاذي الفاضل انا لا استعلم عن الباركود دة مجرد مثال لان الكود عندى كبير
فعملت مثال مختصر للتوضيح الفكرة
انا محتاج اعمل استعلام لو يوجد باركود
الصنف مع المورد مع المخزن مع الوحدة
لو يوجد بيانات يرجع بالباركود
لو مافيش بيانات هيتم انشاء باركود
|