PDA

View Full Version : جابجایی فیلدهای AutoNumber



Saeid59_m
یک شنبه 31 تیر 1386, 06:55 صبح
سلام
من یه بانک اکسس دارم که توی یکی از جدولهای اون دو فیلد ID و Name وجود دارد . که فیلد ID از نوع َAutoNumber‌هست و حالا می خواهم مثلاً رکورد سوم رو با رکورد اول جابجا کنم .

چکار باید بکنم که فیلد ID‌ عوض نشه . چون این فیلد کلیده و تعداد زیادی بانک بهش وصله .

ممنون

Batman
یک شنبه 31 تیر 1386, 07:11 صبح
اگه فقط دو تا فیلد داری میتونی از متغیر کمکی استفاده کنی یا ابزاراتی از قبیل (listbox)
موفق باشی

Saeid59_m
یک شنبه 31 تیر 1386, 07:27 صبح
شاید منظورم رو خوب نرسوندم .
من می خواهم رکوردها با هم جابه جا بشن مثلا رکورد شماره 1 با رکورد شماره 3 و همونطور که می دونید . فیلد ID‌چون از نوع َAutoNumber هست مقدارش رو به طور خودکار بدست می آورد . (مشکل اینجاست)

ghabil
یک شنبه 31 تیر 1386, 10:51 صبح
چیشون عوض بشه ، اگر منظورت ترتیبشون هست خوب مثلا یک فیلد کد تعریف کن و هر طوری میخوای مقدارش بده و همیشه هم بر روی اون Sort کن دیگه.

Saeid59_m
یک شنبه 31 تیر 1386, 12:38 عصر
برنامه ام یه طوریه که ترتیب قرارگرفتن رکوردها توی بانک مهمه . وقتی که از بانک Query‌می گیریم که جای رکوردها با هم عوض نمی شه .

ghabil
یک شنبه 31 تیر 1386, 16:38 عصر
با سلام

می تونی برای جابجایی رکوردها از Delete و Insert استفاده کنی.

موفق باشی

!!!!!!

اینکه برنامت روی ترتیبی که دیتابیس برای رکوردها در نظر میگیره حساب میکنه یک ضعف هست، اگر برات ترتیب رکوردها مهم هست روش استاندارد و درست اینه که یک فیلد داشته باشی مثل همون کد که گفتم که به نحوه مناسبی مقدار دهی بشه و همیشه هم روی اون اطلاعات رو Sort بکنی و بعد اطلاعات رو بگیری.

Saeid59_m
دوشنبه 01 مرداد 1386, 06:45 صبح
با سلام
نکته : البته اگر دقت کنی مقدار AutoNumber رکورد 2 به 4 تغییر کرده است.(در این روش مقدار AutoNumber تغییر می کند)
موفق باشی

ممنون از راهنمائی تون . ولی دقیقاً‌ مشکل من روی همین نکته ای که اشاره کردید . راهی نیست که این مشکل حل بشه . (البته نمی خوام نوع فیلد AutoNumber‌ رو تغییر بدم )

ممنون

Saeid59_m
دوشنبه 01 مرداد 1386, 07:55 صبح
با سلام
قرار نیست نوع فیلد تغییر کند فقط مقدار آن تغییر می کند.
موفق باشد
ممنون از توضیحات تکمیلی شما .
خوب اگه مقدار تغییر بکنه اون موقع تکلیف بانکهای متصل شده چی می شه
البته فکر کنم با Relation Ship بتونم ارتباط رو برای عوض شدن فیلدهای کلید برقرار کنم ولی زمان زیادی صرف می شه برای تغییر اونها .

SYNDROME
دوشنبه 01 مرداد 1386, 09:15 صبح
با سلام

ممنون از توضیحات تکمیلی شما .
خوب اگه مقدار تغییر بکنه اون موقع تکلیف بانکهای متصل شده چی می شه
البته فکر کنم با Relation Ship بتونم ارتباط رو برای عوض شدن فیلدهای کلید برقرار کنم ولی زمان زیادی صرف می شه برای تغییر اونها .
در ان یک لحظه که شما این کار را می کنید قرار نیست اطلاعات تغییر کند چون سرعت خیلی بالا است.
البته اگر هم فکر می کنی ممکن است تغییر کند در آن مقطع کاربر را چند لحظه Stopکن تا تغییر انجام شد و سپس مقدار جدید را روی مقدار قبلی بریز.(این Stopاینقدر سریع می گذرد که هیچ کس متوجه نمی شود)
در ضمن می توانید فیلد را از حالا AutoNumberخارج کرده و سپس خودت این مدیریت را انجام دهی و آن وقت مقدار کلید در جابجایی ها نیز تغییر نمی کند .
موفق باشید.

ghabil
دوشنبه 01 مرداد 1386, 23:30 عصر
با سلام

یک ضعف ! ! !
شاید در بعضی از موارد به نظر ضعف برسد.
ولی وقی ترتیب رکوردها مهم است آن وقت حسن آن مشخص می شود .
شاید با Sortبتوان این کار را کرد.
ولی زمانیکه این ترتیب در همه برنامه مهم است و هر جا Sortبخصوص خود را دارد استفاده از Sortتقریبا غیر ممکن است.

اگر هر جایی Sort محصوص به خودش رو داشته باشه دیگه اونجا نمیشه از ترتیب پیشفرض دیتابیس استفاده کرد ، چون رکوردها به شکل دیگه ای مرتب شده اند! من گفتم بجای حساب کردن روی ترتیب پیش فرض دیتابیس باید ، اگر این ترتیب مهم هست و نیاز به جابجاییش هست باید یک فیلد مخصوص این کار داشته باشیم . نمیدونم چرا فقط اصرار داری یک چیزی گفته باشی !!



متلاً در صدور سند حسابداری باید یک خط بین خطوط دیگر اضافه کنی.
حالا اگر بتوانی در این بخش مشکل را با Sortحل کنی بقیه قسمتها چی؟؟؟؟؟؟؟


یک لحظه فکر کردی توی روش تو که میگی رکوردهای بعدی رو پاک کنند توی این مثال چه اتفاقی میفته ؟! مثلا توی جدولی که 2000 تا رکورد داره بخواهیم بین رکورد 2 و 3 یک رکورد اضافه کنیم ، باید 1988 رکورد بعدی رو پاک کنیم رکورد شماره 3 رو بزنیم بعد دوباره 1988 رکورد رو بزنیم !!!! نمیگم بخاطر وجود رابطه توی جدولهای دیگه اصلا نمیشه این کار رو کرد یا اگر هم بشه چه حجم بالای ترنس اکشنهایی درست میکنه ، ولی همین که اینهمه رکورد رو در حالت Temp نگه داریم از توی دیتابیس پاک کنیم و بعد دوباره بزنیم منطقیه ؟!



در ضمن می توانید فیلد را از حالا AutoNumberخارج کرده و سپس خودت این مدیریت را انجام دهی و آن وقت مقدار کلید در جابجایی ها نیز تغییر نمی کند .


فیلد AutoNumber در اکثر جداول فیلد کلید هست با فیلد کلید هم نمیشه یابزی کرد اما این که یک فیلد غیر اتو نامبر برای تنظیم ردیف داشته باشیم و خودم مدیریتش کنیم میشه همون روشی که من از اول گفتم ! ببین اگر بجای اینکه همون اول تا هرچی به ذهنت میرسه رو بدون در نظر گرفتن اثراتش مطرح نکنی و یکمی روش فکر بکنی به اینجا نمیرسی که هی نظرت عوض بشه !



می تونی برای جابجایی رکوردها از Delete و Insert استفاده کنی.

در ان یک لحظه که شما این کار را می کنید قرار نیست اطلاعات تغییر کند چون سرعت خیلی بالا است.


حاصل اینجور حرفها و تصمیگیریها میشه برنامه های وصله پینه ای که یک عمر برنامه نویسشون رو آواره میکنه ! حالا اگر به خودت رحم نمیکنی به کسانی که راهنماییشون میکنی رحم کن !

Mahyaa
سه شنبه 02 مرداد 1386, 09:56 صبح
می تونی برای جابجایی رکوردها از Delete و Insert استفاده کنی.



به نظرم روش درستی نیست . تحمیل کردن اینهمه Transaction کار اشتباهیه (حتی اگر توی کسر ثانیه باشه)

ترتیب فیزیکی رکوردها چه اهمیتی داره ؟!!؟؟

علامت سوال
سه شنبه 02 مرداد 1386, 10:01 صبح
Syndrome جان حق با آقای کوشا هست اصلا جابجایی فیزیکی کار درستی نیست.این دستوراتی که شما نوشتی Delete ,Insert بشدت باعث میشه که توی فایل دیتابیس شما Fraction ایجاد بشه و بعد از یه مدت سرعت بازیابی Query ها بشدت پایین بیاد.البته این فقط یکی از دلایل برای این کار بود.
فیلدی که شاید بانک داره بر اساس اون بصورت فیزیکی رکورد ها رو روی دیسک ذخیره میکنه حتی الامکان نباید تغییر مقدار بده.چه برسه به اینکه شما بخای برای هر بار تغییر مکان فیزیکی تعداد زیادی رکورد رو تغییر بدی.
روش آقای کوشا درست و خیلی جالب هست و باعث میشه که ارتباط Table ما با بقیه Table ها که بر اساس ID ایجاد شده دستخوش تغییر نشه.

علامت سوال
سه شنبه 02 مرداد 1386, 10:13 صبح
ب تحمیل کردن اینهمه Transaction کار اشتباهیه (حتی اگر توی کسر ثانیه باشه)
اینی که Syndrome گفته توی کسری از ثانیه اصلا درسته نیست وقتی تعداد رکورد ها افزایش پیدا کرد متجه خواهید شد که این کسری از ثانیه مساوی میشه با کسری از ساعت

علامت سوال
سه شنبه 02 مرداد 1386, 17:27 عصر
به نظر شما تعداد رکوردهایی که بانک Accessساپورت می کند چند تا است؟

کاملا نظر شخصی است.


موتور اکسس از موتور SQL server ساخته شده و دلیل نمیشه که نشه درش تعداد زیادی رکورد ذخیره کرد.من به شخصه تعداد یک ملیون رکورد رو بدون هیچ مشکلی به چشم دیدم . دیگر دوستان هم بودن که تعداد بسیار زیادی رکورد داشتن.

دوست من هر نظر شخصی ممکنه درست نباشه و باعث گمراهی سوال کننده بشه...
:لبخندساده::لبخندساده:

ghabil
سه شنبه 02 مرداد 1386, 20:41 عصر
ولی بی پروا تاختن به دوستان کار چندان جالبی نیست.

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



یک کم SQLمطالعه کنید!!!!


این که به اس کیو ال ربطی نداره! ولی من سال 80 DataBase Tuning برای Oracle 7.3.3 تدریس میکردم ، تو اون موقع چی کار میکردی؟
ادعا نمیکنم چیزی بلدم و حتما هم باید بیشتر مطالعه کنم ، ولی بعضی وقتها آدم یک حرمتهایی رو باید رعایت کنه !

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

تو که به دیگران گیر میدی که چرا تاپیک درست انتخاب نمیکنند ، اولا بیشتر از بقیه باید حواست باشه که قبل از اینکه زیر هر پستی یک پاسخ بدی فکر کنی ببینی چقدر جوابت درست هست یا نه . دوما همونطوری که انتظار داری بقیه اشتباهاشون رو قبول کنند تو هم اشتباهت رو قبول کنی ، نه اینکه هی بیشتر روی اشتباهت تاکید کنی تا حدی که کارت به اینجا برسه که برای اینکه زیر بار اشتباهت نری یک مسئله فنی با نتیجه روشن رو بگی نظر شخصی رنگ و وارنگش هم بکنی!



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


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

1) اولی برای اون درآمد باید دوبرابر دومی کار کنه
2) بنظر من پولی که دومی در میاره حلاله ولی پول اولی چون اگر مراجعه کنند هاش میدونستند که داره چه بلایی سرشون میاره هیچ وقت پیشش نمیومدند حلال نیست و نهایتا هم با اینکه نمیتونند پولشون رو پس بگیرند ولی همیشه پشتش ناله و نفرینش میکنند.
3) از نظر اعتبار هم ، همه میگن اولی یک دکتر بد و دومی یک دکتر خوبه .

اینها هیچ کدوم همون لحظه که مراجعه کننده ها میان پیششون معلوم نمیشه ، بعدها و با گذشت زمان در عمل معلوم میشه .
حالا اینکه میگی روش من برای 7-8 تا رکورد جواب میده مثل اینه که اون دندونپزشکه بگه این درمان واسه یکی که میخواد 1 ماه دیگه زندگی کنه فایده داره! برنامه ای که 7-8 تا رکورد داره برنامه نمیخواد که طرف میتونه حفظ کنه این رکوردها رو ، بعدشم حتی اگر 2 تا رکورد هم داره دلیل نمیشه که آدم روش درست رو ول کنه و بره سراغ روش اشتباه ! تازه تجربه نشون داده که اکثر برنامه هایی که حتی تستی نوشته میشند بعدا دوباره برای یک تست دیگه هم بهشون احتیاج میشه و اگر بد نوشته باشیش به دردسر میخوری.

اما در مورد کار ما به شکل خاص پشتیبانی نرم افزار یکی از مهمترین بخشهای کاره ، اینکه من قدیما به درست برنامه نویسی گیر میدادم اینجا (جدیدا کمتر شده چون معمولا کسی گوش نمیده) دلیلش اینه که تا دلت بخواد برنامه نویسهایی دیدم که بخاطر پشتیبانی برنامشون چند برابر پولی که گرفتن خرج کردند تازه آخرش هم نتونستند برنامه رو جمع کنند و شک نکن که درست نوشتن برنامه و وقت گذاشتن و روشهای درست و استاندارد رو پیدا کردن مهمترین عامل در کاهش هزینه ها و دردسرهای پشتیبانیه !

همه این قصه ها رو هم گفتم چون فکر میکنم ارزشش رو داری ، والا هستند کسانی که مرتبا زیر پستها الکی جواب میدهند و من که بیخیالشون شدم ، بقیه بچه ها هم بنظر میاد کاریشون ندارند. ولی بنظر من این افراد با هر پستی که میزنند بیشتر خودشون رو زیر سوال میبرند.