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

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



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

كود :
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
السلام عليكم...
قم بإزالة Try لنتعرف على مكان الخطأ ونقوم بمعالجته.
عزيزي كما قال لك الاخ اسامه قم بحذف try كي نعرف مكان الخطا
من رأيي كتجربة
قم بتغيير قيمة الحقل
TOTALARABIC
إلى
MAX
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
(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