PDA

View Full Version : درج رکورد کلید اصلی(غیر autonumber) بدون دخالت کاربر



قله بلند
چهارشنبه 29 اسفند 1386, 23:21 عصر
با سلام و تبریک سال نو و تشکر از پاسخ گویی شما عزیزان
می خواهم کلید اصلی هر جدول را وقتی که کاربر در حال درج رکوردی می باشد ، از طریق فراخوانی ماکرو و یا کدی در هنگام کلیک روی یک دکمه ، درج کنم و در واقع ، درج این رکورد را از کاربر بگیرم تا امنیت و جامعیت داده ها حفظ شود.
لطفا کد زیر را ملاحظه کنید و به من بگویید مشکل کار کجاست که خطا صادر می شود.
عمل برنامه:
وقتی فرم باز می شود ، ماکرویی به طور خودکار اجرا می شود و فوکوس را روی اولین رکورد جدول مزبور می آورد و بدین طریق x مقدار اولیه می گیرد.
y برابر یک قرار داده می شود و درون حلقه اگر x با y برابر باشد ، آنقدر حلقه ادامه می یابد تا به یک نابرابری برسیم و یا اینکه از حلقه خارج شویم.
بیرون حلقه ، به رکورد جدید می رویم و y را درون رکورد جدید درج می کنیم.
درج رکوردهای بعدی به عهده کاربر است.
و اما یک سوال دیگر:
اصولا انجام این کار مطلوب است ؟
و اما نکته آخر:
من نمی خواهم از autonumber ها استفاده کنم


اصل کد نوشته شده:


Option Compare Database
Private Sub Command3_Click()
Dim x As Integer
Dim y As Integer
x = Me.radif_shy = 1
'DoDo While x <> 0
If x = y Then
y = y + 1
DoCmd.RunMacro (M)
Else
Exit Do
End If
Loop
Loop Until x <> 0
DoCmd.RunMacro (M7)
Me.radif_sh = y
End Sub

hoshy345
پنج شنبه 01 فروردین 1387, 13:05 عصر
ضمن عرض سلام وتبریک سال نو به شمادوست عزیز
فکر کنم این کد کار شما رو راه بندازه

Dim rs As Object
Set rs = Me.Recordset.Clone
If rs.BOF Then
Me!Radif = 1
ElseIf rs.EOF Or Not Me.NewRecord Then
' هیچ عملیاتی انجام نشود'
Else
With rs

.MoveLast


Me![Radif] = .Fields("Radif") + 1

End With

End If

قله بلند
پنج شنبه 01 فروردین 1387, 21:56 عصر
با عرض سلام
کد ارسالی شما را استفاده خواهم کرد ولی همین کد را وقتی کمی تغییر دادم ، جواب داد. تغییرات را در همین نوشته قرار می دهم ، امیدوارم مفید فایده باشد.
باز هم از توجه تان سپاسگزارم

Private Sub Command4_Click()
Dim x As Integer
Dim y As Integer
x = Me.radif_sh
y = 1
Do
Do While x <> 0
If x = y Then
y = y + 1
DoCmd.GoToRecord , , acNext
x = Me.radif_sh
Else
Exit Do
End If
Loop
Loop Until y <> x
DoCmd.GoToRecord , , acNewRec
Me.radif_sh = y
End Sub

البته باید عرض کنم که هنگام باز شدن فرم و در رویداد on open فرم ، از ماکرویی برای شروع از اوین رکورد استفاده کردم .

saman_itc
جمعه 02 فروردین 1387, 15:48 عصر
از اونجایی که که autonamber انقدر اذیت می کنه.بهترین کار همین autoumber دستی من کد vb.net نوشتم.هر سری بیشترین مقدار میگیرم و +1 میکنم و نشون میدم.کاربر اگه دوست داشت می تونه تغییر بده و اگه تکراری باشه رکور ثبت نمیشه

قله بلند
شنبه 03 فروردین 1387, 00:28 صبح
با عرض سلام و تبریک سال نو
پاسخ شما همراهان گرامی به این مورد دارای یک ایده است و به آخرین رکورد یکی اضافه می کند و به عنوان ردیف(در اینجا کلید اصلی است) رکورد جدید درج می کند(البته بدون دخالت کاربر) ولی در کدی که من به آن رسیدم ، علاوه بر این ایده ، کار دیگری هم انجام میدهد بدین صورت که اگر ردیف های حال حاضر جدول پایگاه داده شما دارای شماره های 1 و3و4و... باشد ، تابع ابتدا عدد 2 را به عنوان رکورد جدید درج می کند و جاهای خالی را پر می کند و اگر جاهای خالی را نیافت ، به آخرین رکورد یکی اضافه کرده و به عنوان ردیف رکورد جدید درج می کند.
از راهنمایی شما بسیار سپاسگزارم

saman_itc
یک شنبه 04 فروردین 1387, 03:17 صبح
این طوری ترتیب واقعی از بین میره.
البته نظر من اینه
دست کاربر بازه

قله بلند
یک شنبه 04 فروردین 1387, 11:38 صبح
این طوری ترتیب واقعی از بین میره.
البته نظر من اینه
دست کاربر بازه


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