PDA

View Full Version : مشکل Autonumber



123sepehr
پنج شنبه 04 اسفند 1390, 13:16 عصر
من یه برنامه نوشتم با دیتا بیس َاکسس حلا میخوام ستون دیتا iD دردیتا گرید ویو خودکار عدد بگیره واگر یه ردیف هم پاک کردم ستونم عدد مشکل پیش نیاد لطفا کمک کنید

ma.rad
پنج شنبه 04 اسفند 1390, 13:57 عصر
خصوصیت identity specificatin فیلد id رو برابر yes کنید.

Hybrid
پنج شنبه 04 اسفند 1390, 14:10 عصر
خصوصیت identity specificatin فیلد id رو برابر yes کنید.

دوست عزیز بانکش اکسسه نه اس کیو ال در ضمن اگه Autonumber باشه هم وقتی که رکوردی رو حذف میکنه دیگه رکوردهای بعدی اون شماره رو ندارن.

منم همین مشکل رو دارم از دوستانی که قبلا این مشکل رو حل کردن خواهش میکنم راه حل این مسئله رو بگن.

ma.rad
پنج شنبه 04 اسفند 1390, 14:52 عصر
اگر اکسس هم هست که خیلی راحتتره فیلد رو از نوع auto number بزار
*********
شما با مفهوم AutoNumber درست آشنا نشدید وقتی به یک رکورد یه شمازه اختصاص داده می شه اون رو منحصر به فرد می کنه و یه کلید محسوب می شه ونمی شه دوباره با حذف یه شماره شماره ها مرتب بشن چون کلید یه رکورد مختص همون رکورده
راه حل :
شما یه ستون اضافه کنید به دیتاگریدتون و زمانی که اطلاعات بایند میشه تو گرید یه حلقه بزارید که به تعداد رکوردهای دیتاتیبل عدد بریزه تو ستون ردیف.

Hybrid
پنج شنبه 04 اسفند 1390, 14:58 عصر
دوست عزیز میدونم که اون فیلدی که از نوع Autonumber هست خودش میشه فیلد کلیدی چون واسه هر رکورد عددی منحصر به فرد تولید میکنه ولی فکر نمیکنم راه حل شما منطقی باشه چون فکرش رو بکنین ممکنه که مثلا 5000 (یا حتی بیشتر !) رکورد داشته باشیم اونوقت با دستور For یه کم وقت میبره ممکنه قابل چشم پوشی باشه ولی فکر نمیکنم از لحاظ منطقی درست باشه ، منم واسه این سوال پرسیدم گفتم شاید بشه داخل بانک اینکارو انجام داد و از دستور For دیگه استفاده نشه. باز هم ممنون از لطفتون.

ma.rad
پنج شنبه 04 اسفند 1390, 15:15 عصر
احتمالا شما تازه شروع به برنامه نویسی کردید
راحل حلی که گفتم بنظرم بهترین وسریع ترین راهه- شایدهم تنهاراه باشه
و برا همچین کاری اصلا زمان مطرح نیست

ATili.Nero
پنج شنبه 04 اسفند 1390, 15:57 عصر
یه راه دیگه هم هست من خودم از این روش استفاده می کنم
این روش دیگه Auto Number رو از بانکت انتخاب نمی کنی بلکه خودت با کد نویسی Auto Number رو درست می کنی
اول از همه اطلاعات رو از بانک توی یه دیتا گیرید به صورت Order By ID می ریزیم
خب اگه گرید ویو هیچی نباشه یعنی اولین داده است پس کد ما 1
اگه هم وجود داشت آخرین مقدار رو + 1 می کنیم و کد جدید به ما داده میشه

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


if (dataGridView2.Rows.Count.ToString() == "0")
{
textBox_code_car.Text = "1";

}
else
{
for (int Counter = 0; Counter < (dataGridView2.Rows.Count); Counter++)
{
if (dataGridView2.Rows[Counter].Cells["Code_Car"].Value != null)
{
if (dataGridView2.Rows[Counter].Cells["Code_Car"].Value.ToString().Length != 0)
{
textBox_code_car.Text = (int.Parse(dataGridView2.Rows[Counter].Cells["Code_Car"].Value.ToString()) + 1).ToString();
}
}
}
}

ma.rad
پنج شنبه 04 اسفند 1390, 16:55 عصر
این روش غیر معمول هست ومرتبه زمانی اون بیشتر از روش اوله
موفق باشید

sds1920
پنج شنبه 04 اسفند 1390, 18:00 عصر
شما اگه فقط میخوای توی دیتاگریدویو یک Autonumber داشته باشی باید یک فیلد به جدول در دیتاست برنامه اضافه کنی که این خاصیت رو داشته باشه.

DataTable1.Columns.Add("FieldName",typeof(int));
DataTable1.Columns["FieldName"].AutoNumber=true;

gerdioz
پنج شنبه 04 اسفند 1390, 18:07 عصر
سلام دوست عزیز شما تو بانک قصد دارید که ردیف به صورت ترتیبی و صعودی باشه که اتونامبر گزینه خوبیه حالا مسکل چیه؟
اینه که وقتی جدول خالی میشه رکورد جدید از انتهای رکورد حذف شده شروع میشه؟
خود تو برنامه خودتون Max(id) رو بگیرید بعلاوه 1 بکنید
اما آخرین مورد وقتش نشده به سمت sql برید اکسس چی داره بهش گیر دادید

Hybrid
پنج شنبه 04 اسفند 1390, 18:16 عصر
سلام دوست عزیز شما تو بانک قصد دارید که ردیف به صورت ترتیبی و صعودی باشه که اتونامبر گزینه خوبیه حالا مسکل چیه؟
اینه که وقتی جدول خالی میشه رکورد جدید از انتهای رکورد حذف شده شروع میشه؟
خود تو برنامه خودتون Max(id) رو بگیرید بعلاوه 1 بکنید
اما آخرین مورد وقتش نشده به سمت sql برید اکسس چی داره بهش گیر دادید

سلام ، اون در صورتیه که کل رکورد ها حذف بشن ولی اگه رکوردی بین دو رکورد حذف بشه اونوقت چی؟ با دستور Max که دیگه نمیشه.دوست عزیزه بالایی یک راه حل گفتن (استفاده از For ) ولی میگم شاید راه حل بهتری هم وجود داشته باشه.

gerdioz
پنج شنبه 04 اسفند 1390, 18:57 عصر
شما اگه رکورد کلید اصلی نباشه و به جایی رابطه نداشته باشه آره راه بهتری هست
نگاه کن مثلا شما ردیف 1 و 2 و 3 4 دارید حالا ردیف 2 حذف میشه شما علاوه برحذف باید آخرین رکورد رابجای رکورد 2 بیارید البته یه روشه
اما تو سیستم های امروزی روش حلقه خوبه حتی رکوردهای زیادم داشته باشی محسوس نیست و منروش دوست عزیزمون رو تائید میکنم

ATili.Nero
جمعه 05 اسفند 1390, 15:08 عصر
این روش غیر معمول هست ومرتبه زمانی اون بیشتر از روش اوله
موفق باشید

چرا؟؟؟
یه کم توضیح بدید

Hybrid
جمعه 05 اسفند 1390, 16:17 عصر
چرا؟؟؟
یه کم توضیح بدید

همین که این کد شما چند تا شرط داره سرعتش نسبت به کده دوستمون کمتره چون کد اون میاد بدون شرط سلول های یک ستون رو پر میکنه ولی کد شما اول چک میکنه بعد پر میکنه. ((البته به چشم نمیاد چون CPU ها قوین ))

موفق باشید./