PDA

View Full Version : مرتب کردن id در جدول access زمانی حذف یک رکورد



mina_148m
یک شنبه 18 آذر 1386, 00:11 صبح
با سلام
من زمانی که می خوام به عنوان مثال 5 رکورد دارم و می خوام رکورد 3 را به عنوان مپال حذف کنم
وقتی به جدول access نگاه می کنک رکورهای 1245 است
ودر گزارش نیز این ترتیب است
چه جوری می تونم بعد از حذف ایت ترتیب ها رو درست کنم در فیلد id جدولم
که درست 1234 باشه؟
ممنون می شم یکم زودتر کمکم کنید
با تشکر:ناراحت::ناراحت::ناراحت:

Cave_Man
یک شنبه 18 آذر 1386, 00:15 صبح
باید الگوریتم بنویسی و مقادیر فیلدها رو عوض کنی

vcldeveloper
یک شنبه 18 آذر 1386, 02:16 صبح
ودر گزارش نیز این ترتیب است
چه جوری می تونم بعد از حذف ایت ترتیب ها رو درست کنم
فیلد ID را به عنوان فیلد کلید به کار می برند و مقدارش را تغییر نمیدند. اگر صرفا می خواید در گزارشتون شماره ایی داشته باشید که ترتیب رکوردها را نمایش بده، می تونید یا از در داخل دلفی یک فیلد Calculated بسازید و در زمان محاسبه مقدارش را برابر DataSet.RecNo قرار بدید، یا از امکانات ابزار گزارش گیری تون استفاده کنید، مثلا در FastReport متغیر [Row#] شماره ترتیبی رکورد را بر می گردونه. در ابزارهای گزارش گیری دیگه هم امکان مشابه ایی وجود داره.

Cave_Man
یک شنبه 18 آذر 1386, 12:43 عصر
ولی فکر نمیکنم مقصودشون شماره ردیف باشه مثلا در سیستم های مالی یا خرید و فروش(تجاری) این مورد لازم میشه که شماره ها رو به شکلی بازسازی کنیم
البته فکر میکنم که فیلد ID در اینجا فیلدی کلیدی نیست چون ایشون هم نگفته . ولی معمولا اسم ID رو برای کلید استفاده میکنن.

ghabil
یک شنبه 18 آذر 1386, 13:15 عصر
ولی فکر نمیکنم مقصودشون شماره ردیف باشه...

جواب آقای کشاورز درست و کامل هست ،و جواب شما غلط.
دوباره مطالب نوشته شده توسط آقای کشاورز رو مطالعه کنید

Cave_Man
یک شنبه 18 آذر 1386, 14:18 عصر
جواب آقای کشاورز درست و کامل هست ،و جواب شما غلط.
دوباره مطالب نوشته شده توسط آقای کشاورز رو مطالعه کنید
فکر میکنم شما هم احتیاج دارید یک بار دیگه پست من رو بخونید
لطفا دلیل اشتباه بودن جواب من رو بگید..
من اصلا به این که فیلد ID رو به عنوان فیلد کلیدی بدونیم موافق نیستم ID فقط یه اسم هست اشتباه شما هم همینه.کلیدی بودن یه فیلد بستگی به ماهیت فیلد داره نه اسم اون.درصورتی که مقصود سوال کننده شماره ردیف باشه حرف آقای کشاورز کامل و درست هست اما اگر منظور سوال کننده فیلدی باشه که در اون Data مفیدی از نظر تجاری و اطلاعات Business ذخیره شده باشه اونوت قضیه فرق میکنه

ghabil
یک شنبه 18 آذر 1386, 15:53 عصر
دوست عزیز
پست شما رو خونده بودم ، یکبار دیگه هم خوندم :
ID قرار هست Identifier یک Row در دیتابیس باشه و به همین خاطر هم شرایط خودش رو داره و تمام ارتباطات خارجی جدول نیز از طریق این فیلد انجام میشه ، پس نباید تغییر کنه و از اونجایی که ایشون سوالشون این بود که "وقتی در اکسس نگاه میکنند..." یعنی خودشون این مقدار رو ندادند بلکه از یک AutoNumber استفاده کرده اند و از اونجایی که در طراحی دیتابیس برای هر سطر یک ID تعیین میشه پس این فیلد قاعدتا میبایست فیلد کلید باشد. و من الگوریتمی!! سراغ نداره که فیلد کلیدی AutoNumber را Edit کنه و منظورم از غلط بودن پاسختون هم این بود.
اما اگر بفرض هم این ID بقول شما فقط یک اسم بود و فقط برای نشان دادن ترتیب استفاده میشد باز هم نیازی به تعریف و مرتبا تغییر دادنش نبود و این کار هم غلط بود ، که بخش اعظمی از پاسخ آقای کشاورز به توضیح راه حل درست این مسئله اختصاص داشت.
در مورد Data ی مهم و این حرفها هم دیتایی که با حذف شدن یک سطر دیگه بطور نا معلومی مقدارش عوض میشه هیچ ارزش خارجی نداره.
به هر حال امیدوارم همه دوستان بجای بازی با کلمات و اصرار بر نظراتشون سعی کنند راه حلهای درست و عملی رو یاد بگیرند و به دیگران هم پیشنهاد بدهند.

پ.ن : امیدوارم جایی از نوشتتون نخونده نمونده باشه.

Cave_Man
یک شنبه 18 آذر 1386, 16:45 عصر
ID قرار هست Identifier یک Row در دیتابیس باشه
چنین چیزی در سوال مطرح نشده در سوال چیزی که مطرح شده این هست که من میخام ترتیب شماره 1245 بشه 1234. این سوال هست!


از اونجایی که ایشون سوالشون این بود که "وقتی در اکسس نگاه میکنند..." یعنی خودشون این مقدار رو ندادند بلکه از یک AutoNumber استفاده کرده اند
من هیچ وقت به این آسونی نتیجه گیری نمیکنم یعنی نتیجه گیری شما غلط هست و بر اساس حدس و گمان پاسخ دادید



و از اونجایی که در طراحی دیتابیس برای هر سطر یک ID تعیین میشه
این دقیقا همون چیزیه که شما بهش میگید بازی با کلمات.
در طراحی دیتابیس برای هر سطر یک کلید تعیین میشه Key و نه ID.



اگر بفرض هم این ID بقول شما فقط یک اسم بود و فقط برای نشان دادن ترتیب استفاده میشد باز هم نیازی به تعریف و مرتبا تغییر دادنش نبود و این کار هم غلط بود
من نگفتم مرتبا تغییر اگر قراره مرتبا تغییر کنه که مصلما کار غلطیه .این تغییر معمولا در فواصل زمانی زیاد باید انجام بشه و برای اطمینان از اینکه بین مقادیر عددهایی جا نمانه باشه.مثلا حالت 112556 اصلاح بشه به 112334 .


من الگوریتمی!! سراغ نداره که فیلد کلیدی AutoNumber را Edit کنه
راستش رو بخاید من هم چنین الگوریتمی رو نمیشناسم . این نتیجه شما هم بر اساس نتیجه گیری غلط قبلیتون هست مسئله اینه که اینجا ID اصلا فیلد کلیدی نیست

قبل از اینکه زود به غلط بودن جواب پی ببرید باید بیشتر تدبر کنید

mina_148m
یک شنبه 18 آذر 1386, 16:46 عصر
با سلام خدمت دوستان و ممنون از بابت کمکهایشان
اشتباه از من بود که بیشتر مaکلم رو توضیح نداده بودم
ولی واقعا" از راهنمایی های دوستان ممنون هستم
باید عرض کنم که من فیلد id رو فقط برای تعریف سطر تعریف کردم با autonumberا
بلکه من فیلد دیگری به اسم code را به عنوان کلید اصلی تعریف کردم و از نوع autinumbe نیست و نه به عنوان کلید اصلی
همچنین نمی خوام مقدار فیلد code بعد از حذف تغییر کنه
اما میخوام که بعد از حذف مقدار قیلد id در جدول access درست بشه ترتیبش
و در گزارش نیز درست چاپ بشه

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

من اونجور که از نوشته جناب ghabil فهمیدم نیازی به تغییر نیست حالا به توجه به این توضیحات بازم نیازی نیست؟

البته من یه سواله دیگه هم داشتم می دونم اینجا جاش نیست البته من از بخش مورد نظر پرسیدم ولی کسی جواب نداده
اینکه وقتی من می خوام گزارش بگیرم از با اسنفاده از ابزارquickrep عنوانها و qrshqpe ها که استفاده کردم از صفحه دوم به بعد به هم می خوره
ممنون می شم اگه تو این مور هم کمکم کنید
باز هم از راهنمیی های دوستان منون هستم

scorpion_man
یک شنبه 18 آذر 1386, 16:48 عصر
دقیقا هرگز نباید به فیلد primry key دست بزنید چون این همیشه یکتا و نشاندهنده اطلاعات چه باقی مونده چه حذف شده است چون تجربه نشون داده که میتونه مشکلات فراوونی بوجود بیاره
در ضمن اگه این فیلد اصلی شما نیست وقتی میخواهید گزارشی از database بگیرید با استفاده از دستور sort ترتیب دیتابیستونو بر اساس فیلد مورد نظرتون مرتب کنید و اصلا نیازی به تغییر مکان فیزیکی row وجود نداره و مکان فیزیکی بهتره به همون شکل ایجاد شده توسط دیتابیس بر اساس primry key باقی بمونه و اگه میخواهید اون فیلد فرعی که نامشو id گذاشتید مقدار سطر حذف شده رو به خودش بگیره بهتره زمان حذف این کارو بکنید یا با استفاده یه store procedur این کارو هر از گاهی انجام بدید و مقادیر حذف شده رو باز آوری کنید البته بازم برام روشن نیست که شما این کارو برا چی میخواهین

Cave_Man
یک شنبه 18 آذر 1386, 16:54 عصر
خطاب به استاد گرامی آقای کوشا
من دوست ندارم این بحث زیبا به یک کل کل که توی اون طرفین بخان دانسته هاشون رو یه جورهایی به نمایش بزارن تبدیل بشه من اگر اشتباهی در صحبت هام داشتم باید توجیه بشم و شما هم اگر اشتباهی کردید باید پس از توجیه به اشتباهتون پی ببریدو البته من هم همین طور.
هم من و هم شما دقیقا میدونیم که طرف مقابل داره چی میگه پس به قول شما بازی با کلمات جایز نیست

ghabil
یک شنبه 18 آذر 1386, 17:58 عصر
باید عرض کنم که من فیلد id رو فقط برای تعریف سطر تعریف کردم با autonumberا
بلکه من فیلد دیگری به اسم code را به عنوان کلید اصلی تعریف کردم و از نوع autinumbe نیست و نه به عنوان کلید اصلی
همچنین نمی خوام مقدار فیلد code بعد از حذف تغییر کنه
اما میخوام که بعد از حذف مقدار قیلد id در جدول access درست بشه ترتیبش
و در گزارش نیز درست چاپ بشه


پاسخ درست و کامل شما این هست :



اگر صرفا می خواید در گزارشتون شماره ایی داشته باشید که ترتیب رکوردها را نمایش بده، می تونید یا از در داخل دلفی یک فیلد Calculated بسازید و در زمان محاسبه مقدارش را برابر DataSet.RecNo قرار بدید، یا از امکانات ابزار گزارش گیری تون استفاده کنید، مثلا در FastReport متغیر [Row#] شماره ترتیبی رکورد را بر می گردونه. در ابزارهای گزارش گیری دیگه هم امکان مشابه ایی وجود داره.


نگه داشتن مقادیر توی دیتابیس برای مقصود شما به دو دلیل غلط هست :

1) Update کردن اطلاعات با دردسر همراه هست ، به همه دلایلی که خودتون گفتید.
2) نگهداشتن اطلاعات اضافه ای هست که بهشون نیازی ندارید ، وقتی که میتونید زمان نمایش این اطلاعات رو به راحتی تولید کنید .

مگر اینکه بخواهید با نگهداری این اطلاعات به کاربر این امکان رو بدید که دستی ترتیب نمایش اطلاعات رو عوض کنه.




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

زمانیکه اطلاعاتش رو پاک کردین دیگه چه فرقی میکنه که دفعه بعد کی داره استخدام میشه؟! سیستم که نمیدونه همچین شخصی قبلا بوده.


چنین چیزی در سوال مطرح نشده در سوال چیزی که مطرح شده این هست که من میخام ترتیب شماره 1245 بشه 1234. این سوال هست!
من هیچ وقت به این آسونی نتیجه گیری نمیکنم یعنی نتیجه گیری شما غلط هست و بر اساس حدس و گمان پاسخ دادید

اگر منظور این سوال این بود، که اتفاقا هم بود سوال و روش انتخاب شده غلط بود ، نمیدونم تاحالا چند بار گفتم ، وقتی کسی قسمتی از راه رو اشتباه رفته بجای اینکه کمکش کنید بیشتر مسیر اشتباهش رو بره تا بالاخره یک روزی یک جایی گیر کنه و اونوقت سوالش اینجا بدون جواب بمونه ، راه درست رو از اول بهش نشون بدین !
نمونش همین یکی دو روز پیش این سوال (http://barnamenevis.org/forum/showthread.php?t=63999) از پست 6 به بعد : محض رضای خدا یک جواب درست توش نیست ! روشهایی که کار راه بندازن هستند ولی همه در راستای بدتر کردن اوضاع ! جالبه بدونید نهایتا این مشکل با تبدیل فیلد از NVarchar به Int حل شد.
ولی منکه دیگه شخصا بریدم بخوام هی یک چیز رو تکرار کنم . اگر هم اینبار به تو گفتم دلیلش این بود که فکر کردم به سابقت میخورد منطقی تر برخورد کنی والا میبینی که زیر همین پست هیچی نگفتم!



این دقیقا همون چیزیه که شما بهش میگید بازی با کلمات.
در طراحی دیتابیس برای هر سطر یک کلید تعیین میشه Key و نه ID.


!!!!



من نگفتم مرتبا تغییر اگر قراره مرتبا تغییر کنه که مصلما کار غلطیه .این تغییر معمولا در فواصل زمانی زیاد باید انجام بشه و برای اطمینان از اینکه بین مقادیر عددهایی جا نمانه باشه.مثلا حالت 112556 اصلاح بشه به 112334 .


متاسفم که نهایتا یا باید بیخیال بشم یا یک چیزی مثله این بشه (http://barnamenevis.org/forum/showthread.php?t=83819)
.



به هر حال امیدوارم همه دوستان بجای بازی با کلمات و اصرار بر نظراتشون سعی کنند راه حلهای درست و عملی رو یاد بگیرند و به دیگران هم پیشنهاد بدهند.

Cave_Man
یک شنبه 18 آذر 1386, 20:16 عصر
باید عرض کنم که من فیلد id رو فقط برای تعریف سطر تعریف کردم با autonumberا
اگر فقط این بوده که کاملا واضحه باید از روشی که آقای کشاورز گفتن استفاده کنید و همون طوری که آقای کوشا هم گفتن نگهداری فیزیکی کار بی فکریه.
با پست بعدی سوال کننده منظور کاملشون واضح شد.



اگر منظور این سوال این بود، که اتفاقا هم بود سوال و روش انتخاب شده غلط بود ، نمیدونم تاحالا چند بار گفتم ، وقتی کسی قسمتی از راه رو اشتباه رفته بجای اینکه کمکش کنید بیشتر مسیر اشتباهش رو بره تا بالاخره یک روزی یک جایی گیر کنه و اونوقت سوالش اینجا بدون جواب بمونه ، راه درست رو از اول بهش نشون بدین !
آقای قابیل حالا که سوال کاملا مشخص شده و جوابش رو هم , هم شما و هم من میدونیم .
شما هم الان دیگه نباید موضع حق رو بگیری چون جوابی که من دادم برای مقاصد خودش اشتباه نبود. اما برای نشون دادن فقط ردیف ها مشخصه که راه تغییر مقادیر فیلدها واقعا دور از عقله.
شما هم قبل از اینکه دقیقا متوجه بشی من دارم چی میگم , برچسب غلط رو قبل از مشخص شدن کامل سوال برای جواب پیشنهادی انتخاب میکنی و میگی که فیلد کلیدی یا به قول شما ID رو نباید تغییر داد حال آنکه اصلا این فیلد کلیدی نبود .
اگر منظور سوال کننده چیزی جز شماره ردیف بود جواب شما منتفی بود مثل حالت خاصی که با فونت قرمز مشخص کردم و شما اون رو به قول خودتون بی خیال شدید.
راستی از شما توقع نمیرفت که کاربران رو با هم مقایسه کنید .
بحث جالبی بود مرسی