PDA

View Full Version : سوال: مشکل با دستور آپدیت



khashaya
پنج شنبه 27 بهمن 1390, 00:15 صبح
من دستور آپدیت رو به صورت زیر نوشتم اما خطا میده
جالب اینه که این کد رو در یه پروژه جدا گانه استفاده کردم و بدون مشکل اجرا میشه
ولی اینجا خطای syntax update eror رو میده



Dim con As System.Data.OleDb.OleDbConnection
Dim cmd As System.Data.OleDb.OleDbCommand
con = New System.Data.OleDb.OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=D:\poroje payani\1\web froshgah\logindb.mdb")
con.Open()
cmd = New System.Data.OleDb.OleDbCommand("update kala set code='" + txteditcod.Text + "',name='" + txteditnam.Text + "',price='" + txteditprc.Text + "',image='" + txteditaks.Text + "' where code=@code", con)
cmd.Parameters.AddWithValue("@name", txteditnam.Text)
cmd.Parameters.AddWithValue("@code", txteditcod.Text)
cmd.Parameters.AddWithValue("@price", txteditprc.Text)
cmd.Parameters.AddWithValue("@image", txteditaks.Text)

cmd.ExecuteNonQuery()
con.Close()



بانکم اکسس هست و فیلدهای بانکم همه از نوع text هستن به جز فیلد code که از نوع number هست و فیلد code کلید اصلی بانکمم هست
خیلی ممنون میشه اگر کسی راه حلی بهم پیشنهاد کنه چون واقعا کارم گیره و هفته آینده باید این پروژه رو تحویل بدم

Alirezanet
پنج شنبه 27 بهمن 1390, 00:34 صبح
من دستور آپدیت رو به صورت زیر نوشتم اما خطا میده
جالب اینه که این کد رو در یه پروژه جدا گانه استفاده کردم و بدون مشکل اجرا میشه
ولی اینجا خطای syntax update eror رو میده



Dim con As System.Data.OleDb.OleDbConnection
Dim cmd As System.Data.OleDb.OleDbCommand
con = New System.Data.OleDb.OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=D:\poroje payani\1\web froshgah\logindb.mdb")
con.Open()
cmd = New System.Data.OleDb.OleDbCommand("update kala set code='" + txteditcod.Text + "',name='" + txteditnam.Text + "',price='" + txteditprc.Text + "',image='" + txteditaks.Text + "' where code=@code", con)
cmd.Parameters.AddWithValue("@name", txteditnam.Text)
cmd.Parameters.AddWithValue("@code", txteditcod.Text)
cmd.Parameters.AddWithValue("@price", txteditprc.Text)
cmd.Parameters.AddWithValue("@image", txteditaks.Text)

cmd.ExecuteNonQuery()
con.Close()



بانکم اکسس هست و فیلدهای بانکم همه از نوع text هستن به جز فیلد code که از نوع number هست و فیلد code کلید اصلی بانکمم هست
خیلی ممنون میشه اگر کسی راه حلی بهم پیشنهاد کنه چون واقعا کارم گیره و هفته آینده باید این پروژه رو تحویل بدم



فکر میکنم مشکل عملگر + باشه که استفاده کردید ! چون فیلد Code شما عددی هستش وقتی از + استفاده میکنید میخواد String شما را با اون عدد جمع کنه !

اینجوری یه تست کنید :
cmd = New System.Data.OleDb.OleDbCommand("update kala set code='" & txteditcod.Text & "',name='" & txteditnam.Text & "',price='" & txteditprc.Text & "',image='" & txteditaks.Text & "' where code=@code", con)


در ضمن Connection String تون هم مشکل داره:
provider=micros oft.jet
provider=microsoft.jet

فرید نجفلو
پنج شنبه 27 بهمن 1390, 00:35 صبح
شما این تیکه رو حذف و امتحان کنید:

code='" + txteditcod.Text + "',

فرید نجفلو
پنج شنبه 27 بهمن 1390, 00:40 صبح
فکر میکنم مشکل عملگر + باشه که استفاده کردید ! چون فیلد Code شما عددی هستش وقتی از + استفاده میکنید میخواد String شما را با اون عدد جمع کنه !

اینجوری یه تست کنید :
cmd = New System.Data.OleDb.OleDbCommand("update kala set code='" & txteditcod.Text & "',name='" & txteditnam.Text & "',price='" & txteditprc.Text & "',image='" & txteditaks.Text & "' where code=@code", con)


احتمال شما کمه
احتمال زیاد ایشون چون داخل دستور Update کلید اصلی رو هم set می کنن خطا میگیره
و یا اینکه کلید اصلی از نوع عددی هست و دارن یه رشته می فرستن (با تک نقل قول)
در هر دو صورت نیازی به set ;vnk کلید اصلی نیست

khashaya
پنج شنبه 27 بهمن 1390, 01:09 صبح
دوستان اول مرسی که جواب دادید
اما هر دو تا کاری که گفتید رو انجام دادم ولی بازم به جواب نرسیدم :ناراحت:
هم به جای + از عملگر & استفاده کردم هم code رو حذف کردن از قسمت set ولی بازم فایده نداشت
بازهم این پیغام رو میده Syntax error in UPDATE statement.
دیگه عقلم به جایی نمیرسه
یک نکته دیگه که هست بانکم یک جدول دیگه هم داره که تو اون جدول فیلد code وجود داره و کلید هم هست
اما من ارتباطی بین این دو تا جدول برقرار نکردم کلید خارجی تعریف نکردم براشون
ممکن ایراد از اون باشه؟

Alirezanet
پنج شنبه 27 بهمن 1390, 01:28 صبح
دوستان اول مرسی که جواب دادید
اما هر دو تا کاری که گفتید رو انجام دادم ولی بازم به جواب نرسیدم :ناراحت:
هم به جای + از عملگر & استفاده کردم هم code رو حذف کردن از قسمت set ولی بازم فایده نداشت
بازهم این پیغام رو میده Syntax error in UPDATE statement.
دیگه عقلم به جایی نمیرسه
یک نکته دیگه که هست بانکم یک جدول دیگه هم داره که تو اون جدول فیلد code وجود داره و کلید هم هست
اما من ارتباطی بین این دو تا جدول برقرار نکردم کلید خارجی تعریف نکردم براشون
ممکن ایراد از اون باشه؟

نه ربطی به اون نداره !
1بار query تون رو توی خود Access اجرا کنید ببینید مشکل نداره !
بعد من الان دقت میکردم دیدم شما 4 پارامتر دارید میفرستید ولی فقط از Code استفاده میکنید ! یا مقدارتون رو با پارامترها Set کنید یا توی Command !

Hybrid
پنج شنبه 27 بهمن 1390, 01:33 صبح
سلام کدتون رو به شکل زیر تغییر بدین ببین درست میشه :


Dim con As System.Data.OleDb.OleDbConnection
Dim cmd As System.Data.OleDb.OleDbCommand
con = New System.Data.OleDb.OleDbConnection("provider=micros oft.jet.oledb.4.0;data source=D:\poroje payani\1\web froshgah\logindb.mdb")
con.Open()
cmd = New System.Data.OleDb.OleDbCommand("update kala set name=@name,price=@price,image=@image where code=@code", con)

cmd.Parameters.AddWithValue("@name", txteditnam.Text)
cmd.Parameters.AddWithValue("@price", txteditprc.Text)
cmd.Parameters.AddWithValue("@image", txteditaks.Text)
cmd.Parameters.AddWithValue("@code", txteditcod.Text)

cmd.ExecuteNonQuery()
con.Close()

مرتضی تقدمی
پنج شنبه 27 بهمن 1390, 01:37 صبح
سلام
اینو تست کن:



Dim con As System.Data.OleDb.OleDbConnection
Dim cmd As System.Data.OleDb.OleDbCommand
con = New System.Data.OleDb.OleDbConnection("provider=micros oft.jet.oledb.4.0;data source=D:\poroje payani\1\web froshgah\logindb.mdb")
con.Open()
cmd = New System.Data.OleDb.OleDbCommand("update kala set name=@name ,price=@price ,image=@image where code=@code", con)
cmd.Parameters.AddWithValue("@name", txteditnam.Text)
cmd.Parameters.AddWithValue("@code", txteditcod.Text)
cmd.Parameters.AddWithValue("@price", txteditprc.Text)
cmd.Parameters.AddWithValue("@image", txteditaks.Text)

cmd.ExecuteNonQuery()
con.Close()


شما دارید فیلد کد رو با شرط برابری فیلد کد با یک مقداری, با همون مقدار آپدیت می کنید. پس لازم نیست که فیلد کد آپدیت شه. البته این خطا نیست.

موفق باشید

khashaya
جمعه 28 بهمن 1390, 16:20 عصر
من یک پروژه دیگه ایجاد کردم با یک بانک جدید
تو اون دقیقا همون کدی رو که در پست اول نوشتم قرار دادم و جواب داد
واقعا دیگه نمی فهمم چرا اونجا جواب میده ولی تو پروژه اصلی نه!!!!!

Alirezanet
جمعه 28 بهمن 1390, 18:08 عصر
من یک پروژه دیگه ایجاد کردم با یک بانک جدید
بانک رو عوض نکنید ! ببینید مشکل داره !

kiarashk
جمعه 28 بهمن 1390, 18:45 عصر
براي من تقريبا يه اتفاق مشابهي افتاد كه با از نو نوشتن برنامه حل شد نمي دونم چرا ولي فكر مي كنم بعضي وقتا اين مشكل از خود ويژوال استديو ايجاد مي شه تا حالا دو با اين مشكل افتاده كه پروژه رو از نو ايجاد كردم حل شد ولي هيچ دليل قانع كننده اي پيدا نكردم البته پروژه من كاملا فرق داشت ولي دقيقا همين ارور رو مي داد

khashaya
جمعه 28 بهمن 1390, 20:28 عصر
بانک رو عوض نکنید ! ببینید مشکل داره !
اینکارو کردم دوباره همون ارور رو داد
به نظرتون مشکل از بانکه؟ چطور میشه مطمئن شد؟

khashaya
جمعه 28 بهمن 1390, 20:30 عصر
براي من تقريبا يه اتفاق مشابهي افتاد كه با از نو نوشتن برنامه حل شد نمي دونم چرا ولي فكر مي كنم بعضي وقتا اين مشكل از خود ويژوال استديو ايجاد مي شه تا حالا دو با اين مشكل افتاده كه پروژه رو از نو ايجاد كردم حل شد ولي هيچ دليل قانع كننده اي پيدا نكردم البته پروژه من كاملا فرق داشت ولي دقيقا همين ارور رو مي داد

یعنی کل پروژه رو از نو بنویسم یا فقط این تیکه که ایراد داره؟
منم فکر می کنم مشکل از ویژوال باشه به چند نفر که نشون دادم همه تعجب می کنن میگن کد درسته و باید کار کنه
حتی تغییراتی که دوستان گفتن هم انجام دادم ولی بازم نشد

M.KH-SH
جمعه 28 بهمن 1390, 20:41 عصر
از این لینک میتونین کمک بگیرین
http://barnamenevis.org/showthread.php?321150-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA-%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D9%87-%D8%A8%D8%A7%D9%86%DA%A9-%D9%88-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%DA%A9%D9%88%D8%AA%D8%A7%D9%87-%D8%A8%D9%87-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C-%D8%AF%D9%81%D8%AA%D8%B1-%D8%AA%D9%84%D9%81%D9%86-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1&p=1408728#post1408728

kiarashk
جمعه 28 بهمن 1390, 21:11 عصر
یعنی کل پروژه رو از نو بنویسم یا فقط این تیکه که ایراد داره؟
منم فکر می کنم مشکل از ویژوال باشه به چند نفر که نشون دادم همه تعجب می کنن میگن کد درسته و باید کار کنه
حتی تغییراتی که دوستان گفتن هم انجام دادم ولی بازم نشد

بله من new project ايجاد كردم و فقط كد ها رو كپي كردم البته ديدم كه مشابه اين اتفاق براي كامپايلر هاي ديگه هم افتاده

Alirezanet
دوشنبه 01 اسفند 1390, 01:49 صبح
اینکارو کردم دوباره همون ارور رو داد
به نظرتون مشکل از بانکه؟ چطور میشه مطمئن شد؟

خوب اگه شما توی پروژه جدیدتون برای اتصال به DB همین اررور رو میبینید احتمالا مشکل از دیتابیس هستش ! احتمال داره اشتباهی توی طراحیش کرده باشید . مثلا شاید کلید اصلیتون AutoNumber باشه و توی جدیده نباشه! البته این مثال بود موارد دیگه رو هم چک کنید

khashaya
سه شنبه 09 اسفند 1390, 14:44 عصر
دوستان ممنون از همه من مشکلم حل شد
کد درست رو گفتم بیام بذارم که اگه در آینده کسی به مشکل بر خورد بتونه حل کنه
ظاهرا مشکل این بود که اسم یکی از فیلدهای جدول رو کلمه کلیدی در نظر می گرفت ( احتمالا image ) که با استفاده از کلوشه مشکل حل شد
Dim con As System.Data.OleDb.OleDbConnection
Dim cmd As System.Data.OleDb.OleDbCommand
Dim sql As String
con = New System.Data.OleDb.OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=D:\poroje payani\1\web froshgah\logindb.mdb")
con.Open()

sql = "update kala set [name]='" + txteditnam.Text + "',[price]='" + txteditprc.Text + "',[image]='" + txteditaks.Text + "'where [code]=@code"
cmd = New System.Data.OleDb.OleDbCommand(sql, con)
cmd.Parameters.AddWithValue("@code", Convert.ToInt32(txteditcod.Text)
cmd.ExecuteNonQuery()
con.Close()