PDA

View Full Version : Ralation table Update



spanishtrain
یک شنبه 10 تیر 1386, 09:53 صبح
http://z15.zupload.com/file.php?filepath=49153
ااین لینک دانلود عکس فرمم برای متوجه شدن سوال من ببینیدش
آقا من یه همچین فرمی دارم همش با wizard کار کردم وقتی با نویگیتور بالا اسم دانشجو رو تغییر میدم درgrid لیست درسایی که دانشجو انتخاب واحد کرده با نام استاد نمایش داده می شه تا اینجا مشکلی نیست ولی وقتی می خوام Grid رو edit کنم تغییرات ذخیره نمی شه و نمی دونم چطوری با Add , Remove درس دانشجویی رو اضافه یا حذف کنم در ضمن پشت grid یه جدول ارتباطی که فقط کد دانشجو و کددرس و کد استادو و یه PK داره تو بانک... من با تغییر config اون تو dataset designer این grid رو ایجاد کردم

آقا هرکی میدونه کمک کنه

rezaei manesh
یک شنبه 10 تیر 1386, 11:11 صبح
شما می تونی داده های مورد نظرت رو به جدول مربوطه در دیتاست اضافه کنی این طوری اتوماتیک داده ها تو گراید هم نمایش داده می شود و...
برای مثال شما می تونید از روش زیر برای اضافه کردن استفاده کنید توجه کنید که از همان دیتا ست و جدولی استفاده کنید که اون رو دارین نمایش می دین و ...


Dim Drow1(0) As DataRow
Dim adp As New SqlDataAdapter 'or your adaptor in your's form
With yourDataset
Drow(0) = .Tables(strTableName).NewRow
Drow(0)("Tel") = Me.StrTel
Drow(0)("DEGREE") = Me.DecDEGREE
'...
.Tables("YourDataTableName").Rows.Add(Drow(0))
adp.Update(.Tables("YourDataTableName"))
.Tables("YourDataTableName").AcceptChanges()
End With

spanishtrain
یک شنبه 10 تیر 1386, 11:42 صبح
آقا دستت درد نکنه از اینکه جواب میدی
الان وقتی Save رو نویگیتورو میزنم اطلاعات دانشجو save ولی تغییرات مربوط به درسای دانشجو save نمیشه می خوام Save برای دوتا table adapter مشترک باشه ولی برای اضافه کردن دانشجو یا حذف دانشجو +و* رو نویگیتورو بزنم وبرای اضافه کردن درس به دانشجو AddوRemove که خودم رو فرم گذاشتم

ghafoori
یک شنبه 10 تیر 1386, 12:24 عصر
احتمالا طراح ویژوال استدیو کد مربوط به سیو جدول دومی را در رویداد دکمه سیو قرار نداده شما دستی این کد را وارد کنید

spanishtrain
یک شنبه 10 تیر 1386, 13:50 عصر
احتمالا طراح ویژوال استدیو کد مربوط به سیو جدول دومی را در رویداد دکمه سیو قرار نداده شما دستی این کد را وارد کنید

آقا یه مشکل جدید برام پیش اومد من فرم اولی رو MDIchild یه فرم دیگه کردم حالا وقتی این فرمو می بندم ولی از برنامه خارج نمی شم(یعنی فرم Parent باز)و دوباره فرمو باز می کنم اطلاعاتو نشون میده ولی وقتی فرم parent رو میبندم (کل برنامه را End میکنم) دوباره که اجرا میکنم اطلاعات را نشون نمیده در واقع اطلاعات تو جدول بانک ذخیره نمی شه فقط تو dataset ذخیره میشه من فکر می کنم با متد acceptchange اطلاعات باید در بانک ذخیره شه
ولی ظاهرا نمی شه
باز هم از همکاریتون ممنونم

rezaei manesh
یک شنبه 10 تیر 1386, 14:29 عصر
شما باید آداپتور رو هم آپدیت کنی و...



dset.Tables("YourDataTableName").AcceptChanges()
adp.Update(dset.Tables("YourDataTableName"))

spanishtrain
دوشنبه 11 تیر 1386, 08:23 صبح
آقا یه مسئله دیگه این که وقتی با ویزارد کار میشه TableAdaper هایی که Qury اونا از تو configur تغییر کرده گزینه Update رو نداره اگه یه Query Update به tableAdapter اضافه کنم اونوقت به صورت پارامتری می شه TableAdapter رو update کرد در این حالت دیگه ارتباط مستقیم با grid ندارم
در ضمن من مجبورم table adapter , config رو تغییر بدم چون Table تو بانک یهPK داره که هیچ یدونه کد دانشجو داره یدونه هم کد درس که با این کار تعیین میشه فلان کددانشجو فلان کد درسو انتخاب کرده ولی برای اینکه من تو grid نام درس هم بیاد مجبور شدم از تو config کوئری tableadapter رو تغییر بدم

در ضمن خواهش می کنم غیر از آقای رضایی افراد دیگر نیز همفکری کنن فقط قبلش عکس فرمو تو لینک پست اول ببینند تا موضوع دستشون بیاد

rezaei manesh
دوشنبه 11 تیر 1386, 09:27 صبح
همیشه اگه تو کانفیک تغییر بدی update رو از دست نمی دی اگه از جوین با یک جدول دیگه استفاده کنی ان طوری هست و..
فکر کنم این طوری بشه شما جای جوین کردن بیا برای هر کد یک سلکت بنویس که شرط اون آی دی رکورد جاری هست و...
مثل :


select fld1 ,fldt2=(select fld2 from table2 where id=table1.id) from table1

یه همچین چیزی بنویس البته اگه داده ات خیلی زیاد نیستند
وگرنه باید روش رو عوض کنی و نتیجه کویری رو نشون بده و برای ثبت داده ها فکر دیگری انجام بدی یعنی همه کارها رو با کد انجام بدی و...

spanishtrain
سه شنبه 12 تیر 1386, 09:41 صبح
بازم جواب نداد دستور تو execute query خود تیبل آداپتر جواب میده ولی تو دیتا سورس فیلدای کوئری نمیآد عصابم خورد شد از گوئری ذخیره شده استفاده کنم بهتر نیست UpdateQuery تو MS Access

rezaei manesh
سه شنبه 12 تیر 1386, 09:51 صبح
سلام
اونجا بیاد تو دیتا سورس گراید هم باید بیاد
شما کویری رو کپی کن و بعد جدول رو تو دیتا ستت پاک کن و دوباره بساز و اون کویری رو اونجا کپی کنی بعد اینو رو دوباره به گراید وصل کن
مطمین شو که فیلد ها ی کویری رو تو جدولت داری و اونا رو تو گراید هم می بینی بعد اجرا کن
اگه هم بازم مشکل داشتی این فرمت رو برام بفرست تا واسط درست کنم
موفق باشی

spanishtrain
یک شنبه 17 تیر 1386, 08:06 صبح
آقا من بی خیال ویزارد شدم بجای table adapter با کد یه data adapter ایجاد کردم که dataset جدیدی که تعریف کردم پر میکنه البته datatable هم مشخص کردم ولی الان datagrid به data binding source یی وصل که به دیتا ست وصل الان datagrid مشخصات datatable رو نشون میده ولی دیتا داخل جدولو نشون نمیده ایرادش اینه که باید یه datarow تعریف کنم ولی نمیدونم چطوری
ممنون می شم طریقه پر کردن دیتاست یا دیتا تیبلو با datarow بگی

rezaei manesh
یک شنبه 17 تیر 1386, 08:21 صبح
سلام


' NewRow to create a DataRow.
Dim row As DataRow
row = table.NewRow()

' Then add the new row to the collection.
row("fName") = "hamed"
row("lName") = "Rezaei"
table.Rows.Add(row)

DataGrid1.DataSource=table


شما یک ROW بدین شکل از نوع رکوردهای جدول دیتاستت درست کن و ستون هاش رو پر کن و به دیتاستت اضافه کن به همین شکل هم ویرایش کن

Behnama
دوشنبه 18 تیر 1386, 17:22 عصر
با سلام . این کد رو ببینید :

Dim Command As New OleDbCommand()
With Command
.CommandText = "Update Tariff SET " & _
"Base='" & TextBox2.Text & "' " & _
"Story='" & TextBox1.Text & "' " & _
"Kind='" & ComboBox1.Text & "' " & _
"WHERE Story='" & TextBox1.Text & "' AND " & _
"Kind='" & ComboBox1.Text & "'"
.CommandType = CommandType.Text
.Connection = Connection1
End With
Connection1.Open()
Adapter1.UpdateCommand = Command
Adapter1.UpdateCommand.ExecuteNonQuery()
Connection1.Close()
من وقتی تغییراتی رو در دیتاگرید اعمال می کنم ، تغییرات با update در دیتابیس من ذخیره می شن . اما وقتی مثلا می خوام از textbox این کار رو بکنم ، باید به command متوسل بشم و خیلی وقتا هم مثل همین کد باز موفق نمی شم . حتی از commandbuilder هم استفاده کردم که نشده . می خوام بدونم مشکل چیه ؟ چرا گاهی commandbuilder کار نمی کنه ؟ آیا جدول باید primaryKey داشته باشه یا مشکل دیگری داره ؟