تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
خطأ Data type mismatch in criteria expression
#1
السلام عليكم ورحمة الله و بركاته 
عندى مشكبة فى الكود التالي
كود :
Dim id_emp As String
           id_emp = txt_id.Text

           Dim str_edit As String
           str_edit = "update TBL_EMP set name_emp=@name_emp, id_expire_emp=@id_expire_emp, id_copy_emp=@id_copy_emp,  lisans_emp=@lisans_emp," & vbCrLf &
                      "lisans_expire_emp=@lisans_expire_emp, passport_id_emp=@passport_id_emp, passport_expire_emp=@passport_expire_emp," & vbCrLf &
                      "birth_emp=@birth_emp, national_emp=@national_emp, job_emp=@job_emp, state_emp=@state_emp, state_date_emp=@state_date_emp," & vbCrLf &
                      "id_co=@id_co, name_co=@name_co, start_work_emp=@start_work_emp, passport_num_emp=@passport_num_emp, file_num_emp=@file_num_emp," & vbCrLf &
                      "dorg_num_emp=@dorg_num_emp, active_emp=@active_emp where id_emp = " & id_emp
           cmd = New OleDbCommand(str_edit, con)
           cmd.Parameters.Add(New OleDbParameter("@name_emp", OleDbType.VarChar)).Value = txt_name.Text
           cmd.Parameters.Add(New OleDbParameter("@id_expire_emp", OleDbType.Date)).Value = dtp_id_expire.Value.ToString("yyyy/MM/dd")
           cmd.Parameters.Add(New OleDbParameter("@id_copy_emp", OleDbType.VarChar)).Value = txt_id_copy.Text
           cmd.Parameters.Add(New OleDbParameter("@lisans_emp", OleDbType.Boolean)).Value = chb_lisans.Checked
           cmd.Parameters.Add(New OleDbParameter("@lisans_expire_emp", OleDbType.Date)).Value = dtp_lisans_expire.Value.ToString("yyyy/MM/dd")
           cmd.Parameters.Add(New OleDbParameter("@passport_id_emp", OleDbType.VarChar)).Value = txt_passport_id.Text
           cmd.Parameters.Add(New OleDbParameter("@passport_expire_emp", OleDbType.Date)).Value = dtp_passport_expire.Value.ToString("yyyy/MM/dd")
           cmd.Parameters.Add(New OleDbParameter("@birth_emp", OleDbType.Date)).Value = dtp_birth.Value.ToString("yyyy/MM/dd")
           cmd.Parameters.Add(New OleDbParameter("@national_emp", OleDbType.VarChar)).Value = cob_national.Text
           cmd.Parameters.Add(New OleDbParameter("@job_emp", OleDbType.VarChar)).Value = cob_job.Text
           cmd.Parameters.Add(New OleDbParameter("@state_emp", OleDbType.VarChar)).Value = state_emp
           cmd.Parameters.Add(New OleDbParameter("@state_date_emp", OleDbType.Date)).Value = dtp_state.Value.ToString("yyyy/MM/dd")
           cmd.Parameters.Add(New OleDbParameter("@id_co", OleDbType.Integer)).Value = txt_id_co.Text
           cmd.Parameters.Add(New OleDbParameter("@name_co", OleDbType.VarChar)).Value = cob_name_co.Text
           cmd.Parameters.Add(New OleDbParameter("@start_work_emp", OleDbType.Date)).Value = dtp_start_work.Value.ToString("yyyy/MM/dd")
           cmd.Parameters.Add(New OleDbParameter("@passport_num_emp", OleDbType.VarChar)).Value = txt_passport_num.Text
           cmd.Parameters.Add(New OleDbParameter("@file_num_emp", OleDbType.VarChar)).Value = txt_file_num.Text
           cmd.Parameters.Add(New OleDbParameter("@dorg_num_emp", OleDbType.VarChar)).Value = txt_dorg_num.Text
           cmd.Parameters.Add(New OleDbParameter("@active_emp", OleDbType.Boolean)).Value = chb_active.Checked

           con.Open()
           cmd.ExecuteNonQuery()
           con.Close()

بيظهر رساله خطا Data type mismatch in criteria expression. 


مع العلم ان كود insert  صحيح لنفس الجدول و مستخدم نفس البراميترات
الرد }}}
تم الشكر بواسطة:
#2
جربهم عامود عامود لترى الخطأ في اي عامود

قم بعمل UPDATE على حقل واحد لترى الخطأ اين
الرد }}}
تم الشكر بواسطة: khaled Mohammed
#3
(21-09-20, 04:45 PM)Anas Mahmoud كتب : جربهم عامود عامود لترى الخطأ في اي عامود

قم بعمل UPDATE على حقل واحد لترى الخطأ اين

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


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة:
#4
طيب جرب AddWithValue ودعه يحدد لك نوع البيانات المناسب في الكل

( اعلم انها ليست الطريقة الاكثر كفائة ولكنها ستعمل ان شاء الله )

كود :
       cmd.Parameters.AddWithValue("@passport_expire_emp", dtp_passport_expire.Value)

ايضا اظن انه من الخطأ ان تقوم بتحويل التاريخ لقيمة String يجب ان تمرر التاريخ كما هو Date
الرد }}}
تم الشكر بواسطة:
#5
(21-09-20, 05:13 PM)Anas Mahmoud كتب : طيب جرب AddWithValue ودعه يحدد لك نوع البيانات المناسب في الكل

( اعلم انها ليست الطريقة الاكثر كفائة ولكنها ستعمل ان شاء الله )

كود :
       cmd.Parameters.AddWithValue("@passport_expire_emp", dtp_passport_expire.Value)

ايضا اظن انه من الخطأ ان تقوم بتحويل التاريخ لقيمة String يجب ان تمرر التاريخ كما هو Date

 استاذنا الغالي 
جربت ADDWITHVALUE لكن نفس الخطأ 
جربت التاريخ بدون tostring لكن نفس الخطا 

لكن جربت string.format اشتغل الكود 
كود :
       Dim str_edit As String
       str_edit = String.Format("update TBL_EMP set name_emp='{0}', id_expire_emp=#{1}#, id_copy_emp='{2}', lisans_emp={3}, lisans_expire_emp =#{4}#, passport_id_emp='{5}', passport_expire_emp=#{6}#, birth_emp=#{7}#, national_emp='{8}', job_emp='{9}', state_emp='{10}', state_date_emp=#{11}#, id_co={12}, name_co='{13}', start_work_emp=#{14}#, passport_num_emp='{15}', file_num_emp='{16}', dorg_num_emp='{17}', active_emp={18} where id_emp ='{19}' ", txt_name.Text, dtp_id_expire.Value.ToString("yyyy/MM/dd"), txt_id_copy.Text, chb_lisans.Checked, dtp_lisans_expire.Value.ToString("yyyy/MM/dd"), txt_passport_id.Text, dtp_passport_expire.Value.ToString("yyyy/MM/dd"), dtp_birth.Value.ToString("yyyy/MM/dd"), cob_national.Text, cob_job.Text, state_emp, dtp_state.Value.ToString("yyyy/MM/dd"), txt_id_co.Text, cob_name_co.Text, dtp_start_work.Value.ToString("yyyy/MM/dd"), txt_passport_num.Text, txt_file_num.Text, txt_dorg_num.Text, chb_active.Checked, id_emp)
       cmd = New OleDbCommand(str_edit, con)

(21-09-20, 05:13 PM)Anas Mahmoud كتب : طيب جرب AddWithValue ودعه يحدد لك نوع البيانات المناسب في الكل

( اعلم انها ليست الطريقة الاكثر كفائة ولكنها ستعمل ان شاء الله )

كود :
       cmd.Parameters.AddWithValue("@passport_expire_emp", dtp_passport_expire.Value)

ايضا اظن انه من الخطأ ان تقوم بتحويل التاريخ لقيمة String يجب ان تمرر التاريخ كما هو Date

لكن لماذا لم يعمل مع البراميترات و عمل مع string.format لا اعرف
الرد }}}
تم الشكر بواسطة:
#6
للاسف البرنامج غير محمي الان من ال SQL injection

استخدام البراميترات ليس خيارا رفاهيا ،

جرب الى ان تصل الى الحل وارسل مثال به قاعدة البيانات فارغة ربما اجرب معك

اتضح ان المشكلة في الجزء الخاص بالشرط where id_emp = " & id_emp

اجعله بارمتر ايضا وجرب ان شاء الله تظبط


كود :
where id_emp = @id_emp

ثم مرره على هيئة integer

كود :
Dim id_emp As Integer = Integer.Parse(txt_id.Text)
cmd.Parameters.AddWithValue("@id_emp", id_emp)

https://stackoverflow.com/a/28155776/14137871
الرد }}}
تم الشكر بواسطة:
#7
(21-09-20, 07:06 PM)Anas Mahmoud كتب : للاسف البرنامج غير محمي الان من ال SQL injection

استخدام البراميترات ليس خيارا رفاهيا ،

جرب الى ان تصل الى الحل وارسل مثال به قاعدة البيانات فارغة ربما اجرب معك

اتضح ان المشكلة في الجزء الخاص بالشرط where id_emp = " & id_emp

اجعله بارمتر ايضا وجرب ان شاء الله تظبط


كود :
where id_emp = @id_emp

ثم مرره على هيئة integer

كود :
Dim id_emp As Integer = Integer.Parse(txt_id.Text)
cmd.Parameters.AddWithValue("@id_emp", id_emp)

https://stackoverflow.com/a/28155776/14137871

معني ذلك ان استخدام string.format ليس صحيا للبرنامج ؟

النقطه الثانية عمود id_emp فى الجدول انا عملته من نوع short text  لان الارقام المدخله فيه كبيرة 10 ارقام . هل استخدام double افضل ام اتركه كما هو 

بخصوص جعل المتغير id_emp من نوع integer هل لا يمثل تعارض و العمود الخاص به فى الجدول من نوع short text ؟
الرد }}}
تم الشكر بواسطة:
#8
نعم استخدام string.format لبناء الاستعلامات ليس امنا 


طيب طالما مش رقم خليه String زي ما هو بس استخدم Parameters

ومن الاول طالما كان نص يبقى كان لازم تحطه بين علامتين ' ' دي كان المشكلة من الاول


كود :
where id_emp ='" & id_emp & "'"

بس برده استخدم بارامترز احسن
الرد }}}
تم الشكر بواسطة: khaled Mohammed , khaled Mohammed
#9
مشكور استاذ انس
بارك الله فيك و اسعد قلبك
الرد }}}
تم الشكر بواسطة: Anas Mahmoud , Anas Mahmoud


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  data type mismatch in criteria expression access um_noor20 3 438 08-10-23, 10:14 AM
آخر رد: um_noor20
  تعديل بيانات data table المتألق9 1 480 19-03-23, 11:24 PM
آخر رد: عضو جديد
  مشكلة في نقل قيمة الخلية الفارغة من data grid view الى ملف الاكسل Mohammed Nafa 1 350 12-01-23, 08:32 PM
آخر رد: salamandal
  Conversion from string "" to type 'Double' is not valid. حماده ممدوح البحيرى 13 1,351 22-07-22, 06:59 PM
آخر رد: أبو خالد الشكري
  Data Grid View mohamedassim 1 564 01-07-22, 06:41 PM
آخر رد: سعود
Lightbulb *○● قراءة نوع البيانات Data Type من قاعدة البيانات ●○* أبو خالد الشكري 10 1,738 29-06-22, 11:51 PM
آخر رد: أبو خالد الشكري
  السلام عليكم 2 مشكله حقل data type نوع text لو الكود اكثر من 10احرف لا يضيف ahmedhhh2 4 1,294 17-03-22, 12:52 AM
آخر رد: ahmedhhh2
  السلام عليكم اريد استخدام هذا الجدول مع كتابة المسافه select*from patent data ahmedhhh2 4 1,187 22-11-21, 07:31 AM
آخر رد: ahmedhhh2
  [VB.NET] ممكن مساعدة في جدول Category وعرضه في Data grid love_hell 0 802 10-09-21, 12:15 AM
آخر رد: love_hell
  [كود] Imports System.Data.OleDb Public Class Form1 Public con As New OleDbConnection("P رضوان الجماعي 1 974 27-03-21, 04:56 AM
آخر رد: علي بنيان

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم