PDA

View Full Version : آپگرید کردن در Ado.net



ساران سافت
پنج شنبه 12 آذر 1383, 17:13 عصر
با سلام:
ببخشیدها ولی یک فرم با Data wizard درست کردم(به صورت یک سری تکست باکس)
و بعد جای یکی از باکس ها را با یک کامبو باکس عوض کردم و پراپرتی های ان را هم روی دیتا بیس ست کردم اما در زمان آپدیت کردن این پیغام خطا را می دهد!:

Update require a valid update command when passed datarow collection with modified rows
چه باید کرد؟

sh
پنج شنبه 12 آذر 1383, 19:55 عصر
قبل از هر چیز :

از صحت دستور SQL خود اطمینان حاصل نمائید

اگر دیتا بیس شما اکسس هست ببین جدول مورد نظر کلید اصلی دارد یا نه اگر نیست ایجاد کن و ارتباط رو دوباره برقرار کن درست میشود

در ضمن همیشه کد ها را در Try و Catch قرار بده تا تشخیص خطا راحتتر شود

ساران سافت
پنج شنبه 12 آذر 1383, 20:18 عصر
خیلی راحت از روی یک table بانک اکسس با استفاده از data form wizard ساخته ام و همانطور که گفتم نوع تکست باکسی را انتخاب کردم.
حال می خواهم جای یکی از تکست باکسها کامبو باکس بگذارم و کار بر در زمان add کردن رکورد فقط یکی از مقادیر کامبو را انتخاب کند و آن مقدار هم در بانک اطلاعاتی ذخیره شود.
دقیقا چه باید بکنم؟ :cry: :oops:

kochol
جمعه 13 آذر 1383, 20:20 عصر
سلام

من امروز یاد گرفتم که چگونه می تونم در دیتابیس ها را تغییر دهم و یا رکورد جدید اظافه کنم.

کد زیر را برای اظافه کردن لیستها به کمبوباکس استفاده کن
برای این کار یک کنترل به نام oc1 از نوع oledbcommand اظافه کن و خاصیت connection رو به oledbconnection1 ست کن و در قسمت commandtext با qurrybuilder کد sql را اظافه کن فقط اون فیلدی که می خواهی نمایش بدی و id رو یا هر فیلدی که primmeryKey رو به اون داده اید اظافه کن


Public Sub FillDataSet(ByVal dataSet As data.dataset1)
Dim reader2 As OleDb.OleDbDataReader
'Turn off constraint checking before the dataset is filled.
'This allows the adapters to fill the dataset without concern
'for dependencies between the tables.
dataSet.EnforceConstraints = False
Try
'Open the connection.
Me.OleDbConnection1.Open()
'Attempt to fill the dataset through the OleDbDataAdapter1.
Me.OleDbDataAdapter1.Fill(dataSet)
Catch fillException As System.Exception
'Add your error handling code here.
Throw fillException
Finally
'Turn constraint checking back on.
dataSet.EnforceConstraints = True
'Close the connection whether or not the exception was thrown.
reader2 = oc1.ExecuteReader
While reader2.Read
ComboBox1.Items.Add(reader2("name").ToString())
End While
reader2.Close()
Me.OleDbConnection1.Close()
End Try

البته بهتر است که شرطی بذاری که گزینه های تکراری رو حذف کنه (با دستورات sql )

تا یه تحقیق بکنم ببینم دیگه چی کار می شه کرد

اگه یک فرم رو از اول می ساختی فکر می کنم بهتر بود

البته شاید این کد به دردت نخوره ولی خوبه بدونی شاید یه روزی به دردت خورد ::نوشتن::

kochol
جمعه 13 آذر 1383, 20:39 عصر
سلام

یه راه خیلی آسون برای تو فهمیدم لازم به این همه کار نداره یه کلک برنامه نویسی

1. اون تکست باکستو مخفی کن و در روال کمبو باکس متن انتخاب شده تو کمبو باکس رو بنویس تو اون تکست باکس 2 دقیقه وقت نمی گیره

من که خودم وقتی این فکر به ذهنم رسید خیلی حال کردم امیدوارم به کارت بیاد

ساران سافت
شنبه 14 آذر 1383, 00:10 صبح
مرسی کوچول جونم
دستت درد نکنه :wink: :embr:

sh
شنبه 14 آذر 1383, 16:29 عصر
یه راه خیلی آسون برای تو فهمیدم

این راه درستش نیست

یه راهنمائی میکنم

شما یه Combobox دارین که هم اطلاعات درونیش رو از جائی میگیرد و هم میخواهد اطلاعات انتخاب شده را در جائی ذخیره کند. به دلیل اینکه در این ویزاردها نمی توان در یک لحظه یک کنترل را به دو دیتا سورس بایند کرد شما باید بصورت دستی یکی از مراحل (یا خواندن اطلاعات اویه که میخواد در کامبو باکس وارد شود یا نحوه ذخیره سازی) را با کد نویسی انجام بدی

برای پر کردن کامبوباکس راههای زیادی هست مثل استفاده از Datareader و ....

kochol
شنبه 14 آذر 1383, 18:01 عصر
این راه درستش نیست

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

خودش به من یه pm زد و از من تشکر کرد یعنی کارش حل شده :wise2:

ساران سافت
شنبه 14 آذر 1383, 19:28 عصر
کارم حل شد ولی دقیقا همان چیزی را می خواهم که آقای شهریار گفت اطلاعات کامبو از جدول دیگری گرفته می شود. و پس از انتخاب در جدول دیگری ریخته می شود. :oops:

در خواندنش مشکل ندارم. در نوشتنش مشکل دارم؟ :wink: :oops: :(

sh
شنبه 14 آذر 1383, 23:01 عصر
راه ساده ای هست

مثلا شما میتونین مستقیما برای درج یا آپ دیت اطلاعات در جدول یا از دستور SQL مناسب استفاده کنین یا اگر با ویزارد کار میکنین بر فرض اینکه نام جدول شما Person باشد :


DataSet11.Person.AddPersonRow(TextBox8.Text, TextBox13.Text,....

این یه راه ساده هست ولی بهترین راه آپ دیت جدول بوسیله Command هست

ساران سافت
یک شنبه 15 آذر 1383, 14:04 عصر
ولی بهترین راه آپ دیت جدول بوسیله Command هست
یعمی جوری؟ :oops:

sh
یک شنبه 15 آذر 1383, 17:57 عصر
مثل اینکه شما Visual Studio.NET رو که نصب میکنین MSDN April 2004 رو نصب نمیکنین !

کمی جستجو هم بد نیست

sh
پنج شنبه 19 آذر 1383, 16:07 عصر
این یه نمونه برنامه

البته با چند جور کد نویسی دیگه هم میشه نوشت