PDA

View Full Version : تعيين اعداد جا افتاده در اتونامبر



behboodi2000
دوشنبه 16 آبان 1390, 07:55 صبح
با سلام خدمت كليه دوستان و اساتيد محترم
در يك برنامه در يكي از جدولها فيلد اتونامبري داريم كه از 100 شروع شده است در جدول بعضي از رديفها حذف شده است و درحال حاضر عدد اتونامبر به عدد 490 رسيده است . مي خواستم بپرسم آيا راهي وجود دارد كه با زدن يك دكمه ليستي از اعدادي كه حذف شده است را در اختيار ما قرار دهد . اين موضوع در يك برنامه حسابداري كه شماره اتونامبر شماره سند مي باشد خيلي مهم است . در صورت امكان راهنمائي بفرمائيد . باتشكر

Abbas Amiri
دوشنبه 16 آبان 1390, 15:19 عصر
باسلام ، می توانیدازفانکشن زیر استفاده کنید:



Function MissedID(tdfName As String, fldName As String)
Dim strSQL As String, k As Integer
Dim rs As DAO.Recordset
Dim ListOfID() As Integer, j As Integer
Set rs = CurrentDb.OpenRecordset(tdfName)
With rs
.MoveLast
.MoveFirst
k = rs.Fields(fldName)
For k = k To .RecordCount
If k <> .Fields(fldName) Then
ReDim Preserve ListOfID(j)
ListOfID(j) = k
j = j + 1
End If
.MoveNext
Next
.Close
End With
Set rs = Nothing
MissedID = ListOfID
End Function

behboodi2000
سه شنبه 17 آبان 1390, 17:05 عصر
با سلام در ابتدا ممنونم از اينكه به سوال من پاسخ داديد . خواهش مي كنم در صورت امكان نحوه استفاده از اين فانكشن را هم به من بگوئيد ( در كجاي برنامه و چگونه استفاده نمايم )

Abbas Amiri
سه شنبه 17 آبان 1390, 19:09 عصر
یک ماژول ایجاد و فانکشن فوق را در آن کپی کنید. فرض می کنیم نام جدولتان tblAccounts و نام فیلد اتونامبر ID است . در هرجای برنامه می توانید آن را به صورت زیر صدا بزنید:



Dim MissedNums() As Integer
Dim i As Integer, sSQL As String
MissedNums = MissedID("tblAccounts", "ID")
DoCmd.SetWarnings False
For i = 0 To UBound(MissedNums)
sSQL = "INSERT INTO tblAccounts (ID) VALUES(" & MissedNums(i) & ")"
DoCmd.RunSQL sSQL
Next
DoCmd.SetWarnings True



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

behboodi2000
جمعه 20 آبان 1390, 13:33 عصر
دوست عزيزم اول از اينكه پاسخ من را داديد خيلي ممنون هستم روش شما دقيقا همان بود كه مي خواستم ولي يك ايراد كوچك دارد و آن هم اينست كه اگر تعداد ركوردهاي حذف شده اتونامبر زياد باشد بايد چندين مرتبه كد فوق در كه يك دكمه نوشته شده است تكرار شود تا همه اعداد جا افتاده را برگرداند يعني سه يا چهار بار بايد دكمه را بزنيم در صورت امكان رهنمائي بفرمائيد ممنون

Abbas Amiri
جمعه 20 آبان 1390, 14:23 عصر
درسته فانکشن زیر را جایگزین اولی کنید:


Private Function MissedID(tdfName As String, fldName As String)
Dim strSQL As String, k As Integer
Dim rs As DAO.Recordset
Dim ListOfID() As Integer, j As Integer, LastID As Integer
LastID = DMax(fldName, tdfName)
Set rs = CurrentDb.OpenRecordset(tdfName)
With rs
.MoveLast
.MoveFirst
k = rs.Fields(fldName)
For k = k To LastID
Do While k < .Fields(fldName)
ReDim Preserve ListOfID(j)
ListOfID(j) = k
j = j + 1
k = k + 1
Loop
.MoveNext
Next
.Close
End With
Set rs = Nothing
MissedID = ListOfID
End Function

behboodi2000
سه شنبه 24 آبان 1390, 08:22 صبح
دوست عزيز سلام ممنون از پاسخ شما ولي زمانيكه فانكشن فوق را جايگزين قبلي مي كنم برنامه يك پيغام خطا مي دهد من نمونه برنامه را ضميمه مي كنم در صورت امكان اصلاح و راهنمائي بفرمائيد . ممنون

Abbas Amiri
سه شنبه 24 آبان 1390, 13:38 عصر
درابتدای کد فوق عبارت Private را به Public تغییردهید.

Abbas Amiri
سه شنبه 24 آبان 1390, 17:01 عصر
با تشکر ازتوضیحات بجای شما،
دلیل اطاله کلام فقط نحوه سوال جناب بهبودی بوده است چرا که از شماره 100 شروع شده بود واین تابع از شماره شروع سرچ می کند. درضمن ایشان ابتدا لیستی ازاین اعداد می خواستند .معذالک چون خودمن اصرار به ماژوله کردن برنامه ها دارم برای هرکاری جداگانه تابع یا پروسیجر می نویسم.