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

تصحيح كود حفظ بيانات من داتا قرد الى قاعدة بيانات

بدأه aboumazen في 5 أكتوبر 2011 · 11 رد · 1,135 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذا كود حفظ بيانات من داتاقريد في قاعدة بيانات

الكود يقوم بعملية الحفظ بشكل جيد

لكن العيب فيه انه لا يخرج الرسالة التي تخبر بان عملية الاضافة قد تمت و يظهر رسالة Catch ex As Exception

ولم افهم سبب هذا المشكل

جزاكم الله خيرا

 Try
        	SavInto.Connection = Conn
        	SavInto.CommandType = CommandType.Text
        	Dim i As Integer = 0
        	Do While GridMatiere.Rows.Count
            	SavInto.CommandText = "INSERT INTO TabMatiere1_1( Qoran )" & _
             			"values('" & GridMatiere.Rows(i).Cells(1).Value.ToString & "')"
            	Conn.Open()
            	SavInto.ExecuteNonQuery()
            	Conn.Close()
            	GridMatiere.Rows(i).Cells(1).Value = ""
            	i += 1

        	Loop
        	MsgBox("تمت عملية الاضافة والحفظ في قاعدة البيانات بنجاح")

        	'  Dim frm As New FormLeçons
        	' frm.Show()
        	'  Me.Hide()
    	Catch ex As Exception
        	MsgBox("لم يتم حفظ البيانات")
    	End Try
#2

السلام عليكم ...

أهلا aboumazen

حلقة الــ Do While يجب أن تكوم بهذا الشكل :

Do While i < GridIslamic1.Rows.Count

حتى تعرف الخطأ . اجعل الجزء catch بهذا الشكل :

Catch ex As Exception
            MsgBox("لم يتم حفظ البيانات")
            MsgBox(ex.Message)
        End Try

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

عدلت حسب ما ذكرت لكن يبقى الخطأ قائما

وهذه رسالة الخطأ

المشكلة في الكود انه يقوم بحفظ البيانات في القاعدة

و مع ذلك يرسل رسالة الخطأ

post-221483-094973900 1317851027_thumb.j

المرفقات
صورة الخطأ.jpg

تم تعديل هذه المشاركة بواسطة aboumazen في 6 أكتوبر 2011 في 00:45

#4

السلام عليكم ....

أخي أنت الآن في مرحلة تطوير و اختبار البرنامج .... لذلك لا داعي لـعبارة Try-Catch ... لانها تمنعنا من معرفة السطر الذي حصل فيه الخطأ , و عندما يعمل البرنامج بشكل صحيح .. نضع عبارة Try-Catch ...

لاحظ رسالة الخطأ الظاهرة تقول (أنا لغني إنكليزي ... لكن فهمت La Reference Object ) أنه هناك مرجع (reference) لا يشير إلى كائن (Object) بمعنى هناك شئ لم نعمل له New أو لم نسند له قيمة صحيحة ...

اعتقد أنه SavInto و يجب كتابة

SavInto = New OleDbCommand()

أو ربما conn ... لا أعرف ...

إذا قم بحذف عبارة Try-Catch

حتى نعرف السطر الذي حصل فيه الخطأ ..

أو ارفق الكود مع قاعدة البيانات (إذا لم يكن خاص)

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 6 أكتوبر 2011 في 11:05

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

راحعت ما دكرت و أظن ان الأمور على ما يرام من تلك الناحية

المشروع في المرفقات

leçon.7z

#6

السلام عليكم ....

لاحظ أنه عند إدخال بيانات سطر واحد في الــ Grid يعطي أن الــ GridMatiere.Rows.Count = 2 لأنه يوجد دائما سطر أخير وراء السطر الذي نكتب فيه و هذا السطر يكون له الــ GridMatiere.Rows(i).IsNewRow = True لذلك نأخذ الأسطر التي ليست جديدة :

post-94677-008791200 1317890288_thumb.pn

و يكون الكود الصحيح هو :

    Sub QoranSauvgarde()

        SavInto.Connection = Conn
        SavInto.CommandType = CommandType.Text
        Dim i As Integer = 0

        Do While i < GridMatiere.Rows.Count
            If GridMatiere.Rows(i).IsNewRow = False Then

                SavInto.CommandText = "INSERT INTO TabMatiere1_1( Qoran )" & _
                         "values('" & GridMatiere.Rows(i).Cells(1).Value.ToString & "')"
                Conn.Open()
                SavInto.ExecuteNonQuery()
                Conn.Close()
                GridMatiere.Rows(i).Cells(1).Value = ""
                Me.updatTheDataBase()

            End If
            i += 1
        Loop

        MsgBox("تمت عملية الاضافة والحفظ في قاعدة البيانات بنجاح")

    End Sub

موضوع آخر .. حجم قاعدة البيانات كبير جدا .... بسبب أنه قمت بحف الكثير من الجداول و البيانات نتيجة التجريب لذلك يحب إصلاحها كما في الصورة :

post-94677-086893200 1317890299_thumb.pn

و سيعمل بإذن الله ..

المرفقات
Empty_Row.PNGrepair.PNG

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 6 أكتوبر 2011 في 11:40

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#7

جزاك الله خيرا اخي حسام

الكود يعمل جيدا

لكن عذرا إذا طلبت منك المزيد من الشرح فلم أفهم جيدا ما سر هذا السطر في الكود و ما دوره

GridMatiere.Rows(i).IsNewRow = False Then

سؤال ثان

فعلت ما ذكرت لقاعدة البيانات لكن بدون جديد

هل علي ان امسج كل السجلات قبل عمل compact ؟؟؟

#8

سلام عليكم ..

اقتباس

لكن عذرا إذا طلبت منك المزيد من الشرح فلم أفهم جيدا ما سر هذا السطر في الكود و ما دوره

GridMatiere.Rows(i).IsNewRow = False Then

لاحظ انه لو كنا نكتب داخل الــ Grid في السطر الأول سيكون تحته سطر فارغ و يشار إليه برمز النجمة * كما في الصورة أعلاه .. هذا السطر أيضا لو كتبنا فيه بيانات سيكون هناك سطر جديد آخر تحته ..

و هذا السطر الأخير هو New Row لا يحوي بيانات و الوصول إلى خلاياه يعطي خطأ ...

إذا نحن نريد الأسطر التي ليست New Row أي New Row = False برمجيا يكون GridMatiere.Rows(i).IsNewRow = False

اقتباس

فعلت ما ذكرت لقاعدة البيانات لكن بدون جديد

هل علي ان امسج كل السجلات قبل عمل compact ؟؟؟

لا تمسح شئ ...

قارن حجم الملف قبل عملية الــ Compact و بعدها و ستلاحظ ان تم تصغير حجم القاعدة من 4 ميجا بايت تقريبا إلى أقل من 1 ميجابايت (ألم تلاحظ ذلك)

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#9
اقتباس

لاحظ انه لو كنا نكتب داخل الــ Grid في السطر الأول سيكون تحته سطر فارغ و يشار إليه برمز النجمة * كما في الصورة أعلاه .. هذا السطر أيضا لو كتبنا فيه بيانات سيكون هناك سطر جديد آخر تحته ..

و هذا السطر الأخير هو New Row لا يحوي بيانات و الوصول إلى خلاياه يعطي خطأ ...

إذا نحن نريد الأسطر التي ليست New Row أي New Row = False برمجيا يكون GridMatiere.Rows(i).IsNewRow = False

الان فهمت

لكن ولد فهمي سؤالا اخرsmile.gif إن لم يكن هناك إحراج blush.gifblush.gifblush.gif

اثناء التسجيل يجب ان تكون كل الخلايا تحوي بيانات

هل من طريقة لتجنب ذلك

يعني اثناء تنفيذ هذا الكود

SavInto.ExecuteNonQuery()

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

اقتباس

لا تمسح شئ ...

قارن حجم الملف قبل عملية الــ Compact و بعدها و ستلاحظ ان تم تصغير حجم القاعدة من 4 ميجا بايت تقريبا إلى أقل من 1 ميجابايت (ألم تلاحظ ذلك)

في الحقيقة لم الاحظ الا بعد أن اخبرتني

لكن انا اجتهدت وكنت قد مسحت كل السجلات التجربيبية

ووجدت ان الرقم التلقائي قد تعدل و اصبح يبدأ من الواجد عند إضافة سجلات جديدة

جزاك الله خيرا

#10

سلام عليكم ...

اقتباس
اثناء التسجيل يجب ان تكون كل الخلايا تحوي بيانات

لمعالجة ذلك نعمل function يتأكد أن كل خلايا الــ Grid فيها بيانات :

Function Is_Empty_Grid() As Boolean

    	Dim i As Integer = 0
    	Dim num As Integer = GridMatiere.Rows.Count - 1
    	For i = 0 To i = num
        	If GridMatiere.Rows(i).Cells(1).Value = "" Then
            	Return True
        	End If
        	i = i + 1
    	Next
    	Return False
	End Function

ثم تكون عملية الحفظ كمايلي :

Sub QoranSauvgarde()

    	If Is_Empty_Grid() Then
        	MsgBox("رجاء ادخل بيانات")
        	Exit Sub

    	End If
    	SavInto.Connection = Conn
    	SavInto.CommandType = CommandType.Text
    	Dim i As Integer = 0
    	GridMatiere.EndEdit()
    	'GridMatiere.Rows(i).IsNewRow() 

    	Do While i < GridMatiere.Rows.Count
        	If GridMatiere.Rows(i).IsNewRow = False Then

            	SavInto.CommandText = "INSERT INTO TabMatiere1_1( Qoran )" & _
                     	"values('" & GridMatiere.Rows(i).Cells(1).Value.ToString & "')"
            	Conn.Open()
            	SavInto.ExecuteNonQuery()
            	Conn.Close()
            	GridMatiere.Rows(i).Cells(1).Value = ""
            	Me.updatTheDataBase()

        	End If
        	i += 1
    	Loop

    	MsgBox("تمت عملية الاضافة والحفظ في قاعدة البيانات بنجاح")

	End Sub

بالتوفيق ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#11

جزاك الله خيرا جزاك الله الحنة انت وواليك و جميع المسلمين

يبدو اني اتعبتك معي

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

لكن البرنامح يفعل ذلك فقد كان لايفعل عندما كان فيه خطأ اما الان فهو يفعل والحمد لله

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

ملاحظة : ا

تمنى ان تكون سهوا منك

اقتباس
سلام عليكم ...

هذه تحية اهل الكتاب ونحن والحمد لله من المسلمين

تم تعديل هذه المشاركة بواسطة aboumazen في 7 أكتوبر 2011 في 15:06

#12

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

اقتباس
جزاك الله خيرا جزاك الله الحنة انت وواليك و جميع المسلمين

بارك الله بك أخي ... و يسر لك العلم و رزقك الجنة ووالديك و جميع المسلمين

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

جيد ...

اقتباس

اتمنى ان تكون سهوا منك

اقتباس
سلام عليكم ...

هذه تحية اهل الكتاب ونحن والحمد لله من المسلمين

بارك الله بك , و شكرا لأنك نبهتني إلى ذلك ....فالحمد لله على نعمة الإسلام ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…