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

رسالة خطأ لا أعرف كيف احلها

بدأه ابو رفيق في 8 مارس 2013 · 11 رد · 1,478 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الكود التالي يقوم بالاستعلام عن سجل وحيد ويقوم بجلب البيانات ووضع القيم في داتاجريدفيو ولا توجد مشكلة

 

الكود في حدث

Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit

 

TextBox4.Text = DataGridView1.CurrentCell.Value.ToString

Command_Sql.CommandText = "select * from [A_ACCOUNT] where

= '" & DataGridView1.CurrentCell.Value.ToString & "' and
 = '" & MDIParent1.All_Account_Comp.ComboBox.SelectedValue & "' " 'and [Is_Main] = '" & TextBox10.Text & "'"
Command_Sql.Connection = Conn_SqL
If Conn_SqL.State = ConnectionState.Open Then Conn_SqL.Close()
Conn_SqL.Open()
Datareader_Sql4 = Command_Sql.ExecuteReader
If Datareader_Sql4.Read = True Then
TextBox5.Text = Datareader_Sql4.Item("AccName")
DataGridView1.CurrentRow.Cells(2).Value = Datareader_Sql4.Item("code_co").ToString 'TextBox5.Text
DataGridView1.CurrentRow.Cells(3).Value = TextBox1.Text
DataGridView1.CurrentRow.Cells(4).Value = TextBox2.Text
DataGridView1.CurrentRow.Cells(6).Value = Datareader_Sql4.Item("AccName").ToString
DataGridView1.CurrentRow.Cells(7).Value = Datareader_Sql4.Item("acclevel").ToString
DataGridView1.CurrentRow.Cells(8).Value = Datareader_Sql4.Item("accsub").ToString
DataGridView1.CurrentRow.Cells(9).Value = Datareader_Sql4.Item("income_list").ToString
DataGridView1.CurrentRow.Cells(13).Value = "لم يرحل"
DataGridView1.CurrentRow.Cells(14).Value = MDIParent1.All_F_Year.ComboBox.Text
DataGridView1.CurrentRow.Cells(15).Value = "0"
DataGridView1.CurrentRow.Cells(16).Value = "0"

SendKeys.Send("{up}")

SendKeys.Send("{left}")

Else

End If

 

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

 

أرجوا المساعدة فقد حاولت كثيرا ولا أفهم سب المشكلة

post-221207-0-51308000-1362716173_thumb.

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#2

نوع هذا الحقل رقم لا يقبل النص تاكد من مصدر البيانات المضاف اليها

#3

أستاذي الفاضل إليك ماتوصلت له

 

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

DataGridView1_CellEndEdit

  

 

TextBox5.Text = DataGridView1.CurrentRow.Cells(5).Value.ToString

SendKeys.Send("{up}")

SendKeys.Send("{left}")

 

أقوم بتنفيذ الكود التالي من خلال Button  فيقوم بالاستعلام بدون مشاكل وإدخال القيم على الخلايا بدون مشاكل العمود ر

قم 10 أتركه فارغا لأني سأقوم بالكتابه عليه

 

 

Command_Sql.CommandText = "select * from [A_ACCOUNT] where

 

 

= '" & TextBox4.Text & "' and
 = '" & MDIParent1.All_Account_Comp.ComboBox.SelectedValue & "' " 'and [Is_Main] = '" & TextBox10.Text & "'"
Command_Sql.Connection = Conn_SqL
If Conn_SqL.State = ConnectionState.Open Then Conn_SqL.Close()
Conn_SqL.Open()
Datareader_Sql4 = Command_Sql.ExecuteReader
If Datareader_Sql4.Read = True Then
TextBox5.Text = Datareader_Sql4.Item("AccName").ToString
TextBox6.Text = Datareader_Sql4.Item("acclevel").ToString
TextBox7.Text = Datareader_Sql4.Item("accsub").ToString
TextBox8.Text = Datareader_Sql4.Item("income_list").ToString
DataGridView1.CurrentRow.Cells(2).Value = MDIParent1.All_Account_Comp.ComboBox.SelectedValue.ToString
DataGridView1.CurrentRow.Cells(3).Value = TextBox1.Text
DataGridView1.CurrentRow.Cells(4).Value = TextBox2.Text
DataGridView1.CurrentRow.Cells(6).Value = TextBox5.Text
DataGridView1.CurrentRow.Cells(7).Value = TextBox6.Text
DataGridView1.CurrentRow.Cells(8).Value = TextBox7.Text
DataGridView1.CurrentRow.Cells(9).Value = TextBox8.Text
DataGridView1.CurrentRow.Cells(13).Value = "لم يرحل"
DataGridView1.CurrentRow.Cells(14).Value = MDIParent1.All_F_Year.ComboBox.Text
DataGridView1.CurrentRow.Cells(15).Value = "0"
DataGridView1.CurrentRow.Cells(16).Value = "0"
Else
End If
 
المشكلة عند نقل الكود السابق في أي حدث من داخل الداتا جريد تحدث المشكلة كما في الصورة وبالتحديد عن السطر الملون بالأحمر
 
عند تجهيز الداتا جريد للعمل أضغط المفتاح جديد وتحته الكود التالي ربما يكون سبب المشكلة في اختلاف البيانات
 
DataGridView1.DataSource = Nothing
DataGridView1.Rows.Clear()
 
Dim DataAdapter_Sql5 As New SqlDataAdapter("select * from [A_Temp_sub_Journal] where [id_Journal] = '" & TextBox1.Text & "' and [Fiscal_year] = '" & MDIParent1.All_F_Year.ComboBox.Text & "' and
 = '" & MDIParent1.All_Account_Comp.ComboBox.SelectedValue & "' order by [ID]", Conn_SqL)
Dim SqlDataAdapter As New DataTable
DataAdapter_Sql5.Fill(SqlDataAdapter)
DataGridView1.DataSource = SqlDataAdapter
 
DataGridView1.Columns(0).ReadOnly = False
DataGridView1.Columns(1).ReadOnly = False
DataGridView1.Columns(2).ReadOnly = False
DataGridView1.Columns(3).ReadOnly = False
DataGridView1.Columns(4).ReadOnly = False
DataGridView1.Columns(5).ReadOnly = False
DataGridView1.Columns(6).ReadOnly = False
DataGridView1.Columns(7).ReadOnly = False
DataGridView1.Columns(8).ReadOnly = False
DataGridView1.Columns(9).ReadOnly = False
DataGridView1.Columns(10).ReadOnly = False
DataGridView1.Columns(11).ReadOnly = False
DataGridView1.Columns(12).ReadOnly = False
DataGridView1.Columns(13).ReadOnly = False
DataGridView1.Columns(14).ReadOnly = False
DataGridView1.Columns(15).ReadOnly = False
DataGridView1.Columns(16).ReadOnly = False
DataGridView1.Columns(0).Visible = False
DataGridView1.Columns(1).Visible = False
DataGridView1.Columns(2).Visible = False
DataGridView1.Columns(3).Visible = False
DataGridView1.Columns(4).Visible = False
DataGridView1.Columns(5).Visible = True
DataGridView1.Columns(6).Visible = True
DataGridView1.Columns(7).Visible = False
DataGridView1.Columns(8).Visible = False
DataGridView1.Columns(9).Visible = False
DataGridView1.Columns(10).Visible = True
DataGridView1.Columns(11).Visible = False
DataGridView1.Columns(12).Visible = True
DataGridView1.Columns(13).Visible = False
DataGridView1.Columns(14).Visible = False
DataGridView1.Columns(15).Visible = True
DataGridView1.Columns(16).Visible = True
DataGridView1.Columns(0).Width = 0
DataGridView1.Columns(1).Width = 0
DataGridView1.Columns(2).Width = 0
DataGridView1.Columns(3).Width = 0
DataGridView1.Columns(4).Width = 0
DataGridView1.Columns(5).Width = 111
DataGridView1.Columns(6).Width = 250
DataGridView1.Columns(7).Width = 0
DataGridView1.Columns(8).Width = 0
DataGridView1.Columns(9).Width = 0
DataGridView1.Columns(10).Width = 300
DataGridView1.Columns(11).Width = 0
DataGridView1.Columns(12).Width = 110
DataGridView1.Columns(13).Width = 0
DataGridView1.Columns(14).Width = 0
DataGridView1.Columns(15).Width = 118
DataGridView1.Columns(16).Width = 118
DataGridView1.Columns(0).HeaderText = "م تلقائي"
DataGridView1.Columns(1).HeaderText = "مسلسل"
DataGridView1.Columns(2).HeaderText = "كود الشركة"
DataGridView1.Columns(3).HeaderText = "رقم القيد"
DataGridView1.Columns(4).HeaderText = "تاريخ القيد"
DataGridView1.Columns(5).HeaderText = "رقم الحساب" & vbNewLine & "Account Num"
DataGridView1.Columns(6).HeaderText = "اسم الحساب" & vbNewLine & "Account Name"
DataGridView1.Columns(7).HeaderText = "المستوى"
DataGridView1.Columns(8).HeaderText = "مدين/دائن"
DataGridView1.Columns(9).HeaderText = "الحساب يتبع"
DataGridView1.Columns(10).HeaderText = "بيان الحركة" & vbNewLine & "Discription"

 

 

DataGridView1.Columns(11).HeaderText = "كود حساب 
مركز التكلفة"
DataGridView1.Columns(12).HeaderText = "مركز 
التكلفة" & vbNewLine & "Cost Center"
DataGridView1.Columns(13).HeaderText = "حالة 
القيد"
DataGridView1.Columns(14).HeaderText = "العام 
المالي"
DataGridView1.Columns(15).HeaderText = "مدين" & 
vbNewLine & "Dibet"
DataGridView1.Columns(16).HeaderText = "دائن" & 
vbNewLine & "Cridet"

 

أرجوا تكون الصورة وضحت لأني

وفي انتظار مساعتكم في حل المشكلة

 

ولي طلب آخر إذا هناك إمكانية ووقت لذلك

عمل مرجع في موضوع منفصل يحتوي على كافة الأحداث التي يمكن أن نحتاجها للداتا جريد ولكم جزيل الشكر

تم تعديل هذه المشاركة بواسطة ابو رفيق في 9 مارس 2013 في 08:26

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#5
KARIMSOFT كتب:

 

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

 

الملف المرفق به ملف نص لإنشاء قاعدة البيانات نظرا لكبر حجم القاعدة

 

المطلوب تصحيح الخطأ

 

فكرة عمل الشاشة لكي أسهل على حضرتك فهم المشكلة

 

في بداية التحميل للفورم يقوم بفحص جدول مؤقت مطابق تماما لجودل القيود  حيث يقوم المستخدم بكتابة القيد في الجدول المؤقت وعند الانتهاء منه بشكل نهائي سيقوم بحفظه ( هذا ما أود فعله  بعد حل المشكلة ) إذا كان هناك قيد مؤقت غير محفوظ يقوم بعرضه وإن لم يجد يقوم بعرض آخر قيد محفوظ في جدول القيود الرئيسي

 

رقم 2  - أريد إذا كانت الخلية رقم 5 في أي صف فارغة لا ينتقل منها إلا بعد كتابة كود الحساب

رقم 3 -  أفحص الكود إذا كان موجود ينفذ الكود تحت المفتاح 12  وينتقل للخليه وصف الحركة رقم 10  لكتابة شرح الحركة

رقم 4 - عند النقر على آخر خلية يقوم بحفظ الصف في قاعدة البيانات

 

ما أريده توضيح الأحدات التي أضع فيها الأكواد ولك خالص شكري وتقديري

Datagrid.rar

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#6

Up

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#7

على الرغم من اني لم استطع متابعة الموضوع بشكل كامل ، الا اني اعتقد ان سبب مشكلتك هو ان البرنامج يحاول تحويل القيمة التي في الخلية الى قيمة عددية ، فعندما تقوم بادخال عدد يتم التنفيذ بنجاح ولكن عندما تدخل نص لا ينجح الامر لانه يحاول تحويل النص الى رقم ولكنه يفشل، كون الاستثناء من نوع SqlException يجعلني اشك بإن مصدر المشكله هو في قاعدة البيانات نفسها اي الجداول و انواع الحقول في قاعدة البيانات

 

تحياتي

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#8
mental-driller كتب:

على الرغم من اني لم استطع متابعة الموضوع بشكل كامل ، الا اني اعتقد ان سبب مشكلتك هو ان البرنامج يحاول تحويل القيمة التي في الخلية الى قيمة عددية ، فعندما تقوم بادخال عدد يتم التنفيذ بنجاح ولكن عندما تدخل نص لا ينجح الامر لانه يحاول تحويل النص الى رقم ولكنه يفشل، كون الاستثناء من نوع SqlException يجعلني اشك بإن مصدر المشكله هو في قاعدة البيانات نفسها اي الجداول و انواع الحقول في قاعدة البيانات

 

تحياتي

 

 

ممكن توضيح أخي الفاضل يمكن تساعدني في الوصول لحل المشكلة

هي الداتا جريد مرتبطة بأي جدول

 

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

 

والثانية الاستعلام من جدول دليل الحسابات علشان اتأكد من صحة كود الحساب المكتوب

 

الأكيد إن الجملة الأولى لا تسبب مشكلة والدليل لما بوقف الاستعلام من داخل حدث الداتا جريد لاتحدث مشكلة

 

اذا نراجع الكود الخاص عن الاستعلام الثاني والمسئول عن التحقق من صحة كود الحساب

 

وهو كالتالي

 

 

Command_Sql.CommandText = "select * from [A_ACCOUNT] where

= '" & TextBox4.Text & "' and
 = '" & MDIParent1.All_Account_Comp.ComboBox.SelectedValue & "' " 'and [Is_Main] = '" & TextBox10.Text & "'"

Command_Sql.Connection = Conn_SqL

If Conn_SqL.State = ConnectionState.Open Then Conn_SqL.Close()

Conn_SqL.Open()

Datareader_Sql4 = Command_Sql.ExecuteReader

If Datareader_Sql4.Read = True Then

TextBox5.Text = Datareader_Sql4.Item("AccName").ToString

TextBox6.Text = Datareader_Sql4.Item("acclevel").ToString

TextBox7.Text = Datareader_Sql4.Item("accsub").ToString

TextBox8.Text = Datareader_Sql4.Item("income_list").ToString

DataGridView2.CurrentRow.Cells(2).Value = MDIParent1.All_Account_Comp.ComboBox.SelectedValue.ToString

DataGridView2.CurrentRow.Cells(3).Value = TextBox1.Text

DataGridView2.CurrentRow.Cells(4).Value = TextBox2.Text

DataGridView2.CurrentRow.Cells(6).Value = TextBox5.Text

DataGridView2.CurrentRow.Cells(7).Value = TextBox6.Text

DataGridView2.CurrentRow.Cells(8).Value = TextBox7.Text

DataGridView2.CurrentRow.Cells(9).Value = TextBox8.Text

DataGridView2.CurrentRow.Cells(13).Value = "لم يرحل"

DataGridView2.CurrentRow.Cells(14).Value = MDIParent1.All_F_Year.ComboBox.Text

DataGridView2.CurrentRow.Cells(15).Value = "0"

DataGridView2.CurrentRow.Cells(16).Value = "0"

Else

End If

 

إيه علاقته بالداتا جريد مش قادر أول للموضوع ده أتمنى المساعدة

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#9

حسنا كما قلت فإن نوع الخطأ SqlException يدل لك بشكل صريح على وجود مشكلة في تنفيذ عملية معينة في قاعدة البيانات.

 

المشكلة حسب رأيي ليست في الجملة التي قمت بكتاتبها باستخدام VB.NET وانما على مايبدو عدم توافق بين نوع عمود معين في جدول معين في قاعدة البيانات و النوع الذي ترسله انت من الكود الخاص بك.

 

لم اتابع كثير بصراحة لانها VB.NET ولكن استطيع قرأة الكود وفهمه وكوني اقوم بنفس الاشياء في C# فإني استطيع معرفة ما تقوم به ولكن يوجود لدي نوع من عدم الارتياح لـ ـVB.NET :)

 

حسنا  على مايبدو ان خطأ يحدث في الجملة الثانية حسب ما قلت ، لذا قم بعمل Break Point عند بداية الاستعلام الثاني وقم بتتبعه بالضغط على F11 خلال التنفيذ وانظر في اي سطر يفشل

 

هل من الممكن ان تخبرني اسم العمود الذي لا يتقبل القيمة الـ ـstring ونوع العمود الذي يقابلة في قاعدة البيانات؟ على ما اعتقد انك قلت ان اسمه عمود الوصف، ما نوع العمود الذي يقابلة في قاعدة البيانات؟

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#10
mental-driller كتب:

حسنا كما قلت فإن نوع الخطأ SqlException يدل لك بشكل صريح على وجود مشكلة في تنفيذ عملية معينة في قاعدة البيانات.

 

المشكلة حسب رأيي ليست في الجملة التي قمت بكتاتبها باستخدام VB.NET وانما على مايبدو عدم توافق بين نوع عمود معين في جدول معين في قاعدة البيانات و النوع الذي ترسله انت من الكود الخاص بك.

 

لم اتابع كثير بصراحة لانها VB.NET ولكن استطيع قرأة الكود وفهمه وكوني اقوم بنفس الاشياء في C# فإني استطيع معرفة ما تقوم به ولكن يوجود لدي نوع من عدم الارتياح لـ ـVB.NET :)

 

حسنا  على مايبدو ان خطأ يحدث في الجملة الثانية حسب ما قلت ، لذا قم بعمل Break Point عند بداية الاستعلام الثاني وقم بتتبعه بالضغط على F11 خلال التنفيذ وانظر في اي سطر يفشل

 

هل من الممكن ان تخبرني اسم العمود الذي لا يتقبل القيمة الـ ـstring ونوع العمود الذي يقابلة في قاعدة البيانات؟ على ما اعتقد انك قلت ان اسمه عمود الوصف، ما نوع العمود الذي يقابلة في قاعدة البيانات؟

 

 

 

ضاقت فلما استحكمت حلقاتها فرجت

 

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

 

بس هو ده إلى حصل

 

المشكلة إن الكود كان في حدث   DataGridView1_CellEndEdit   فكل مرة بضغط Enter  فبينفذ جملة الاستعلام  فكان بيحصل مشاكل ولما بنفذ الكود من تحت Button  لا يحدث مشاكل فحاولت لغاية لما عملت شرط إن كود الاستعلام لا ينفذ إلا إذا كان في عمود محدد وبالفعل نجحت المحاولة واشتغل بدون مشاكل الحمد لله

 

أشكرك اخي جزيل الشكر على كل حرف كتبته في الموضوع وإن شاء الله في ميزان حسناتك

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#11

اود ان اقدم لك نصيحه علها تنفعك، قم بوضع الجمل التي تستعلم من قاعدة البيانات في فئة class خاص بها بحيث تكون هناك static methods داخل هذه الفئة مثلا:

 

public static class DataLayer{
public static DataTable GetUser(){
.

.
.}
.
.
.
.
}

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

 

class user

class customer

class role

وقم بعمل دوال تحول من DataTable مثلا الى User و اجعل واجهة المستخدم تتعامل مع الفئات بدلا من قاعدة البيانات هذا ما يسمى بالــ N-tier design حيث يجعل التعامل مفصول بين مستويات البرنامج

تم تعديل هذه المشاركة بواسطة mental-driller في 14 مارس 2013 في 04:43

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#12

أشكرك أخي

 

mental-driller كتب:

اود ان اقدم لك نصيحه علها تنفعك، قم بوضع الجمل التي تستعلم من قاعدة البيانات في فئة class خاص بها بحيث تكون هناك static methods داخل هذه الفئة مثلا:

 

public static class DataLater{
public static DataTable GetUser(){
.

.
.}
.
.
.
.
}

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

 

class user

class customer

class role

وقم بعمل دوال تحول من DataTable مثلا الى User و اجعل واجهة المستخدم تتعامل مع الفئات بدلا من قاعدة البيانات هذا ما يسمى بالــ N-tier design حيث يجعل التعامل مفصول بين مستويات البرنامج

 

 

أشكرك اخي على النصيحة وإن شاء الله جاري البحث عن اسلوب N-tier design  ودراسته لأني بصراحة لا دراية لي به جيدا

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


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