PDA

View Full Version : شماره ردیف در بانک SQL



alizanganeh
جمعه 23 دی 1390, 23:34 عصر
سلام

من توی بانک SQL به رکورد ها شماره ردیف دادم که بصورت auto number هستش
حالا وقتی کثلا رکورد 10 پاک میشه این بین فاصله میفته
یعنی میشه 8 - 9 - 11 - 12
شماره 10 اون وسط هیچ میشه
چطوری میتونم کاری کنم که خودش دوباره شماره ردیف ها رو مرتب کنه؟
ممنون

vbhamed
شنبه 24 دی 1390, 08:28 صبح
سلام

1 - يك فيلد به اسم مثلا row داشته باشيد كه بعد از هر آپديت شماره زني انجام بديد كه روش كم سرعت هست و البته اگر فقط روي ركوردهاي قابل ديد اين كار انجام بشه سرعتش هم خوبه

2 - اگر ركوردها رو تو كنترلي مثل ComponentOne vsFlexGrid نمايش بديد مي‌تونيد يك ستون اضافه كنيد و به صورت دستي شماره بزنيد و باز هم براي ركوردهاي قابل ديد، البته مزيتش نسبت به روش بالا اينكه كه نياز نيست اطلاعات درون خود بانك اطلاعاتي تغيير كنه

maktoom
شنبه 24 دی 1390, 12:13 عصر
سلام
همونطور که گفتید دو جور میشه شماره رو ایجاد کرد:
1)دستی: این روشیه که برای مواردی بکار میره که سابقه دست بردن توی دیتا بیس براتون مهم نیست.
2)مورد دوم اوتوماتیک کردن شماره گذاریه: این واسه مواردیه که یا باید رکورد ها اوتوماتیک از جایی گرفته و ایجاد بشن یا سابقه دست بردن توی پایگاه براتون مهمه. خوب تو این حالت معلومه که باید معلوم باشه کدوم رکورد حذف شده.
اول ایجاد پایگاه باید بینید کدومش رو مناسب با احتیاجات لازم دارید.
حالا چرا ینقدر این موضوع براتون مهم شده؟ می تونید گزارش گیری رو روی فیلد دیگه انجام بدید؟

kitcat_m18
یک شنبه 25 دی 1390, 02:47 صبح
سلام،
یه دستور SQL برات می ذارمف البته حتما بهتر از این هم می تونی پیدا کنی، SQL زبان قدرتمندیه:

SELECT ROW_NUMBER() OVER (ORDER BY id ASC) AS ROWID, * FROM TableName

در اینجا منظور از فیلد ID همون فیلد ردیف خودتونه که شمارهاش با حذف به هم ریخته.
نکته: برای استفاده از این دستور به یک فیلد یونیک (همون فیلد Auto Number شما خوبه) احتیاج دارین.
موفق باشین :لبخندساده:

vbhamed
یک شنبه 25 دی 1390, 11:04 صبح
سلام

kitcat_m18 (http://barnamenevis.org/member.php?139522-kitcat_m18) عزيز
اين دستور رو خودتون تست كرديد ؟
قراره شماره رديف بزنه ها

kitcat_m18
یک شنبه 25 دی 1390, 14:26 عصر
بله من دستورات رو تا تست نکنم برای دوستان نمی ذارم.
ID یه فیلد یونیکه که من نسبت به اون فیلد یونیک دارم count می گیرم.
کاملا مشخصه که وقتی از یه فیلد یونیک count بگیری از هر عضوی تنها یه دونه داره.
پس به تعداد فیلد های دیتابیس برات ردیف می زنه.
Sort کردن هم می تونه انجام بشه یا نه که میل کاربره.
البته گفتم حتما دستورات بهتری هم وجود داره
موفق باشید :لبخندساده:

vbhamed
دوشنبه 26 دی 1390, 08:21 صبح
سلام

kitcat_m18 (http://barnamenevis.org/member.php?139522-kitcat_m18) عزيز
ولي بنظرم متوجه منظور نشديد
تابع Count تعداد رو مي‌شمره و شما بر اساس فيلد ID شمرديد و چون در هر رديف آي دي ركورد با ركورد رديفهاي ديگه متفاوت هست پس يك ستون ايجاد ميشه كه همه مقادير اون 1 هستن نه شماره رديفي كه بايد از 1 شروع بشه و به تعداد سطرها ختم بشه
لطفا اگر كدتون درسته يك نمونه فايل ديتابيس با Query مربوطه رو بزاريد

kitcat_m18
سه شنبه 27 دی 1390, 09:56 صبح
سلام،

تابع Count تعداد رو مي‌شمره و شما بر اساس فيلد ID شمرديد و چون در هر رديف آي دي ركورد با ركورد رديفهاي ديگه متفاوت هست پس يك ستون ايجاد ميشه كه همه مقادير اون 1 هستن نه شماره رديفي كه بايد از 1 شروع بشه و به تعداد سطرها ختم بشه

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

موفق باشید :لبخندساده: