الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

خطأ في كود الحفظ عن طريق DataGridView

بدأه محمد فؤاد تركي في 2 سبتمبر 2012 · 10 رد · 2,621 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السادة الزملاء

السلام عليكم ورحمة الله وبركاتة

أحاول حفظ البيانات من خلال DataGridview ولكن هناك خطأ ولا أعرف مصدرة علي الرغم انني اختبرت الــ stored procedure وهو يعمل بشكل سليم لكن عندما أقوم بتطبيق الكود من خلال الاداة تظهر هذه المشكلة

مرفق كود الحفظ الخاص بالاجراء المخزن

ALTER Proc [dbo].[SaveDataDetail]

(
@ID int
,@DEInc int
,@Locations nvarchar (15)
,@Description nvarchar (35) 
,@Per nvarchar (10)
,@Qty float = null
,@Rate float = null
,@Currency nvarchar (5)
,@Total	float = null
,@Note	nvarchar (50)
)

AS
If not exists (Select * from Tbl_Transactions Where DEInc =@DEInc)

begin
insert into Tbl_Transactions(DEInc,Locations,Description,Per ,Qty,Rate,Currency,Total,Note)

Values (@DEInc,@Locations,@Description,@Per,isnull(@Qty,0),isnull(@Rate,0),@Currency,isnull(@Total,0),@Note)

end
else

update Tbl_Transactions SET DEInc=@DEInc,Locations=@Locations,Description=@Description,Per=@Per,Qty=@Qty,Rate=@Rate,Currency=@Currency,
Total=@Total,Note=@Note
where ID=@ID

كود الحفظ الخاص بالشاشة

SQLCon.Open()

        Dim i As Integer
        For i = 0 To DgvMain.Rows.Count - 2
            Dim row As DataGridViewRow = DgvMain.Rows(i)

            Dim Locations As DataGridViewTextBoxCell = row.Cells(0)
            Dim Description As DataGridViewTextBoxCell = row.Cells(1)
            Dim Per As DataGridViewComboBoxColumn = DirectCast(DgvMain.Columns(2), DataGridViewComboBoxColumn)
            Dim Qty As DataGridViewTextBoxCell = row.Cells(3)
            Dim Rate As DataGridViewTextBoxCell = row.Cells(4)
            Dim Currency As DataGridViewComboBoxColumn = DirectCast(DgvMain.Columns(5), DataGridViewComboBoxColumn)
            Dim Total As DataGridViewTextBoxCell = row.Cells(6)
            Dim Note As DataGridViewTextBoxCell = row.Cells(7)
            Dim ID As DataGridViewTextBoxCell = row.Cells(8)
            Dim DEInc As DataGridViewTextBoxCell = row.Cells(9)

            Dim insercommand As New SqlCommand("SaveDataDetail", SQLCon)

            insercommand.CommandType = CommandType.StoredProcedure
            insercommand.Connection = SQLCon
            insercommand.ExecuteNonQuery()
        Next

        MsgBox("Data Saved")

        SQLCon.Close()

الخطأ الذي يظهر وقت الحفظ

post-46243-049798400 1346610848_thumb.jp

المرفقات
1.jpg

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#2

الرسالة تقول أنه عندك Parameter اسمه @ID قيمته غير محددة

فيجب أولا تحديد القيمة لهذا المعامل

أو جعل هذا الحقل ترقيم تلقائي

#3

أخي الفاضل أحمد

أنا أعرف جيدا معني الرسالة لكن عندما أحدد قيمة للحقل ID تظهر المشكلة وعندما لا أحدد قيمة تظهر المشكلة مع العلم أن هذا الحقل ترقيم تلقائي

وكما ذكرت سابقا ان الاجراء المخزن يعمل بشكل سليم والمشكلة في كود الحفظ ومع ذلك جربت ان احذف الحقل @ID تماما فظهرت نفس الرسالة و لكن في الحقل الذي يليلة

لذلك ممكن ارفق لك مثال للاطلاع

وشكرا علي مجهودك

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#6

بارك الله فيك أخي الكريم أحمد علي مساعدتك وآسف جدا علي التأخير في الرد لكثرة بحثي عن أمثلة تلبي ما أريدة ووجدت فعلا مثال هنا يشرح طريقة الحفظ بطريقة Master and Detail وفعلا المثال جيد جدا لكن عندما حاولت تنفيذ المثال عندي ظهرت عندي خطأ ولا أعرف ماسببة

علي أي حال مرفق المثال الذي طلبتة للتعديل عليه وياريت لو قدرت تخليه يشتغل علي الاجراء المخزن في قاعدة البيانات بدلا من كتابة جملة الــ insert مباشرة في محرر الفيجوال بيسك

post-46243-050171900 1346668505_thumb.jp

Sample.rar

المرفقات
1.jpg

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#7

الحمد لله وبفضلة استطعت ضبط كود الحفظ وتخزين البيانات في الجدول كــ هيدر و ديتيل

وهذا هو الكود بعد تعديلة

لكن ظهرت لي مشكلة آخري محيرة ولا استطيع حتي الان حلها وهي كالتالي ،،،

طريقة عمل الشاشة هو الضغط علي زر جديد لتقوم بملي عمودين فقط في الشاشة ( Locations & Description ) وهي بيانات تنزل بشكل افتراضي كلما ضغط المستخدم علي زر جديد

ثم بعد ذلك يقوم المستخدم بمليء باقي الاعمده

المشكلة هنا عندما أقوم بحفظ الشاشة بعد ملئها بالبيانات عمود ( Locations & Description ) أجدة فارغ تماما من البيانات داخل الجدول فقمت بتجربة الادخال يدويا بنفسي فاكتشفت انه عندما اقوم ادخال بيانات يدويا في هذه الاعمده تقوم الشاشة بحفظ البيانات المدخلة بشكل سليم اما في حالة ملئها بالبيانات تلقائيا من خلال زر جديد لا تقوم بحفظ هذين الحقلين

مرفق كود مليء الشاشة بالبيانات

ومرفق الملف كمثال للتعديل عليه

dtfill.Clear()
        Dim da As New SqlDataAdapter("FillDefaults", SQLCon)
        da.Fill(dtfill)
        DgvMain.DataSource = dtfill
        SQLCon.Close()

post-46243-079555800 1346696918_thumb.jp

Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click

        Try
            If MsgBox("Are you sure to save Data", MsgBoxStyle.YesNo + MsgBoxStyle.Information, "warring") = MsgBoxResult.No Then
                Exit Sub
            Else

                SQLCon.Open()
                Dim strSQL As String = "INSERT INTO Tbl_Header (HDInc,CuDate,Client,ServiceProvider,AirLines,AirPort,GrandTotal) VALUES('" & Me.TxtAuto.Text & "','" & Me.TEXDate.Text & "','" & Me.CboClient.Text & "','" & Me.CboSP.Text & "','" & Me.CboAirLines.Text & "','" & Me.txtAirPorts.Text & "','" & Me.TxtGrand.Text & "') SELECT SCOPE_IDENTITY();"

                Dim cmd As SqlCommand = New SqlCommand(strSQL, SQLCon)
                Dim identity As Integer
                identity = Integer.Parse(cmd.ExecuteScalar().ToString()) 'Get the @Identity Column

                For Each row As DataGridViewRow In Me.DgvMain.Rows
                    If row.Cells(Me.Qty.Index).Value = "" Then Exit For

                    strSQL = "INSERT INTO Tbl_Transactions (Locations, Description, Per, Qty, Rate, Total, Currency, Note, DEInc)VALUES('" & row.Cells(Me.Locations.Index).Value _
                    & "','" & row.Cells(Me.Description.Index).Value & "','" & row.Cells(Me.Per.Index).Value _
                    & "','" & row.Cells(Me.Qty.Index).Value & "','" & row.Cells(Rate.Index).Value & _
                    "','" & row.Cells(Me.Total.Index).Value _
                    & "','" & row.Cells(Me.Currency.Index).Value & "','" & row.Cells(Me.Note.Index).Value & "','" & identity & "')"

                    cmd = New SqlCommand(strSQL, SQLCon)
                    cmd.ExecuteNonQuery()
                Next row
            End If

            MessageBox.Show("Record saved successfully", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            SQLCon.Close()
        End Try
    End Sub

Logistics.rar

المرفقات
1.jpg

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#8

هل من مساعد ؟

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#9

السادة الزملاء

بعد محاولات وتجارب عديدة اكتشفت انه عندما تأتي البيانات من الجدول للجريد عن طريق DataTable تصبح النتيجة كالتالي

وهذا معناه ان العمودين الذي يتم جلبهم من الداتا بيز غير العمودين الموجودين علي الجريد وتكون النتيجة ان هذين العمودين يتم حفظهم فارغين داخل الجدول وهذا هو السبب

فحاولت أن أعمل Mapping بين الحقول فكتبت هذا الاسكريبت الذي يمليء البيانات

post-46243-098046000 1346872838_thumb.jp

alter proc fill
as
begin
Select locations,Description,null as p, null as o  from Tbl_Locations
end

وهذا يعني اننا ارسل عمودين قيمتهم فارغة للعمودين الذي قيمتهم فارغة بالجريد لحل المشكلة وبالتالي يتم حفظ الاعمده المملوءة بالجدول ونجحت هذه الفكرة لكن ظهرت مشكلة

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

post-46243-028068700 1346873820_thumb.jp

لذلك اشعر بان الحل قد قرب لكن محتاج من يساعدني فيه

وشكرا لكم جميعا

المرفقات
1.jpg12.jpg

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#10

توصلت للمشكلة والحمد لله وهي

استبدال سطر

row.Cells("Description").Value

بدلا من

row.Cells(Me.Description.Index).Value

وشكرا للجميع

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#11

الاستاذ محمد

انا عاطف

وارغب في

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

وبرنامج مرتبات تربية وتعليم سورس او اي اكس اي

01005290987

مواضيع مشابهة