PDA

View Full Version : مبتدی: کپی اطلاعات پیش فرض از آخرین رکورد و ثبت آن در رکورد جدید



Nader700
یک شنبه 20 اسفند 1402, 22:01 عصر
سلام به همه اساتید محترم
من یک فایل نمونه به پیوست خدمتتون ارسال می کنم ممنون میشم اگه بنده رو راهنمایی یا فایل نمونه رو اصلاح کنید
سوال من اینه که من یک فرم ثبت اطلاعات دارم که به عنوان مثال اسم 3 تا کاربر رو وارد کردم . من میخوام با زدن دکمه افزودن مخاطب جدید از اطلاعات آخرین رکورد وارده شده من که به اسم (رضا خسروی ) هست یک کپی بگیره و به عنوان پیش فرض در رکورد جدید من ثبت کنه . من میخوام این اتفاق هر بار که دکمه افزودن رو میزنم از آخرین رکورد کپی و در رکورد جدید من ثبت بشه
با تشکر

reza_1199
یک شنبه 20 اسفند 1402, 22:48 عصر
سلام و شب خوش
یه تکست باکس در فرمت بضورت unbound قرار بده (text18) و در خاصیت control source اون اینو بنویس جهت استخراج آخرین شماره
= DMax("id", "tbln")
بعد یه کامند باتن روی فرمت قرار بده به فرض بنام افزودن cmd1 با شرط اینکه نام فرمت همون frm2 هست
Private Sub cmd1_Click()


DoCmd.GoToRecord , , acNewRec




Forms!frm2!name = DLookup("name", "tbln", "id=forms!frm2!text18")
Forms!frm2!famili = DLookup("famili", "tbln", "id=forms!frm2!text18")
End Sub

Nader700
دوشنبه 21 اسفند 1402, 00:05 صبح
سلام و شب خوش
یه تکست باکس در فرمت بضورت unbound قرار بده (text18) و در خاصیت control source اون اینو بنویس جهت استخراج آخرین شماره
= DMax("id", "tbln")
بعد یه کامند باتن روی فرمت قرار بده به فرض بنام افزودن cmd1 با شرط اینکه نام فرمت همون frm2 هست
Private Sub cmd1_Click()


DoCmd.GoToRecord , , acNewRec




Forms!frm2!name = DLookup("name", "tbln", "id=forms!frm2!text18")
Forms!frm2!famili = DLookup("famili", "tbln", "id=forms!frm2!text18")
End Sub

سلام ممنون و سپاسگزارم از شما دوست عزیز
من یک نکته بگم اونم اینکه من این یک فایل نمونه هست و فایل اصلی من نیست . تعداد فیلدهای من زیاد هستن آیا راه دیگه وجود داره ؟ یا باید برای تک تک فیلد ها کد رو تکرار کنم ؟

من یک مشکل دیگه داخل برنامه دارم اینه که در قسمت control source هر کدی که بخوام بنویسم ارور میده الان من کد شما DMax("id", "tbln")= رو نوشتم به من ارور زیر رو نشون میده شما میدونید مشکلش چیه ؟
155496


بعد من کد رو دوباره تغییر دادم و یک پیغام دیگه به من نمایش داد
155497

ممنون میشم اگه راهنمایی کنید من این مشکل رو در کل برنامه دارم و اصلا هر کدی مینویسم این مشکل رو دارم. میشه کد رو بصورت ماژول بنویسم و به تکس باکس اضافه کنم ؟

reza_1199
دوشنبه 21 اسفند 1402, 06:50 صبح
سلام . کد نوشته شده در کنترل سورس تکست باکس رو بعد از کد newrecord دستور کامند باتن بنویس و کنترل سورس رو پاک کن
Me.text18=dmax("id","tbln") اگه خطا داد بجای me.text18 بنویس
Forms!frm2!text18
ببین جواب میده

eb_1345
دوشنبه 21 اسفند 1402, 09:31 صبح
سلام به همه اساتید محترم
من یک فایل نمونه به پیوست خدمتتون ارسال می کنم ممنون میشم اگه بنده رو راهنمایی یا فایل نمونه رو اصلاح کنید
سوال من اینه که من یک فرم ثبت اطلاعات دارم که به عنوان مثال اسم 3 تا کاربر رو وارد کردم . من میخوام با زدن دکمه افزودن مخاطب جدید از اطلاعات آخرین رکورد وارده شده من که به اسم (رضا خسروی ) هست یک کپی بگیره و به عنوان پیش فرض در رکورد جدید من ثبت کنه . من میخوام این اتفاق هر بار که دکمه افزودن رو میزنم از آخرین رکورد کپی و در رکورد جدید من ثبت بشه
با تشکر
سلام
بهتره از کدهای زیر در رویداد کلیک کمند باتن افزودن مخاطب جدید استفاده کنی :


On Error Resume Next
Dim ctl As Control
DoCmd.GoToRecord , , acLast
For Each ctl In Me.Controls
If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
ctl.Tag = ctl.value
End If
Next ctl
DoCmd.GoToRecord , , acNewRec
For Each ctl In Me.Controls
If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
ctl.value = ctl.Tag
End If
Next ctl

همونطور که می بینی در این کدها در حلقه اول For Each مقدار یا ارزش تمام کنترل های درج شده بر روی فرم که از نوع TextBox یا ComboBoxمیباشند در خصوصیت Tag این کنترل قرار می گیرند بعد از اتمام عملیات حلقه اول عمل افزودن رکورد جدید صورت میگیرد . در مرحله بعد یا در حلقه دوم For Each باید عکس چرخه اول صورت بگیرد، یعنی باید مقدار درج شده در خصوصیت Tag کنترل های فوق برابر با مقدار ارزش آنها شود
ضمنا بنده در این کدها فرض را بر این گذاشته ام که بروی فرم از کنترل کمبوباکس هم استفاده می کنی و اگر مطمئن هستین که از این کنترل استفاده نمی کنین میتوانی Or ctl.ControlType = acComboBox را از کدهای فوق حذف کنین
یا علی

mazoolagh
سه شنبه 22 اسفند 1402, 11:39 صبح
سلام جناب بهرامی و روز شما خوش

اینجور به نظر میرسه که دوستمون در نظر داره دیتا آخرین رکورد با توجه به اسم مشخص شده رو بگیره،
یعنی الزاما آخرین رکورد جدول نیست - اگر اینجور باشه یک ویرایش کوچیک نیاز هست.

و این که لطفا کنترل های از نوع checkbox و listbox رو هم در نظر بگیرین.

eb_1345
سه شنبه 22 اسفند 1402, 12:49 عصر
سلام جناب بهرامی و روز شما خوش

اینجور به نظر میرسه که دوستمون در نظر داره دیتا آخرین رکورد با توجه به اسم مشخص شده رو بگیره،
یعنی الزاما آخرین رکورد جدول نیست - اگر اینجور باشه یک ویرایش کوچیک نیاز هست.

و این که لطفا کنترل های از نوع checkbox و listbox رو هم در نظر بگیرین.

من میخوام این اتفاق هر بار که دکمه افزودن رو میزنم از آخرین رکورد کپی و در رکورد جدید من ثبت بشه
با تشکر


سلام و روز شما هم خوش استاد !
اگر چنین باشه که شما میفرمائید پس لزومی به درج دستور DoCmd.GoToRecord , , acLast در ابتدای کدها نیست.
در خصوص در نظر گرفتن کنترل های از نوع checkbox و listbox هم ببینیم دوستمون چه نظری دارند .

Nader700
سه شنبه 22 اسفند 1402, 23:23 عصر
سلام و روز شما هم خوش استاد !
اگر چنین باشه که شما میفرمائید پس لزومی به درج دستور DoCmd.GoToRecord , , acLast در ابتدای کدها نیست.
در خصوص در نظر گرفتن کنترل های از نوع checkbox و listbox هم ببینیم دوستمون چه نظری دارند .

سلام و عرض ادب خدمت اساتید محترم
استاد بهرامی عزیز در خصوص در نظر گرفتن کنترل های از نوع checkbox و listbox هم اگه راهنمایی بفرمایید که کدها رو چطوری تغییر بدم ممنون و سپاسگزار میشم چون روی فرم از اونها هم استفاده شده .

در ضمن اگه پست آخر تاپیک کمک فوری (سوال تخصصی) رو چک بفرمایید یه دنیا ممنون میشم .

moustafa
جمعه 25 اسفند 1402, 15:30 عصر
DoCmd.GoToRecord , , acLast

t1=me.texbox1
...................
DoCmd.GoToRecord , , acNew
me.textbox1=t1

mazoolagh
شنبه 26 اسفند 1402, 18:28 عصر
DoCmd.GoToRecord , , acLast

t1=me.texbox1
...................
DoCmd.GoToRecord , , acNew
me.textbox1=t1

چون تعداد فیلدهای فرم زیاد هست (طبق گفته استارتر تاپیک در پست 3)،
به حلقه (مشابه آنچه در پست 5 آمده) نیاز هست - البته شاید فقط یک حلقه کافی باشه.