PDA

View Full Version : سوال: بدست آوردن مقدار فيلدهاي از نوع AutoNumber



daneshmand1
یک شنبه 04 دی 1390, 08:38 صبح
سلام
من توي پايگاه داده يه جدول دارم كه اطلاعات اين جدول در دو فرم جداگانه از كاربر
گرفته مي شود. اين جدول يه فيلد به نام ID داره كه از نوع AutoNumber است. در مرحله اول ثبت اطلاعات مشكلي نيست يه رديف جديد توي جدول ايجاد ميشه و اطلاعات ثبت ميشه ولي براي فرم دوم چطور مي تونم ID همون رديف رو بدست بيارم و بگم كه اين اطلاعات بايد توي همون رديف قبلي ثبت شود؟

Hybrid
یک شنبه 04 دی 1390, 09:25 صبح
سلام دوست عزیز ، منظورت رو دقیقا متوجه نمیشم ...مگه شما اطلاعات رو به یک باره وارد نمیکنید؟؟؟ اگه شما میخوای در یک فرم اطلاعات نصف اطلاعات ثبت بشه و در فرم دیگه بقیه ی اطلاعات ثبت بشه احتمالا باید از UpdateCommand استفاده کنید..بیشتر توضیح بدین تا دوستان راهنمایی کنند.

موفق باشین.

m110_110
یک شنبه 04 دی 1390, 09:37 صبح
با سلام
منظورت رو كه دقيقا نفهميدم ولي فكر مي كنم مي خواهي ID ركوردي رو كه به صورت AutoNumber تازه اضافه شده رو بدست بياري و الباقي كار
براي اين كار در موقع درج ركوردت مي توني يك دستور به آخر اون اضافه كني تا ID‌ ركوردي كه به صورت AutoNumber اضافه شده رو بهت بده
به اين صورت:
insert into tb1(fileds) values (MyValue);Select SCOPE_IDENTITY() AS MyID

M.YasPro
یک شنبه 04 دی 1390, 09:42 صبح
سلام
کد زیر بعد از اجرا شدن یک دستور Insert مقدار فیلد autoNumber رو که در رکورد جدید استفاده شده ، بر میگردونه.
حالا شما میتونی این شماره رو دریافت کنی و به فرم دوم ببری و با این شماره رکورد هدف رو ویرایش کنی .


Insert Into bid
(fileds)
Values
(values)
Declare @ReferenceID int
Select @ReferenceID = @@IDENTITY

Return @ReferenceID


موفق باشید ./

daneshmand1
یک شنبه 04 دی 1390, 11:16 صبح
ببخشید میشه بیشتر راهنمایی کنید. این دستورها رو باید کجا بیارم؟ من دستور insert رو اینطوری نوشتم:

"(insert into tablename ([fname],[lname]) values(@fname,@lname"

دستور گرفتن مقدار ID رو باید توی دستور insert بالا بیارم یا یه دستور جدای دیگه بعد از اجرای متد ExecuteNonQuery که داده ها رو ثبت میکنه؟

M.YasPro
یک شنبه 04 دی 1390, 11:57 صبح
(insert into tablename ([fname],[lname]) values(@fname,@lname
Declare @ReferenceID int
Select @ReferenceID = @@IDENTITY

Return @ReferenceID

توی پروژتون هم یک پارامتر برای برگرداندن ایم مقدار درنظر بگیرید مثل این :

cmd.Parameters.Add("@ReferenceID", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
بعد

cmd.ExecuteNonQuery();
و در اخر برای دسترسی به مقدار برگردانده شده از :

int id = int.Parse(cmd.Parameters["@ReferenceID"].Value.ToString());
استفاده می کنید .

موفق باشید ./

daneshmand1
یک شنبه 04 دی 1390, 16:36 عصر
به متد cmd.ExecuteNonQuery(); كه ميرسه خطا ميده:
System.Data.OleDb.OleDbDataAdapter internal error: invalid parameter accessor: 11 BADBINDINFO.
دستور insert رو به همون صورتي كه گفتيد نوشتم ولي خطاي بالا داده ميشه. در ضمن پايگاه داده ي من Access هست.

M.YasPro
دوشنبه 05 دی 1390, 08:05 صبح
متاسفانه من روی دیتابیس sqlserver توضیح دادم نمیدونم روی access رو نظری ندارم .

Hybrid
دوشنبه 05 دی 1390, 09:40 صبح
سلام دوست عزیز ،

شما در روی فرمتون دیتا گرید ویو گذاشتین؟؟ یعنی وقتی که اطلاعات ثبت میشه دیتا گرید ویو نشونش میده؟؟

daneshmand1
دوشنبه 05 دی 1390, 10:38 صبح
نه ديتاگريد ندارم. توي فرم اول تعدادي TextBox دارم كه مي خوام وقتي كاربر دكمه مرحله بعد رو مي زنه اطلاعات توي جدول ثبت بشه و فرم دوم باز بشه و وقتي دكمه ثبت اطلاعات توي فرم دوم زده مي شود اطلاعات TextBox هاي فرم دوم در ادامه جدول ثبت شود، مشكلم اينجاست كه نمي تونم ID رديفي كه اطلاعات فرم اول توي اون ثبت شده رو بدست بيارم تا اطلاعات فرم دوم رو توي همون رديف ذخيره كنم؟

daneshmand1
دوشنبه 05 دی 1390, 19:52 عصر
دوستان خواهش ميكنم كمك كنيد پروژه من متوقف شده، نياز فوري دارم!