PDA

View Full Version : سوال: ذخیره شماره ردیف در دیتابیس



shahramap
جمعه 01 شهریور 1392, 02:07 صبح
با سلام من یه فیلد تو دیتابیسم میخوام که شماره ردیف رو بصورت به صورت خودکار و هوشمند ذخیره کنه.مثلا اگر ردیف 1 تا 4 توی بانکم باشه وقتی ردیف 3 رو حذف کردم ترتیب ردیفها بهم نخوره و خودش شماره ردیفها رو بصورت خودکاراصلاح کنه؟؟؟چه راه حلی هست؟؟

mousa1992
جمعه 01 شهریور 1392, 02:22 صبح
بعید میدونم sqlserver چنین امکانی داشته باشه
حالا برا چی میخوای ؟ قطعا راه های بهتری هس - شما که نمیخوای رکورد های تو دیتابیس رو نشون کاربر بدی
چیزی که شما بگی به کاربر نمایش داده میشه - میتونی موقع واکشی رکورد ها خودت ی فیلد اضافه کنی که شماره بزنه صرفا برا نمایش

shahramap
جمعه 01 شهریور 1392, 03:16 صبح
جدول من یه id,name,tarikh.count داره من حذف رکورد رو براساس id گذاشتم همون id که توی دیتابیس هست رو نشونش میدم id رو انتخاب میکنه رکورد رو حذف میکنه...................که id رو identifiyer رو true کردم در دیتابیس.حالا مثلا وقتی رکوردی رو از وسط جدول حذف میکنه ترتیب id ها بهم میخوره..........چه میشه کرد؟؟

m_ali_gho
جمعه 01 شهریور 1392, 04:00 صبح
خوب بهم بخوره!!! مشکلش چیه؟ فکر نکنم بشه فیلد identity رو مقدار داد. تا بحال امتحان نکردم. میشه یکم بیشتر در مورد موضوع توضیح بدین؟

salargham
جمعه 01 شهریور 1392, 11:42 صبح
شما میتونی یه کانتر بزاری که هنگام حذف سطر مورد نظر ،از اون به بعد فیلد شماره ردیف رو با مقدار کانتر اصلاح کنی.

roolinjax
جمعه 01 شهریور 1392, 12:19 عصر
سلام اصلا نیازی به این کارا نیست
فیلد آی دی شما نباید توی دید کاربر باشه
شما موقع نمایش یه فیلد دستی به اسم ردیف بذار و موقع حذف از دیتابیس بر اساس همون آی دی حذف کن که مقدار یکتا داره و کاربر نمی بینه
مگه حذف رکورد با انتخاب اون توی دیتاگرید اتفاق نمیفته ؟

shahramap
جمعه 01 شهریور 1392, 19:55 عصر
چطوری میشه موقع نمایش یه فیلد دستی به اسم ردیف بذارم و موقع حذف از دیتابیس بر اساس همون آی دی حذف کنم؟؟؟
((((((((مگه حذف رکورد با انتخاب اون توی دیتاگرید اتفاق نمیفته ؟)))))))))))))) نه اگه کدش رو بذارین ممنون میشم من با ویزارد کار نکردم واسه بایند دیتاگریدم.

m_ali_gho
جمعه 01 شهریور 1392, 20:47 عصر
شما پنج تا ستون برای گرید ویو درست کن : ردیف و نام و تاریخ و count و id
id رو مخفی کن. زمان حذف هم از محتویات فیلد id استفاده کن.
ردیف رو هم میتونی این کارو براش بکنی:
dataGridView1.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;
این کد رو تو رویداد CellFormatting گرید ویو قرار بده

behnam-soft
جمعه 01 شهریور 1392, 21:49 عصر
این مشکل منم هست.من متوجه راه حلی که دادید نشدم.فرض کنید جدول من مقدار id که داره به این ترتیبه :
101
102
103
104
105
خب حالا طرف میاد اطلاعات مربوط به id 103 رو پاک می کنه، خب منطقیش اینه که با این وضعیت، ما حداکثر تا 104 داشته باشیم درسته ؟ راه حلشم اینه که برنامه از اون آی دی که پاک شده به بعد رو 1 شماره از همه id ها کم کنه، اما نمیدونم کدش رو چطوری باید نوشت.دوستان راهنمایی کنن ممنون میشم.

FastCode
جمعه 01 شهریور 1392, 22:05 عصر
یک trigger روی insert بنویسید که مقدار رو حساب کنه و اون ستون رو update کنه.
روش نوشتن trigger رو هم جست و جو کنید.

mousa1992
شنبه 02 شهریور 1392, 01:10 صبح
شما پنج تا ستون برای گرید ویو درست کن : ردیف و نام و تاریخ و count و id
id رو مخفی کن. زمان حذف هم از محتویات فیلد id استفاده کن.
ردیف رو هم میتونی این کارو براش بکنی:
dataGridView1.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;
این کد رو تو رویداد CellFormatting گرید ویو قرار بده

از همه راه حل های ارائه شده بهتر بود - تشکر نداره ؟؟!

amir200h
شنبه 02 شهریور 1392, 01:52 صبح
البته ابن کار زمانی که شما نوع id رو identity گرفتی اصلا امکان پذیر نیست چون امکان ویرایش نمیده.
البته طوری که دوستان گفتن این چیزی که شما میخواین اصولا کار درستی نیست اولا تو یه برنامه ی حرفه ای هیچ چیزی از دیتابیس نباید حذف بشه. از من به عنوان یه مبتدی به شما نصبحت هیچ وقت برنامه رو طوری ایجاد نکنین که رکوردی پاک بشه. دوما حالا که میخوای این کارو پیاده کنی نباید identity رو فعال کنی. سوما شما اول باید بیای رکورد مورد نظر رو پاک کنی. بعد یه select بزنی و کل اطلاعات رو بریزی داخل یه دیتاتیبل و بعد بیا داخل یه حلقه for کد زیرو بزنی
for(int i = 0 ; i < dt.rows.count;i++)
{
dt.rows[i]["id']=i+1;
}
بعد با یه حلقه دیگه کل dt رو بریز داخل بانک
امیدوارم منظورمو دست رسونده باشم

mousa1992
شنبه 02 شهریور 1392, 02:24 صبح
هیچ وقت برنامه رو طوری ایجاد نکنین که رکوردی پاک بشه
فکر جالبی بود مرسی
اما چیزی که دوستمون میخوان اینه که ی شماره ردیف به ترتیب داشته باشن بهترین راه همینه که تو گرید شماره گذاری انجام بدن و اصلا جالب نیست با هر حذف اطلاعات دیتابیس اپدیت بشه ( همه رکوردهای مابعد اون رکورد حذف شده اپدیت بشه )

amir200h
شنبه 02 شهریور 1392, 02:30 صبح
فکر جالبی بود مرسی
اما چیزی که دوستمون میخوان اینه که ی شماره ردیف به ترتیب داشته باشن بهترین راه همینه که تو گرید شماره گذاری انجام بدن و اصلا جالب نیست با هر حذف اطلاعات دیتابیس اپدیت بشه ( همه رکوردهای مابعد اون رکورد حذف شده اپدیت بشه )

بله مرسی از نکته سنجیتون. ولی بهتره مبنارو بر این بزاریم که امکان داره یک کوئری خاص اجرا بشه و چندتا رکورد رو حذف کنه اینجوری ی کوجولو به مشکل میخوره