تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
ماذا يعني هذا الخطأ اثناء الحفظ
#1
عند الحفظ يأتي هذا الخطأ مع العلم اني نقلت الكود صحيح من الدورة أفيدوني بارك الله فيكم



لم أعرف حتى مكان الخطأ 

كود :
Try
           Dim Sql = "Select * From ReceiptOfltems Where VoucherCode=N'" & (VoucherCode.Text) & "'"
           Dim Adp As New SqlClient.SqlDataAdapter(Sql, SQLConn)
           Dim DS As New DataSet
           Adp.Fill(DS)
           Dim DT = DS.Tables(0)
           If DT.Rows.Count > 0 Then
               '******************************************************************************************************************************
               VoucherCode.Text = Format(GET_LAST_RECORD("ReceiptOfltems", "Voucherid") + 1, "ROF000000")
               SupplierlnVoiceCode.Text = GET_LAST_RECORD("ReceiptOfltems", "Voucherid") + 1
               '******************************************************************************************************************************
           Else
               Dim DR = DT.NewRow
               DR!VoucherCode = VoucherCode.Text
               DR!VoucherDate = VoucherDate.Value
               DR!SupplierCode = SupplierCode.Text
               DR!SupplierName = SupplierName.Text
               DR!SupplierlnVoiceCode = SupplierlnVoiceCode.Text
               DR!SupplierlnvoiceDate = SupplierlnvoiceDate.Value
               DR!SupplierInVoiceType = SupplierInVoiceType.Text
               DR!SalesTAX = Val(SalesTAX.Text)
               DR!Notes = Notes.Text
               DR!TotalQty = TotalQty.Text
               DR!TotalDiscount = Val(TotalDiscount.Text)
               DR!TotalVoucher = Val(TotalVoucher.Text)
               DR!TotalArabic = TotalArabic.Text
               DR!Status = True
               DT.Rows.Add(DR)
               Dim Cmd As New SqlClient.SqlCommandBuilder(Adp)
               Adp.Update(DT)
           End If

           BtnNew_Click(Nothing, Nothing)
           MsgBox(" تم حفظ سند التوريد فى قاعدة البيانات بنجاح", MsgBoxStyle.Information, "رسالة تأكيد")

       Catch ex As Exception
           MessageBox.Show(ex.Message, "فشل في الحفظ  ", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)

       End Try



كود :
Sub Showrecord(Vcode As String)

       DataGridView1.Rows.Clear()
       Dim Sql = "Select * From ReceiptOfltems Where VoucherCode=N'" & (Vcode) & "'"
               Dim Adp As New SqlClient.SqlDataAdapter(Sql, SQLConn)
       Dim DS As New DataSet
       Adp.Fill(DS)
       Dim DT = DS.Tables(0)
       If DT.Rows.Count = 0 Then
           MsgBox("عزيزى عفواً لم يتم العثور على السند يرجى التأكد من الرقم", MsgBoxStyle.Exclamation, "تنبيه")
       Else
           Dim DR = DT.Rows(0)

           VoucherCode.Text = CType((DR!VoucherCode), String)
           VoucherDate.Text = CType((DR!VoucherDate), String)
           SalesTAX.Text = CType((DR!SalesTAX), String)

           Notes.Text = CType((DR!Notes), String)

           SupplierCode.Text = CType((DR!SupplierCode), String)
           SupplierName.Text = CType((DR!SupplierName), String)
           SupplierInVoiceType.Text = CType((DR!SupplierInVoiceType), String)
           SupplierlnVoiceCode.Text = CType((DR!SupplierlnVoiceCode), String)
           SupplierlnvoiceDate.Text = CType((DR!SupplierlnvoiceDate), String)

           TotalQty.Text = CType((DR!TotalQty), String)

           TotalDiscount.Text = CType((DR!TotalDiscount), String)
           TotalVoucher.Text = CType((DR!TotalVoucher), String)
           TotalArabic.Text = CType((DR!TotalArabic), String)
           DR!Status = True

       End If
       Adp.Dispose()
       DS.Dispose()
       DT.Dispose()

   End Sub


الملفات المرفقة صورة/صور
   
------------------------
منكم أتعلم
------------------------

الرد
تم الشكر بواسطة:
#2
السلام عليكم...
قم بإزالة Try لنتعرف على مكان الخطأ ونقوم بمعالجته.
 الذي يدعي ان لغته هي افضل لغة برمجة، فاعلم انه مستخدم وليس مبرمج.
الرد
تم الشكر بواسطة: عبد العزيز البسكري , sofiane-phy
#3
عزيزي كما قال لك الاخ اسامه قم بحذف try كي نعرف مكان الخطا
الرد
#4
من رأيي كتجربة
قم بتغيير قيمة الحقل
TOTALARABIC
إلى
MAX
الرد
#5
https://stackoverflow.com/a/5591482

باختصار الخطأ هو انك تحاول وضع قيمة نصية اكبر من الذي يسمح به نوع العمود في قاعدة البيانات

راجع قاعدة البيانات قد تكون معرف الاعمدة بنوع Nvarchar(50) مثلا اجعلها Nvarchar(MAX) هذا النوع مرن مع النصوص اي كان طولها

ايضا لاحظت انك تستخدم الطريقة الخطأ في تمرير المعلومات الى الاستعلام


كود :
Where VoucherCode=N'" & (VoucherCode.Text) & "'"

هذا مثال واضح للنقطة ضعف ال SqlInjection ، لابد من استخدام البرامترات رابجع موضوعي :

http://vb4arb.com/vb/showthread.php?tid=36486

ايضا لاحظت انك تستخدم Val في حساب قيم مالية وهو خطأ لاكثر من سبب اهمهم انه يعود بقيمة Double بينما يجب ان تكون معاملاتك المالية كلها ب Decimal ، وايضا خطأ لانه لا يعطيك اي دلالة اذا ما كان النص المدخل سليم ام لا

بدلا منها استخدم Decimal.TryParse :

http://vb4arb.com/vb/showthread.php?tid=36426
الرد
#6
(02-11-20, 04:55 PM)Anas Mahmoud كتب : https://stackoverflow.com/a/5591482

باختصار الخطأ هو انك تحاول وضع قيمة نصية اكبر من الذي يسمح به نوع العمود في قاعدة البيانات

راجع قاعدة البيانات قد تكون معرف الاعمدة بنوع Nvarchar(50) مثلا اجعلها Nvarchar(MAX) هذا النوع مرن مع النصوص اي كان طولها

ايضا لاحظت انك تستخدم الطريقة الخطأ في تمرير المعلومات الى الاستعلام


كود :
Where VoucherCode=N'" & (VoucherCode.Text) & "'"

هذا مثال واضح للنقطة ضعف ال SqlInjection ، لابد من استخدام البرامترات رابجع موضوعي :

http://vb4arb.com/vb/showthread.php?tid=36486

ايضا لاحظت انك تستخدم Val في حساب قيم مالية وهو خطأ لاكثر من سبب اهمهم انه يعود بقيمة Double بينما يجب ان تكون معاملاتك المالية كلها ب Decimal ، وايضا خطأ لانه لا يعطيك اي دلالة اذا ما كان النص المدخل سليم ام لا

بدلا منها استخدم Decimal.TryParse :

http://vb4arb.com/vb/showthread.php?tid=36426

تم حل المشكل اصبت أخي Anas Mahmoud كان الخطأ في القيمة النصية جزاكم الله خيرا اخوتي اسامه الهرماوي ، Master Hacker ، عبد العزيز البسكري ، Anas Mahmoud
------------------------
منكم أتعلم
------------------------

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



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


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