امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
درخواست راهنمایی برای به دست آوردن اولین کد آزاد !!!
نویسنده پیام
1120 آفلاین
در حال پیشرفت
***

ارسال‌ها: 313
موضوع‌ها: 49
تاریخ عضویت: دى ۱۳۸۷

تشکرها : 404
( 381 تشکر در 161 ارسال )
ارسال: #1
درخواست راهنمایی برای به دست آوردن اولین کد آزاد !!!
سلام دوستان .

در قسمت ثبت نام برنامه ام قسمتی به نام کد اشتراک وجود داره ، که برای هر مشترک باید یک شماره اختصاصی ( که قبلا ثبت نشده و آزاد هست ) ثبت بشه .

من میخوام کاری کنم که با زدن دکمه X اولین شماره مجاز برای وارد کردن ، به عنوان کد اشتراک به کاربر نمایش داده بشه ( کاری که همه برنامه های حسابداری و ... انجام می دن ) .

در ضمن من از MSado استفاده کردم .

نام جدول : Table1

نام فیلدی که کد اشتراک درش ذخیره میشه : mycode

ممنون .

۱۵-مهر-۱۳۸۸, ۰۳:۵۶:۱۱
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #2
RE: درخواست راهنمایی برای به دست آوردن اولین کد آزاد !!!
معمولا تمام سیستم های بانک اطلاعاتی یه فیلد identity دارن که مقدار اون یکتا هست (معمولا از نوع int و AutoNumeric)موقعی که میخواهین کد اشتراک اختصاص بدین میتونین یه select بزنین
کد:
select (max(id)+1)eshterak from table
در اینجا id فیلدidentity و table اسم جدولی هست که میخواهید شماره اشتراک رو از اون بیرون بکشین

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۱۵-مهر-۱۳۸۸, ۱۰:۰۲:۴۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : 1120
1120 آفلاین
در حال پیشرفت
***

ارسال‌ها: 313
موضوع‌ها: 49
تاریخ عضویت: دى ۱۳۸۷

تشکرها : 404
( 381 تشکر در 161 ارسال )
ارسال: #3
RE: درخواست راهنمایی برای به دست آوردن اولین کد آزاد !!!
نقل قول: عمولا تمام سیستم های بانک اطلاعاتی یه فیلد identity دارن که مقدار اون یکتا هست (معمولا از نوع int و AutoNumeric)

فیلد من AutoNumeric نیست و نمیخوام هم که باشه .
نقل قول: وقعی که میخواهین کد اشتراک اختصاص بدین میتونین یه select بزنین
کد:
select (max(id)+1)eshterak from table
در اینجا id فیلدidentity و table اسم جدولی هست که میخواهید شماره اشتراک رو از اون بیرون بکشین

شما در این روش هر دفعه مقدار آخرین فیلد رو + 1 کردین و به کاربر نمایش میدین .

خودم هم اول خواستم از این روش استفاده کنم ولی این روش تا زمانی جواب میده که :


1 - کاربر رکوردی رو حظف نکرده باشه ، مثلا اگه کاربر بعد از ثبت 20 تا رکورد بیاد رکورد 5 رو حظف کنه و ما از روش فوق برای به دست آوردن شماره آزاد استفاده کنیم دیگه شماره 5 هیچ وقت به کاربر پیشنهاد نمیشه .

2 - کاربر به طور دستی شماره اشتراک رو وارد نکرده باشه ، مثلا کاربر به طور خود سر شماره 21 رو وارد کرده
و تا العان هم 20 تا رکورد تو جدول ثبت شده ، حالا اگه بر روی X کلیک کنه شماره 21 که قبلا ثبت شده به کاربر پیشنهاد میشه .

دوستان یادتون باشه من میخوام با زدن دکمه X اولین شماره آزاد به کاربر پیشنهاد بشه .

ممنون .

(آخرین ویرایش در این ارسال: ۱۵-مهر-۱۳۸۸, ۱۶:۰۴:۰۵، توسط 1120.)
۱۵-مهر-۱۳۸۸, ۱۳:۳۴:۴۹
ارسال‌ها
پاسخ
hamed_Arfaee آفلاین
مدیر بخش
*****

ارسال‌ها: 1,334
موضوع‌ها: 231
تاریخ عضویت: تير ۱۳۸۳

تشکرها : 1250
( 2634 تشکر در 730 ارسال )
ارسال: #4
RE: درخواست راهنمایی برای به دست آوردن اولین کد آزاد !!!
با سلام

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

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

ولی خوب اگه نمیخواهیین کارتون اصولی باشه میشه اینطوری کار کرد :

وقتی رکوردی حذف میشه کد اونو تو یه فایل و یا یک تیبل ذخیره کنیم و موقع اضافه شدن رکورد جدید کوچکترین عدد رو از فایل یا تیبل بخونیم و بدیم به کد اشتراک
ویا
موقع ثبت یک به یک چک کنیم و اولین کد اشتراک خالی رو پیدا کنیم
ویا
قبل از ثبت اشتراک جدید با یک مرور در کل کدهای اشتراک اولین محل خالی رو پیدا کینم یعنی :یک حلقه از 1 تا بزرگترین عدد اشتراک اگر شمارنده حلقه بغییر از کد اشتراک فعلی بود یعنی اون شماره حلقه میتونه یک کد اشتراک باشه

ویا مدلهای دیگه که من بلد نیستم .

حامد ارفعی

موفقيت، پيش رفتن است، نه به نقطه ي پايان رسيدن.(آنتوني رابينز)


تریگرها در SQL server

آیا میدانید SQL ای
۱۵-مهر-۱۳۸۸, ۱۵:۰۲:۱۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : 1120
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #5
RE: درخواست راهنمایی برای به دست آوردن اولین کد آزاد !!!
(۱۵-مهر-۱۳۸۸, ۱۳:۳۴:۴۹)1120 نوشته است: فیلد من AutoNumeric نیست و نمیخوام هم که باشه .
در این حالت میتونین از مقدار uniqidentifier استفاده کنین
نقل قول: وقعی که میخواهین کد اشتراک اختصاص بدین میتونین یه select بزنین
کد:
select (max(id)+1)eshterak from table
در اینجا id فیلدidentity و table اسم جدولی هست که میخواهید شماره اشتراک رو از اون بیرون بکشین

شما در این روش هر دفعه مقدار آخرین فیلد رو + 1 کردین و به کاربر نمایش میدین .
[/quote]
خیر من max یعنی بزرگترین عددی که موجود هست رو +1 میکنم نه اخرین
نقل قول: خودم هم اول خواستم از این روش استفاده کنم ولی این روش تا زمانی جواب میده که :

1 - کاربر رکوردی رو حظف نکرده باشه ، مثلا اگه کاربر بعد از ثبت 20 تا رکورد بیاد رکورد 5 رو حظف کنه و ما از روش فوق برای به دست آوردن شماره آزاد استفاده کنیم دیگه شماره 5 هیچ وقت به کاربر پیشنهاد نمیشه .
قطعا هم نباید بشه چون دارین از auto numeric استفاده میکنین
(البته میشه در این شرایط هم خمچین کاری کرد شما یه سلکت تو در تو میزنین که خروجیش 1 رکورد باشه و عددی باشه که بیه id ها نباشه بعد با استفاده از دستور DBCC CHECKIDENT اون شماره رو اضافه میکنین)
نقل قول: 2 - کاربر به طور دستی شماره اشتراک رو وارد نکرده باشه ، مثلا کاربر به طور خود سر شماره 21 رو وارد کرده
و تا العان هم 20 تا رکورد تو جدول ثبت شده ، حالا اگه بر روی X کلیک کنه شماره 21 که قبلا ثبت شده به کاربر پیشنهاد میشه .
مهندس در حالت auto numer کاربر نمیتونه خودش مقدار بده بلکه خود sqlserver مقدار دهی میکنه و اگه شما مقدارتون Auto نباشه با استفاده از( select(max(id)+1 مقداری که پیشنهاد میشه 22 هست نه 21 چون بزرگترین عدد حال حاظر شما 21 هست
نقل قول: کلا روشی که mostafa_bahar گفت بهتر و جوابگو تره .
دوستان یادتون باشه من میخوام با زدن دکمه X اولین شماره آزاد به کاربر پیشنهاد بشه .
ممنون .
شما یه sp مینویسی که max id داخل بانک رو بگیره با یک select چک کنه اگه توشو یک مقدار خالی بود که اونو انتخاب کنه اگه نه مقدار max+1 رو به عنوان خروجی بده

(شما بهتره قبل از زدن پست یه تست میکردین)

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۱۵-مهر-۱۳۸۸, ۱۵:۱۸:۴۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : 1120
1120 آفلاین
در حال پیشرفت
***

ارسال‌ها: 313
موضوع‌ها: 49
تاریخ عضویت: دى ۱۳۸۷

تشکرها : 404
( 381 تشکر در 161 ارسال )
ارسال: #6
RE: درخواست راهنمایی برای به دست آوردن اولین کد آزاد !!!
نقل قول: اگر کسی از لیست حذف شد نباید کد اشتراکش به شخص دیگری داده شود

حامد جان میشه بگی چرا ؟

نقل قول: خیر من max یعنی بزرگترین عددی که موجود هست رو +1 میکنم نه اخرین

ببخشید منظورم همون بیشترین بود .
مشکلم حل شد . کد رو میزارم بقیه دوستان هم استفاده کنند .


کد:
Private Function LastFreemycode() As Long

Dim i As Long

Call OpenDataBase
    
rs.Open "SELECT mycode FROM Table1 ORDER BY mycode ASC", cn, adOpenStatic, adLockBatchOptimistic
      
If rs.RecordCount = 0 Then
  LastFreemycode = 1
  Call CloseDataBase
  Exit Function
End If
            
i = 1
While rs.EOF = False
If i <> rs.Fields("mycode").Value Then
LastFreemycode = i
Call CloseDataBase
Exit Function
End If
rs.MoveNext
i = i + 1
Wend

LastFreemycode = i
rs.Close

End Function

.

(آخرین ویرایش در این ارسال: ۱۵-مهر-۱۳۸۸, ۱۷:۲۵:۳۱، توسط 1120.)
۱۵-مهر-۱۳۸۸, ۱۷:۲۱:۲۸
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #7
RE: درخواست راهنمایی برای به دست آوردن اولین کد آزاد !!!
این راه حل برای تراکنشهای کم و رکوردهای پایین خوبه مثلا در رکوردها ی بالا و تعداد دفعات تکرار بالا انجام این کار به سیستم خیلی فشار میاره

همیشه روش های استاندارد بهتر و راحترن

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۱۵-مهر-۱۳۸۸, ۱۸:۱۱:۰۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : 1120
hamed_Arfaee آفلاین
مدیر بخش
*****

ارسال‌ها: 1,334
موضوع‌ها: 231
تاریخ عضویت: تير ۱۳۸۳

تشکرها : 1250
( 2634 تشکر در 730 ارسال )
ارسال: #8
RE: درخواست راهنمایی برای به دست آوردن اولین کد آزاد !!!
(۱۵-مهر-۱۳۸۸, ۱۷:۲۱:۲۸)1120 نوشته است: حامد جان میشه بگی چرا ؟
فرض کنید یک برنامه برای مدیریت یک کتابخانه نوشتید و اعضا رو به همین روش خودتون اضافه و حذف میکنین و مطمعنن یک لیست هم برای ثبت کتابهای عاریه دارین حالا اگر عضو شماره 4 کتاب شماره 8 رو امانت گرفته باشه و بعدا پس داده باشه و بعد چند روز حذف عضویت کرده باشه و شما یک کاربر جدید رو با کد 4 ثبت کرده باشین دیگه دسترسی به تاریخچه کاربر سخت میشه و بعضی مواقع غیر ممکن .

حالا اگه تاکید بر عدم استفاده از کلید یکتا هستید پس بهتره از روش پیشنهادی یک استفاده کنین یعنی محذوفات رو تو یه لیست ثبت کنین و یا حذف رو منطقی کنین تا بشه بعدا اونو رونویسی کرد .

در ضمن مطالعه این کتاب میتونه مفید باشه :
http://forum.iranled.com/attachment.php?aid=504

حامد ارفعی

موفقيت، پيش رفتن است، نه به نقطه ي پايان رسيدن.(آنتوني رابينز)


تریگرها در SQL server

آیا میدانید SQL ای
(آخرین ویرایش در این ارسال: ۱۵-مهر-۱۳۸۸, ۱۹:۱۳:۳۵، توسط hamed_Arfaee.)
۱۵-مهر-۱۳۸۸, ۱۹:۱۱:۲۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : 1120
shedayat آفلاین
كاربر دو ستاره
**

ارسال‌ها: 101
موضوع‌ها: 22
تاریخ عضویت: فروردین ۱۳۸۸

تشکرها : 62
( 51 تشکر در 38 ارسال )
ارسال: #9
RE: درخواست راهنمایی برای به دست آوردن اولین کد آزاد !!!
(۱۵-مهر-۱۳۸۸, ۱۷:۲۱:۲۸)1120 نوشته است:
نقل قول: اگر کسی از لیست حذف شد نباید کد اشتراکش به شخص دیگری داده شود

حامد جان میشه بگی چرا ؟

نقل قول: خیر من max یعنی بزرگترین عددی که موجود هست رو +1 میکنم نه اخرین

ببخشید منظورم همون بیشترین بود .
مشکلم حل شد . کد رو میزارم بقیه دوستان هم استفاده کنند .


کد:
Private Function LastFreemycode() As Long

Dim i As Long

Call OpenDataBase

rs.Open "SELECT mycode FROM Table1 ORDER BY mycode ASC", cn, adOpenStatic, adLockBatchOptimistic

If rs.RecordCount = 0 Then
LastFreemycode = 1
Call CloseDataBase
Exit Function
End If

i = 1
While rs.EOF = False
If i <> rs.Fields("mycode").Value Then
LastFreemycode = i
Call CloseDataBase
Exit Function
End If
rs.MoveNext
i = i + 1
Wend

LastFreemycode = i
rs.Close

End Function

.

به نظر من این کد می تونه بهتر باشه. حالا خودت نام Ado رو تغییر بده.

کد:
Ado.recordset.movelast
LastFreemycode=ado.recordset.fields("mycode") +1

...یادمان باشد که زنگ تفریح دنیا همیشگی نیست. زنگ بعد حساب داریم...
۱۷-مهر-۱۳۸۸, ۱۰:۰۵:۴۲
ارسال‌ها
پاسخ
تشکر شده توسط : 1120


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  راهنمایی در مورد tool tip تکست باکس drc0de 4 1,219 ۱۸-تير-۱۳۹۹, ۱۴:۴۷:۱۹
آخرین ارسال: drc0de
  بدست آوردن عین قسمت صحیح و اعشار mr91090 3 3,559 ۱۲-دى-۱۳۹۴, ۱۴:۵۲:۴۲
آخرین ارسال: sharin
  نیاز به راهنمایی درباره ارسال اطلاعات reza2010wf 2 3,830 ۲۶-شهریور-۱۳۹۴, ۱۱:۵۸:۰۷
آخرین ارسال: Ghoghnus
  [سوال] به دست آوردن ماکسیمم یا مینیمم مقدار یک رنج اکسل eppagh 3 4,164 ۰۹-دى-۱۳۹۳, ۱۵:۳۲:۳۷
آخرین ارسال: eppagh
  درخواست کد پرینت گراف در PictureBox برای VB6 javad917 11 9,818 ۱۲-تير-۱۳۹۳, ۱۳:۳۸:۱۳
آخرین ارسال: javad917
  سوال در مورد بدست آوردن سورس Hacker_2010 7 6,056 ۰۵-مرداد-۱۳۹۲, ۰۰:۵۴:۵۰
آخرین ارسال: babyy
  بدست آوردن مطالب وب javaweb 4 5,975 ۱۶-خرداد-۱۳۹۲, ۱۳:۲۷:۳۰
آخرین ارسال: javaweb
  راهنمایی برای اجرای دستورات پشت سر هم Rain_Saeid 2 3,507 ۱۰-خرداد-۱۳۹۲, ۱۲:۴۰:۴۲
آخرین ارسال: Rain_Saeid
  [سوال] راهنمایی در رابطه با چند دستور در VB6 Rain_Saeid 1 2,918 ۲۱-بهمن-۱۳۹۱, ۱۳:۵۰:۰۷
آخرین ارسال: Payman62
  تشخیص اولین کاراکتر در هر خط RAMA2009 9 7,577 ۱۹-دى-۱۳۹۱, ۰۳:۰۴:۵۰
آخرین ارسال: mahmoodgh

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS