سلام دوستان
من می خوام عددی بدست بیارم که تکرار توش نباشه بدین شرح که ربطی به ریکورد کانت من نداشته باشه و اگه عددی رو از دیتابیس قبلاً دیلیت کردم رو دوباره جایگزین کنه . مثلاً فرض کنید که من دارم یه برنامه حسابداری می نویسم که می خوام این خاصیت رو تو شماره فاکتور بزارم و اگه یه موقع شماره فاکتوری مثلاً پاک شد بتونه اونو جایگزین کنه . مثلاً طرف بیاد 160 تا ریکورد یا فاکتور وارد کنه بعدش بیاد فاکتور شماره 14 رو پاک کنه . می خوام وقتی ثبت جدید می خواد وارد کنه شماره 14 ی که پاک شده در رکورد 161 یعنی ثبت جدید وارد بشه . اگه راه حلی داره منو راهنمایی کنید.
دوستان حرفه ای شدیداً منتظر شما هستم
شماره فاكتور اولين ركورد ديتابيس رو بخون و يكي بهش اضافه كن. بعد سرچ كن ببين همچين شماره اي وجود داره
يا نه. اگه وجود نداشت كه هيچ وگرنه يكي ديگه بهش اضافه كن و سرچ كن ببين همچين شماره اي وجود داره يا نه و
الي آخر .... نهايتا مي تونيد كوچكترين شماره فاكتور در دسترس رو براي فاكتورتون انتخاب كنيد.
روش های زیادی وجود داره.
با مرتب سازی، بدون مرتب سازی، با جستجو، بدون جستجو
اگه قطعه کد رو متوجه نشدی اونوقت فایل ضمیمه رو دانلود کن.
کد:
Private Sub Command1_Click()
Dim RS As Recordset
Dim NewID As Long
Set RS = OpenDatabase("db1.mdb").OpenRecordset("Table1", dbOpenDynaset)
NewID = 1
If RS.RecordCount > 0 Then
RS.Sort = "ID"
Set RS = RS.OpenRecordset
While Not RS.EOF And NewID = RS.Fields!ID
RS.MoveNext
NewID = NewID + 1
Wend
End If
RS.Close
MsgBox NewID
End Sub
با فرض اینکه شماره های 3, 2, 1, 5, 6, 8 موجود هستند ابتدا جدول مرتب میشه و داده ها به صورت 1, 2, 3, 5, 6, 8 در میان.
می بینید که 4 و 7 غایب هستند.
با قطعه کد بالا عدد 4 به شما برگردونده میشه.
اگر عدد 4 به جدول اضافه بشه، بار بعد عدد 7 به شما برگردونده میشه.
میتونی این کار رو هم بکنی :
وقتی یه رکورد پاک میشه ، تو یه جا ، یه لیست تهیه کنی که رکورد های حذف شده رو ذخیره میکنه .
بعد هر وقت خواستی که یه رکود جدید بسازی ، اول به اون لیست مراجعه کنی ، اگر پر بود ، آخری رو بخونی و از لیست حذف کنی ، اگر هم خالی بود که یه شماره فاکتور جدید صادر کنی .
این روش بیشتر زمانی به کار میاد که دیتا بیس خیلی بزرگه و سرچ کردنش وقت گیره ...
سلام
اگر ميشه واسه جستجو كردن هم توضيح بديد
برای دیتابیس های تا نسبتا بزرگ فکر کنم هزینه جستحو خیلی بالا میره. به نظر من اصلا صرفه نداره اینکار. همون بزرگترین کد + 1 به صرفه تره.
(۱۶-آذر-۱۳۸۷, ۱۰:۵۹:۳۳)amirjan نوشته است: [ -> ]میتونی این کار رو هم بکنی :
وقتی یه رکورد پاک میشه ، تو یه جا ، یه لیست تهیه کنی که رکورد های حذف شده رو ذخیره میکنه .
بعد هر وقت خواستی که یه رکود جدید بسازی ، اول به اون لیست مراجعه کنی ، اگر پر بود ، آخری رو بخونی و از لیست حذف کنی ، اگر هم خالی بود که یه شماره فاکتور جدید صادر کنی .
این روش بیشتر زمانی به کار میاد که دیتا بیس خیلی بزرگه و سرچ کردنش وقت گیره ...
این روش منطقی تر به نظر میاد