1- چطور میشه قبل اینکه اطلاعات در بانک ذخیره بشه حدس زد که فیلد Id اون که Auto Number هستش چیه؟
2-چطور میشه بعد از مدتی که با بانک کار میشه و اطلاعات پاک میشن شماره AUTO NUMBER را دوباره از 1 شروع کرد
(لطفا اگه میشه هم تو SQL و هم تو Access)
1- چطور میشه قبل اینکه اطلاعات در بانک ذخیره بشه حدس زد که فیلد Id اون که Auto Number هستش چیه؟
2-چطور میشه بعد از مدتی که با بانک کار میشه و اطلاعات پاک میشن شماره AUTO NUMBER را دوباره از 1 شروع کرد
(لطفا اگه میشه هم تو SQL و هم تو Access)
سلام
در SQLServer ...
1) همواره بعد از یک INSERT در جدولی با AutoNumber مقدار متغییر عمومی/تابع IDENTITY@@ برابر خواهد بود با آخرین مقدار Autonumber درج شده.
2) دو راه مشخص برای ریست AutoNumber وجود دارد.
دستور زیر مقدار autonumber را به فید دلخواه ست میکند:
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دستور زیر کل محتویات یک جدول را با سرعت بسیار بیشتر از Delete حذف میکند و هیچ گزارشی در فایلهای تراکنشی هم منعکس نمیشود. (غیر قابل بازگشت) ضمن اینکه AutoNumber را هم ریست میکند.
البته تغییر در AutoNumber نباید نقل و دستورات برنامه نویسی شما شود و فقط باید در موارد خاص و یا در زمان توسعه برنامه و... استفاده شود و برای موارد عادی کارکرد عملی برنامه بهتر است بگذارید کار خودش را انجام دهد.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(زیاد گیر ندهید که چرا فلان عدد که Delete شد، دیگر اسفاده نشد!!!)
موفق باشید.
این دستور تو Accsess کار نمیکنه
هدف از از اول شروع شدن AutoNumber برای بستن یک دوره مالی در یک نرم افزار حسابداری است چون بعضی جداول دارای ثبت و حذفهای زیادی هستند و شماره AutoNumber آن بسیار بزرگ میشود و همین باعث بزرگ شدن فایل بانک اطلاعاتی میشود و میتواند مشکل زا باشد و با صفر کردن آن مشکل حل میشودکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دانستن AutoNumber بعدی هم به این خاطر لازم است که وقتی چکی توسط کاربر نوشته میشود بایدقبل از ذخیره شماره سند آن(منظور همون AutoNumber است) به کاربر نمایش داده شود نه بعد از ذخیره شدن آن
و همان طور که میدانید شماره 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.
مشکل اولی حل شد
ولی مشکل دومی هنوز هست . البته برای SQL حل شده ولی برای Access هنوز حل نشده
سلام
همانطور که در اول مطالبم بیان کردم، دستورات مختص SQLServer بودند.این دستور تو Accsess کار نمیکنه
=====
در SQLServer دستور ویژه ای هم برای این کار داریم، که میتواند مقدار عددی بعدی را به دقت بیان کند و مثل MAX مشکل زیر را هم ندارد ...دانستن AutoNumber بعدی هم به این خاطر لازم است که وقتی چکی توسط کاربر نوشته میشود بایدقبل از ذخیره شماره سند آن(منظور همون AutoNumber است) به کاربر نمایش داده شود
ولی اصلاً این کار را پیشنهاد نمیکنم!...اگر شماره AutoNumber فعلی مثلا 100 باشد و بعد از آن دو فیلد پاک شده باشد AutoNumber جدید به جای 101 عدد 103 خواهد بود
همانطور که میدانید، برنامه های SQLServer را به راحتی و با تغییرات کوچک در رشته اتصال میتوان تحت شبکه کرد و با زحمت کم این امتیاز را به برنامه اضافه کرد که برنامه تحت شبکه هم کار کند.
اما موردی که شما بیان میکنید یکی از مسائلی است که در کارکرد شبکه ای مشکل ساز میشود و باید از آن پرهیز کنید.
(عادت کنید، برنامه تان را اصولی بنویسید، حتی اگر نخواهید شبکه ای هم باشد!)
به فرض شما عدد بعدی را که همان 103 است به صحت کامل به دست آورید و نمایش هم دادید...
جه تضمینی وجود دارد که فاصله زمانی ثبت اطلاعات، ریسمان یا فرد دیگری روی دیتابیس اقدام نکند و چیزی به آن اضافه نکند و عدد 103 شما استفاده شود؟؟؟ شاید 104 هم و بالاتر هم در این بین استفاده شود؟؟؟
این مشکل میتوانید با فرمان دستی INSERT یک ریسمان یا فرد دیگر پیش آید یا با فرامین جانبی مثل سینک دو دیتابیس ...
بهرحال کار اصولی و محکمی نیست و باید سعی کنید به این کارها عادت نکنید.
این مشکل دو راه حل استاندارد دارد...
که من یکی را پیشنهاد میکنم، آنکه کد ثبت سندتان را بعد از فشاردادن دکمه Save توسط کاربر در فیلد مربوطه نشان دهید.
هیچ ایرادی هم ندارد، خودم در آخرین پروژه ام همین کار را در تمام دیالوگهای مرتبط با بانک انجام دادم...
یعنی فیلد شماره سند هر بخش را ReadOnly کردم و با زدن Save دیتاها درج و فیلد مربوطه پر میشد، هیچ کس هم شاکی نشد!
=====
موفق باشید.
بله. حق با شماست. در برنامه های تحت شبکه، نباید چنین کار هایی صورت گیرد.
اما خب، دوستمون راه حل خواسته بودن، که بنده هم ارائه دادم. البته جناب mtprog ظاهرا" علاقمند به استفاده از اکسس هستند و تنها راهشون هم همونیه که عرض کردم.
سلام
برای ریست autonumber از دو دستور SQL زیر استفاده کنید:... ولی برای Access هنوز حل نشده
و برای به دست آوردن autonumber بعداز عملیات insert هم از دستور زیر:کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته اگر مورد زیر مد نظرتان باشد...کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشید.کد ثبت سندتان را بعد از فشاردادن دکمه Save توسط کاربر در فیلد مربوطه نشان دهید
سلامو برای به دست آوردن autonumber بعداز عملیات insert هم از دستور زیر:
کد:
SELECT @@IDENTITY;
یک راه دیگه هم برای بدست آوردن مقدار جاری فیلد identity وجود داره:
موفق باشیدSELECT IDENT_CURRENT('tablename')
از توضیحات خوبتان ممنون
مشکل اینجا بود که اون برنامه حسابداری3 سال پیش با اکسس نوشته شده بود و در حال آپدیتش بودیم برای همین از اکسس سئوال کردم .
ولی برای ورژن جدیدش فایلها رو به sql و در دو نسخه تک کاربره و تحت شبکه ارائه دادیم
با تشـــــــــــــــــــــــ ــــــــکر
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)