PDA

View Full Version : مشکل در update کردن جداول



miassus10
دوشنبه 13 شهریور 1385, 00:00 صبح
من در هنگام update شدن ردیفهای جداول با این مشکل روبرو می شم.چرا؟
در ضمن da معرف Dataadapter و ds معرف dataset ام است/

ghafoori
دوشنبه 13 شهریور 1385, 08:36 صبح
دوست عزیز اگر همون لینک داخل خطا را می زدی ویژوال استدیو خطا را بهت می گفت این خطا طبق راهنمایی msdn وقتی روی میدهد که شما در جدولتون فیلد کلید نداشته باشید یا از دستور join استفاده کرده باشید من قبلا به این مشکل بر خورده بودم با تعریف کلید حل شد

zarrin_306
دوشنبه 13 شهریور 1385, 10:58 صبح
ابتدا به سراغ sqlserver برو
یک جدول مثل زیر باید داشته باشی


CREATE TABLE ST_SE
(
ST_ID varchar(5) PRIMARY KEY,
ST_NAME varchar(20) NOT NULL,
ST_FNAME varchar(20) NOT NULL
);

SELECT * FROM ST_SE

در این صورت نباید با مشکلی روبرو بشی
والا پروژه رو در اینجا قرار بده تا مشکل بر طرف بشه
موفق باشید

miassus10
دوشنبه 13 شهریور 1385, 11:54 صبح
البته من بانکم اکسس است.
در ضمن جای دستور da.acceptchanges و da.update را با هم عوض کردم، دیگه error نداد.
ولی الان مشکل اینه که dataset به روز میشه ولی بانک اطلاعاتم update نمیشه یعنی وقتی از برنامه میام بیرون و دوباره میرم توش میبینم که بانک تغییر نکرده!!!!!!!!!
--------------------
خواهش میکنم کمکم کنید!

zarrin_306
دوشنبه 13 شهریور 1385, 14:04 عصر
بله منم با اکسس چنیین مشکلی داشتم
ولی درستش کردم و کدش رو پیداکردم
حال در یادداشتهام میگردم و راهش رو برات قرار میدم

miassus10
سه شنبه 14 شهریور 1385, 15:25 عصر
آقای زرین راه مشکل منو پیدا نکردید؟

zarrin_306
سه شنبه 14 شهریور 1385, 23:07 عصر
متد update
به خاطر داشته باشید که dataset چیزی در باره منبع داده ای که در خود دارد نمیداند و تغییراتی که شما در سطرهای dataset ایجاد میکنید به صورت خودکار به منبع داده برنمیگردد
بلکه برای انجام این کار باید از متد update آبجکت dataadapterاستفاده کنید
این متد برای هر سطر در dataset که تغییر کرده است بر حسب نوع تغییر deletecommand,insertcommand یا updatecommand آبجکت dataadapter را فراخوانی میکند
system.data.common.dbdataadapter که در واقع کلاس dataadapter ی است که از آن data provider های پایگاه داده رابطهای dataadapter های خود را به ارث میبرد
چند نسخه از متد update را دارند
نه sqldataadapter و نه oledbdataadapter نسخه های دیگری را اضافه نکرده است

کد زیر برای فراخوانی متد Update اضافه کنید

Me.Dataadapter1.Update(Me.Dataset11.Categories)

متد های Update آبجکت DbDataAdapter

Update (dataset)1 منبع داده را از یک datatable بنام table در dataset مشخص شده به روز میکند

update(datarows)2 منبع داده را از آزایه مشخص شده از datarows بهنهگام میکند

update (datatable)3 منبع داده را از datatable مشخص شده به روز میکند

update (datarows,datatablemaping)4 منبع داده را از آرایه مشخص شده از dataset وبا استفاده ازdatatablemaping مشخص شده بهنگام میکند

update(datset,sourcetable)5 منبع داده را از datatable مشخص شده در پارامتر source tableدر dataset مشخص شده بهنگام میکند

اما یادم جایی یک کدی داشتم خیلی تمیز بود که متاسفانه ندیدمش اگر احیاناً دیدمش حتماً برات میفرستمش
امید وارم این بدردت بخوره
موفق باشید

miassus10
چهارشنبه 15 شهریور 1385, 06:40 صبح
از توضیحاتتون ممنون
البته من از آبجکت های dataadapter1 و غیره روی فرمم قرار ندادم و همه اینها را با کد تعریف کردم
من همونطور که توی اون عکس اول هم نشون دادم dataadapter رو با متد update آپدیت می کنم، یعنی در زمان اجرای برنامه دیتاست کاملا آپدیت میشه ولی بعد از خارج شدن از برنامه همه چی یادش میره!
اینم کد آپدیت من:
(("da.Update(ds.Tables("table1
آخه مشکل من از کجاست؟

zarrin_306
چهارشنبه 15 شهریور 1385, 10:26 صبح
البته که کامل انجام میشه اما در جدول ذخیره نمیشه
درسته

miassus10
چهارشنبه 15 شهریور 1385, 11:56 صبح
آره همینطوره، تو جدول ذخیره نمیشه!
حالا میشه بگید چی کار باید بکنم، دو هفته منو به خودش مشغول کرده

hamishegi
چهارشنبه 15 شهریور 1385, 16:01 عصر
شما اگه da و ds رو به صورت گرافیکی(از طریق toolbx) به فرم اضافه میکردی کدهای insercommand , deletecommand , updatecommand و selectcommand خود بخود تولید میشد. اما شما da و ds رو از طریق کد اضافه کردی ولی در رابطه با دستورات فوق هیچ کدی ننوشتی. درسته؟ error ی که فرستادی هم دقیقا همون رو میگه.
درست نمیگم؟

miassus10
چهارشنبه 15 شهریور 1385, 18:24 عصر
درسته من با کد da و ds را تعریف کردم،
من هردو را تعریف کردم، بعد da را با ds، پر کردم(fill) و بعد ردیف به ردیف تغییرات را اعمال کردم، بعد ds را با متد update با da به روز کردم اون error هم که تو عکس می بینید با اضافه کردن دستور ds.acceptchanges رفع کردم ولی تغییرات بعد از خروج از برنامه از بین رفت.

hamishegi
پنج شنبه 16 شهریور 1385, 10:09 صبح
1-acceptchanges فقط داده ها رو در حوزه ی dataset به روز رسانی میکنه نه db . یعنی اگه بعدش دستور getchanges رو اجرا کنی ،برنامه هیچ چیزی رو واسه update کردن پیدا نمیکنه.کمی عجیب به نظر میاد ولی چیزی که من دستگیرم شده همینه.
2- عرض کردم که! شما باید "دستورات" update , insert,... رو دستی وارد کنی. به عبارت دیگر وقتی برنامه
به "تابع" update شما رسید، نمیدونه چی رو باید update کنه. اینو شما باید قبلا براش تعریف کرده باشی( insercommand , deletecommand , updatecommand و selectcommand).
مثال زیر رو از برنامه ای گرفتم که کد ها رو بطور اتوماتیک ساخته. من بخشی رو که نیاز شماست میفرستم و بقیه رو برای اینکه گیجت نکنه پاک میکنم. بخشهای مختلف رو با یه خط خالی از هم جدا کردم. احتمالا مجبور میشی Me ها رو هم پاک کنی.همه چیز مقدمه است بجز دو بخش آخر. یعنی oledbupdatecommand1 و پارامتر هاش:


Me.da = New System.Data.OleDb.OleDbDataAdapter()
Me.OleDbSelectCommand1 = New System.Data.OleDb.OleDbCommand()
Me.OleDbInsertCommand1 = New System.Data.OleDb.OleDbCommand()
Me.OleDbUpdateCommand1 = New System.Data.OleDb.OleDbCommand()
Me.OleDbDeleteCommand1 = New System.Data.OleDb.OleDbCommand()
Me.OleDbConnection1 = New System.Data.OleDb.OleDbConnection()

Me.Ds1 = New gugu.ds()

Me.daPassport.DeleteCommand = Me.OleDbDeleteCommand1
Me.daPassport.InsertCommand = Me.OleDbInsertCommand1
Me.daPassport.SelectCommand = Me.OleDbSelectCommand1
Me.daPassport.UpdateCommand = Me.OleDbUpdateCommand1

Me.da.TableMappings.AddRange(New System.Data.Common.DataTableMapping() {New System.Data.Common.DataTableMapping("Table", "passport", New System.Data.Common.DataColumnMapping() {New System.Data.Common.DataColumnMapping("pass_type", "pass_type"), New System.Data.Common.DataColumnMapping("pass_no", "pass_no"), New System.Data.Common.DataColumnMapping("pass_issue", "pass_issue"), New System.Data.Common.DataColumnMapping("pass_expiry", "pass_expiry"), New System.Data.Common.DataColumnMapping("pass_renew", "pass_renew"), New System.Data.Common.DataColumnMapping("visa_type", "visa_type"), New System.Data.Common.DataColumnMapping("id", "id")})})


'OleDbUpdateCommand1
'
Me.OleDbUpdateCommand1.CommandText = "UPDATE passport SET id = ?, pass_expiry = ?, pass_issue = ?, pass_no = ?, pass_re" & _
"new = ?, pass_type = ?, visa_type = ? WHERE (id = ?) AND (pass_expiry = ? OR ? I" & _
"S NULL AND pass_expiry IS NULL) AND (pass_issue = ? OR ? IS NULL AND pass_issue " & _
"IS NULL) AND (pass_no = ? OR ? IS NULL AND pass_no IS NULL) AND (pass_renew = ?)" & _
" AND (pass_type = ? OR ? IS NULL AND pass_type IS NULL) AND (visa_type = ? OR ? " & _
"IS NULL AND visa_type IS NULL)"

Me.OleDbUpdateCommand1.Connection = Me.OleDbConnection1
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("id", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(10, Byte), CType(0, Byte), "id", System.Data.DataRowVersion.Current, Nothing))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("pass_expiry", System.Data.OleDb.OleDbType.DBDate, 0, "pass_expiry"))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("pass_issue", System.Data.OleDb.OleDbType.DBDate, 0, "pass_issue"))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("pass_no", System.Data.OleDb.OleDbType.VarWChar, 50, "pass_no"))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("pass_renew", System.Data.OleDb.OleDbType.Boolean, 2, "pass_renew"))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("pass_type", System.Data.OleDb.OleDbType.VarWChar, 50, "pass_type"))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("visa_type", System.Data.OleDb.OleDbType.VarWChar, 50, "visa_type"))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_id", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(10, Byte), CType(0, Byte), "id", System.Data.DataRowVersion.Original, Nothing))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_pass_expiry", System.Data.OleDb.OleDbType.DBDate, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "pass_expiry", System.Data.DataRowVersion.Original, Nothing))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_pass_expiry1", System.Data.OleDb.OleDbType.DBDate, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "pass_expiry", System.Data.DataRowVersion.Original, Nothing))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_pass_issue", System.Data.OleDb.OleDbType.DBDate, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "pass_issue", System.Data.DataRowVersion.Original, Nothing))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_pass_issue1", System.Data.OleDb.OleDbType.DBDate, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "pass_issue", System.Data.DataRowVersion.Original, Nothing))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_pass_no", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "pass_no", System.Data.DataRowVersion.Original, Nothing))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_pass_no1", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "pass_no", System.Data.DataRowVersion.Original, Nothing))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_pass_renew", System.Data.OleDb.OleDbType.Boolean, 2, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "pass_renew", System.Data.DataRowVersion.Original, Nothing))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_pass_type", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "pass_type", System.Data.DataRowVersion.Original, Nothing))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_pass_type1", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "pass_type", System.Data.DataRowVersion.Original, Nothing))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_visa_type", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "visa_type", System.Data.DataRowVersion.Original, Nothing))
Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_visa_type1", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "visa_type", System.Data.DataRowVersion.Original, Nothing))

miassus10
پنج شنبه 16 شهریور 1385, 14:47 عصر
سلام دوست عزیز خیلی ممنون از راهنمایی کاملت، من این تغییرات را تو برنامم اعمال کردم ولی ظاهرا نتونستم اونجور که باید این کارو انجام بدم و دوباره error داد، بهمین دلیل برنامم با کدهای جدید را قراردادم، خیلی ممنون میشم اگه بهش نگاه بیاندازید و بگویید مشکل کار من از کجاست.
با تشکر.

hamishegi
پنج شنبه 16 شهریور 1385, 22:08 عصر
حتما.
فقط تا 1-شنبه نمیتونم پای کامپیوتر خودم برم. یکی دوروزی صبر کنید.
عید مبارک

miassus10
جمعه 17 شهریور 1385, 08:06 صبح
خیلی ممنون، من منتظر می مونم، عید شما هم مبارک.

alilittle
جمعه 17 شهریور 1385, 13:08 عصر
سلام
اقا منم درگیر همین موضوعم.
البته مشکل من اینه که وقتی فیلده تاریخ دارم تو جدول به مشکل بر میخورم
اگه ممکنه یه نمونه کد با یه فایل اکسسی برای ما بزارین.
ممنونم

miassus10
یک شنبه 19 شهریور 1385, 21:03 عصر
چرا کسی به داد من نمیرسه؟

zarrin_306
یک شنبه 19 شهریور 1385, 22:21 عصر
اصلاً چرا از sql استفاده نمیکنی
خیال خودت رو راحت کن برادر من این همه رنج نکشی
--------------------
اگر ممکنه پ روژه رو با جدولaccess بزار اینجا شاید کسی یه فکری به حالش کرد

miassus10
دوشنبه 20 شهریور 1385, 05:31 صبح
پروژمو اون بالا گذاشتم، چند تا پست قبل