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

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 12

نام تاپيک: چند سئوال در مورد فیلدهای auto number

  1. #1
    اگه نباشه جاش خالی می مونه MTPROG's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    شهر 3500 ساله
    پست ها
    432

    پيش فرض چند سئوال در مورد فیلدهای auto number

    1- چطور میشه قبل اینکه اطلاعات در بانک ذخیره بشه حدس زد که فیلد Id اون که Auto Number هستش چیه؟
    2-چطور میشه بعد از مدتی که با بانک کار میشه و اطلاعات پاک میشن شماره AUTO NUMBER را دوباره از 1 شروع کرد

    (لطفا اگه میشه هم تو SQL و هم تو Access)

  2. این کاربر از MTPROG بخاطر این مطلب مفید تشکر کرده است


  3. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    در SQLServer ...
    1) همواره بعد از یک INSERT در جدولی با AutoNumber مقدار متغییر عمومی/تابع IDENTITY@@ برابر خواهد بود با آخرین مقدار Autonumber درج شده.

    2) دو راه مشخص برای ریست AutoNumber وجود دارد.
    دستور زیر مقدار autonumber را به فید دلخواه ست میکند:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    دستور زیر کل محتویات یک جدول را با سرعت بسیار بیشتر از Delete حذف میکند و هیچ گزارشی در فایلهای تراکنشی هم منعکس نمیشود. (غیر قابل بازگشت) ضمن اینکه AutoNumber را هم ریست میکند.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    البته تغییر در AutoNumber نباید نقل و دستورات برنامه نویسی شما شود و فقط باید در موارد خاص و یا در زمان توسعه برنامه و... استفاده شود و برای موارد عادی کارکرد عملی برنامه بهتر است بگذارید کار خودش را انجام دهد.
    (زیاد گیر ندهید که چرا فلان عدد که Delete شد، دیگر اسفاده نشد!!!)

    موفق باشید.

  4. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  5. #3
    اگه نباشه جاش خالی می مونه MTPROG's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    شهر 3500 ساله
    پست ها
    432

    پيش فرض

    این دستور تو Accsess کار نمیکنه
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    هدف از از اول شروع شدن AutoNumber برای بستن یک دوره مالی در یک نرم افزار حسابداری است چون بعضی جداول دارای ثبت و حذفهای زیادی هستند و شماره AutoNumber آن بسیار بزرگ میشود و همین باعث بزرگ شدن فایل بانک اطلاعاتی میشود و میتواند مشکل زا باشد و با صفر کردن آن مشکل حل میشود

    دانستن AutoNumber بعدی هم به این خاطر لازم است که وقتی چکی توسط کاربر نوشته میشود بایدقبل از ذخیره شماره سند آن(منظور همون AutoNumber است) به کاربر نمایش داده شود نه بعد از ذخیره شدن آن

    و همان طور که میدانید شماره AutoNumber از روی آخرین AutoNumber بدست نمیاد(البته تا حدودی بدست میاد) چون اگر شماره AutoNumber فعلی مثلا 100 باشد و بعد از آن دو فیلد پاک شده باشد AutoNumber جدید به جای 101 عدد 103 خواهد بود

  6. #4
    آخر فروم باز shalineh's Avatar
    تاريخ عضويت
    Mar 2007
    محل سكونت
    فعلا ایران
    پست ها
    1,033

    پيش فرض

    و همان طور که میدانید شماره AutoNumber از روی آخرین AutoNumber بدست نمیاد(البته تا حدودی بدست میاد) چون اگر شماره AutoNumber فعلی مثلا 100 باشد و بعد از آن دو فیلد پاک شده باشد AutoNumber جدید به جای 101 عدد 103 خواهد بود
    روش به دست آوردن AutoNumber در فیلدی که قرار است ثبت شود:

    MyAdapter.SelectCommand.CommandText = SELECT MAX(ID) FROM MyTable
    Dim CurrentID as Integer= MyAdapter.SelectCommand.ExecuteScalar +1

    Pn: MyTable= your table name
    ID= AutoNumber Field Name
    Last edited by shalineh; 23-02-2009 at 16:11.

  7. #5
    اگه نباشه جاش خالی می مونه MTPROG's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    شهر 3500 ساله
    پست ها
    432

    پيش فرض

    مشکل اولی حل شد
    ولی مشکل دومی هنوز هست . البته برای SQL حل شده ولی برای Access هنوز حل نشده

  8. #6
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    این دستور تو Accsess کار نمیکنه
    همانطور که در اول مطالبم بیان کردم، دستورات مختص SQLServer بودند.

    =====

    دانستن AutoNumber بعدی هم به این خاطر لازم است که وقتی چکی توسط کاربر نوشته میشود بایدقبل از ذخیره شماره سند آن(منظور همون AutoNumber است) به کاربر نمایش داده شود
    در SQLServer دستور ویژه ای هم برای این کار داریم، که میتواند مقدار عددی بعدی را به دقت بیان کند و مثل MAX مشکل زیر را هم ندارد ...
    ...اگر شماره AutoNumber فعلی مثلا 100 باشد و بعد از آن دو فیلد پاک شده باشد AutoNumber جدید به جای 101 عدد 103 خواهد بود
    ولی اصلاً این کار را پیشنهاد نمیکنم!
    همانطور که میدانید، برنامه های SQLServer را به راحتی و با تغییرات کوچک در رشته اتصال میتوان تحت شبکه کرد و با زحمت کم این امتیاز را به برنامه اضافه کرد که برنامه تحت شبکه هم کار کند.
    اما موردی که شما بیان میکنید یکی از مسائلی است که در کارکرد شبکه ای مشکل ساز میشود و باید از آن پرهیز کنید.
    (عادت کنید، برنامه تان را اصولی بنویسید، حتی اگر نخواهید شبکه ای هم باشد!)

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

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

    =====

    موفق باشید.

  9. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  10. #7
    آخر فروم باز shalineh's Avatar
    تاريخ عضويت
    Mar 2007
    محل سكونت
    فعلا ایران
    پست ها
    1,033

    پيش فرض

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

  11. این کاربر از shalineh بخاطر این مطلب مفید تشکر کرده است


  12. #8
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    ... ولی برای Access هنوز حل نشده
    برای ریست autonumber از دو دستور SQL زیر استفاده کنید:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و برای به دست آوردن autonumber بعداز عملیات insert هم از دستور زیر:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    البته اگر مورد زیر مد نظرتان باشد...
    کد ثبت سندتان را بعد از فشاردادن دکمه Save توسط کاربر در فیلد مربوطه نشان دهید
    موفق باشید.

  13. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  14. #9
    حـــــرفـه ای F A R H A D's Avatar
    تاريخ عضويت
    Aug 2006
    پست ها
    1,383

    پيش فرض

    و برای به دست آوردن autonumber بعداز عملیات insert هم از دستور زیر:
    کد:

    SELECT @@IDENTITY;
    سلام
    یک راه دیگه هم برای بدست آوردن مقدار جاری فیلد identity وجود داره:
    SELECT IDENT_CURRENT('tablename')
    موفق باشید

  15. این کاربر از F A R H A D بخاطر این مطلب مفید تشکر کرده است


  16. #10
    اگه نباشه جاش خالی می مونه MTPROG's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    شهر 3500 ساله
    پست ها
    432

    پيش فرض

    از توضیحات خوبتان ممنون

    مشکل اینجا بود که اون برنامه حسابداری3 سال پیش با اکسس نوشته شده بود و در حال آپدیتش بودیم برای همین از اکسس سئوال کردم .
    ولی برای ورژن جدیدش فایلها رو به sql و در دو نسخه تک کاربره و تحت شبکه ارائه دادیم

    با تشـــــــــــــــــــــــ ــــــــکر

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •