ماذا يعني هذا الخطأ اثناء الحفظ - sofiane-phy - 01-11-20
عند الحفظ يأتي هذا الخطأ مع العلم اني نقلت الكود صحيح من الدورة أفيدوني بارك الله فيكم
لم أعرف حتى مكان الخطأ
كود :
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
RE: ماذا يعني هذا الخطأ اثناء الحفظ - اسامه الهرماوي - 02-11-20
السلام عليكم...
قم بإزالة Try لنتعرف على مكان الخطأ ونقوم بمعالجته.
RE: ماذا يعني هذا الخطأ اثناء الحفظ - Master Hacker - 02-11-20
عزيزي كما قال لك الاخ اسامه قم بحذف try كي نعرف مكان الخطا
RE: ماذا يعني هذا الخطأ اثناء الحفظ - عبد العزيز البسكري - 02-11-20
من رأيي كتجربة
قم بتغيير قيمة الحقل
TOTALARABIC
إلى
MAX
RE: ماذا يعني هذا الخطأ اثناء الحفظ - Anas Mahmoud - 02-11-20
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
RE: ماذا يعني هذا الخطأ اثناء الحفظ - sofiane-phy - 02-11-20
(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
|