PDA

View Full Version : سوال: چگونه میشود یک تکس باکس رو که عددی در آن قرار دارد را رند کرد؟



145451159
چهارشنبه 03 دی 1399, 17:48 عصر
چگونه میشود یک تکس باکس رو که عددی در آن قرار دارد را گرد کرد؟
منظورم اعشاری نیست
مثلا:

عدد24,633رو برام این مقدار نشون بده ------->25,000
لطفا راهنمایی کنید

mazoolagh
چهارشنبه 03 دی 1399, 18:22 عصر
برای round کردن عدد صحیح چند چیز باید مشخص باشه:
1- نوع رند کردن: به بالا، به پایین، به نزدیکترین
2- مقدار رند: به 10، به 100، به 1000 و ....

145451159
چهارشنبه 03 دی 1399, 18:55 عصر
نوع رند کردن:به نزدیکترین
مقدار رند:10000 معادل ده هزار

padide55
چهارشنبه 03 دی 1399, 21:40 عصر
سلام
در فیلد مربوطه اگر میشه کلیک کرد در رویداد exit
و یا در یک باتن جدید .
این کد رو مطابق مثال وارد کنید .

مثال روند کردن (http://www.vbaexpress.com/kb/default.php?action=13&kb_id=424)

145451159
چهارشنبه 03 دی 1399, 22:13 عصر
این مد نظرم نیست می خوام تو همون فیلد رند کنه تازه این خصوصیات رو نداره:

نوع رند کردن:به نزدیکترین
مقدار رند:10000 معادل ده هزار
مثلا:

عدد24,633رو برام این مقدار نشون بده ------->25,000
لطفا راهنمایی کنید

145451159
چهارشنبه 03 دی 1399, 22:16 عصر
میشه با این خصوصیات یک فایل نمونه برام بفرستید

the king
چهارشنبه 03 دی 1399, 22:22 عصر
چگونه میشود یک تکس باکس رو که عددی در آن قرار دارد را گرد کرد؟
منظورم اعشاری نیست
مثلا:

عدد24,633رو برام این مقدار نشون بده ------->25,000
لطفا راهنمایی کنید


Text1.Text = Round(Val(Text1.Text) / 1000) * 1000

145451159
چهارشنبه 03 دی 1399, 22:34 عصر
میشه راهنمایی کنید این کد رو باید کجا بذارم

145451159
چهارشنبه 03 دی 1399, 22:38 عصر
نمیدونم کد رو باید چکار کنم و کجا بذارم

145451159
چهارشنبه 03 دی 1399, 22:45 عصر
هستید ولی چرا جواب نمیدید خدا میدونه

padide55
چهارشنبه 03 دی 1399, 23:09 عصر
وقتی سوال مبهم باشه جوابش هم مشکله.
سوال اسونه ولی معلوم نیست این عدد ازکجا اومده و چرا در ورود پاکسازی دیتا انجام نشده .که همونجا رند بشه .

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

فرض کنید میرید به یک اداره .
اول با خودرو میروید .
اگر همونجا بروید به سالن ورودی محل کار ممکنه مناسب نباشه.
باید بعد از رسیدن و قبل از ورود به اداره مرتب باشید .
در ورود اول یک نگاه به اینه میندازین و یا خاک کفشتون رو‌پاک میکنید .
پاکسازی دیتای مورد لزوم به صورتی که مد نظر باشه .همونجا انجام میشه ‌که محاسبه قبلی تمام شده .
ویا
یک باتن بگذارید که با زدن ان .کد عمل کنه و دیتا اصلاح‌بشه. مثل پولیش کفش بعد از ورود .
نمونه بگذارید .

145451159
چهارشنبه 03 دی 1399, 23:34 عصر
نمونه (https://s16.picofile.com/file/8418658900/BN_accdb.html)
در فایل توضیحات لازم رو دادم

145451159
پنج شنبه 04 دی 1399, 00:06 صبح
چگونه همون اول رندش کنم اگه بشه عالی میشه

145451159
پنج شنبه 04 دی 1399, 00:07 صبح
فکر می کردم توی تیبل نمی شه بخاطر همین سوال رو اینجوری طرح کردم

padide55
پنج شنبه 04 دی 1399, 00:10 صبح
ببخشید .
دارم با گوشی جواب میدم .
فردا فایلتون رو ببینم .
ولی فعلا
هر جا اخرین محاسبه میشینه به اون فیلد .
کد اخر رو داخل پرانتز این کد بگذارید.و جایگزین کد قبلی کنید


txtme=Round(Val(mycode)

textme همون فیلدی هست که با اون مشکل دارید.

یعنی پولیش بشه .
رند بشه و بعد ذخیره بشه داخل فیلد مربوطه

145451159
پنج شنبه 04 دی 1399, 00:11 صبح
پس راهنمایی کنید توی تیبل چطوری میشه رند کرد

padide55
پنج شنبه 04 دی 1399, 00:14 صبح
داخل تیبل سخته .
چون باید کدی ایجاد کنید که رکورد به رکورد بره و تا اخر همه رو رند کنه . و باز هم این کد رو باید داخل یک باتن در فرم قرار بدین .

فقط در تیبل کل فیلد رو با هم در محدوده تعیین شده رند میکنه .

بهترین جا در زمان محاسبه هست و یا داخل فرم .

..........
روش سومی هم هست
اگر با انواع کوئری اشنایی دارید
میشه یک کوئری از نوع اپدیت هم ساخت که محدوده مورد نظر رو به صورت کد جدید اصلاح کنه.
در قسمت update to
زیر فیلد مورد نظر fieldname
کد


=Round(Val(fieldname) / 1000) * 1000

145451159
پنج شنبه 04 دی 1399, 00:16 صبح
اون کدی که الان دادید رو میشه بیشتر راهنمایی کنید

145451159
پنج شنبه 04 دی 1399, 00:16 صبح
خوب متوجه منظورتون نشدم

padide55
پنج شنبه 04 دی 1399, 00:26 صبح
ببخشید .چون با کوئری ها اشنایی ندارید بی خیال بشید .
و یا برید سرچ کنید
update query in ms access
مبحث اسونیه ولی توضیحش نیاز به تصویر و فیلم داره .
راهنمایی
یک کوئری درست کنیدو فقط فیلد مورد نظر رو انتخاب کنید . شامل فقط فیلد مورد نظر‌
بقیه دیتا رو اینجا لازم نداریم .اگر هم همه باشند مشکلی نیست .

بعد درمحیط ویرایش کوئری
در نوار ریبون بالا
انواع کوئری شامل
maktable
crostab
append
delet
و
update داریم . که این اخری مورد نظر ماست.
اون رو‌که انتخاب کنید .
در پایین یک ردیف ایجاد میشه .
update to
تغییر مورد نیاز رو با کد بنویسید .
کوئری که اجرا بشه .کل اون فیلد تغییر میکنه .

فایلتون رو بک اپ بگیرید .
سپس تلاش کنید .موفق میشین .

145451159
پنج شنبه 04 دی 1399, 00:32 صبح
فهمیدم ممنون البته ممنون میشم فردا فایل نمونه ی من رو رند کنید بدید چون احتمالا نتونم

145451159
پنج شنبه 04 دی 1399, 00:32 صبح
فعلا شب بخیر تا فردا

145451159
پنج شنبه 04 دی 1399, 00:33 صبح
ممنون از کمکتون

eb_1345
پنج شنبه 04 دی 1399, 00:50 صبح
از تابعی که در قسمت ماژول فرم است استفاده کنید
شما باید مشخص کنید که عدد تاچه رقمی باید رند شود تا رقم دهگان ، صدگان ، هزارگان .......
برای رند کردن عدد 24327 یعنی باید 3 رقم سمت راست صفر شود و رقم بعدی بطرف بالا رند شود





Function roundUp(dValue As Double, digits)
roundUp = Round(dValue / (10 ^ digits) + 0.5) * (10 ^ digits)
End Function


برای تبدیل عدد 24327 به 25000 باید تابع را بصورت زیر فراخوانی کنید :
X=roundUp(Adad, digits)

که بجای Adad عدد را وارد می کنید وبجای digits تعداد رقم هائی که باید صفر شوند
در نمونه شما تابع را در همون قسمت کنترل سورس فیلد بصورت زیر وارد کرده ام:


=roundUp(([a]+[b]);3)

145451159
پنج شنبه 04 دی 1399, 10:21 صبح
سلام به جواب رسیدم دستتون درد نکنه
یک سوال دیگه هم دارم می خوام از یک فرم پرینت بگیرم ریپرت رو امتحان کردم نمیشه از فرمم هم که نمیشه کوئری درست کنم موندم چطوری پرینت کنم
نوع فرممDatasheet هست لطفا راهنمایی کنید

eb_1345
پنج شنبه 04 دی 1399, 11:41 صبح
سلام به جواب رسیدم دستتون درد نکنه
یک سوال دیگه هم دارم می خوام از یک فرم پرینت بگیرم ریپرت رو امتحان کردم نمیشه از فرمم هم که نمیشه کوئری درست کنم موندم چطوری پرینت کنم
نوع فرممDatasheet هست لطفا راهنمایی کنید



به دو صورت میتوانید از فرمت که در حالت Datasheet است پرینت بگیرید
1 - غیر مستقیم از طریق فرمی دیگر با دستور باز کردن ، انتخاب و چاپ فرم مورد نظر
2- مستقیم با استفاده از فشار یک کلید از کیبورد برای چاپ فرم

کد مثال اول : فرض می کنیم فرم جاری شما در حال حاضر form1 باشد و بر روی آن کمند باتنی برای چاپ فرم 2 ایجاد کرده اید .در رویداد این کلیک این کمند باتن کدهای زیر را وارد می کنید


DoCmd.OpenForm "form2", acPreview
DoCmd.SelectObject acForm, "form2", True
Forms("form2").Printer.Orientation = acPRORLandscape
DoCmd.PrintOut

در خط سوم فرض کرده ام میخواهید فرم را درحالت Landscape باز کنید
و برای حالت دوم هم میتوانید کد زیر را در رویداد Form_KeyDown فرمی که در حالت دیتاشیت است وارد کنید و کلید p را فشار دهید
دقت کن در این حالت خصوصیت key preview فرم در حالت yes باشد




Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
On Error Resume Next
If KeyCode = 80 Then
Forms("form2").Printer.Orientation = acPRORLandscape
DoCmd.PrintOut
End If
End Sub