PDA

View Full Version : اضافه کردن 0 به فیلد



Profesorjd
سه شنبه 16 مرداد 1386, 20:58 عصر
با سلام خدمت اساتید گرامی
در یک برنامه پرسنلی فیلد کد کارکنان را عددی ساخته بودم که طبیعتاً صفرهای قبل از عدد را نمی گرفت بعد از مدت مدیدی نیاز به انتخاب کد کارکنان بصورت کامل( با صفرها ) پیش آمده که مشکل شروع شده است ! چطوری میشود صفرها را قرار داد ؟
توضیح اینکه فیلد تبدیل به تکست شد که مشکل رفع شود و اعداد 10 رقمی باید باشند و از 4 رقم دارم تا خود 10 رقم مثلاً 0000001234 تا 1234567890 . در روش قبلی شماره اول را 1234 ثبت کرده است که باید 6 صفر ناقابل قبلش بگذارم ؟!! ( البته تعداد صفر گذاری متنوع است !!)
ضمناً‌ رکوردها زیاد هستند و حجم فایل زیاد و نمیشد آپلود کنم !

cybercoder
سه شنبه 16 مرداد 1386, 21:05 عصر
یک Query برای Update بنویس

مهدی قربانی
چهارشنبه 17 مرداد 1386, 07:56 صبح
سلام
در قسمت Update To یک کوئری update این عبارت رو اضافه کنید :
p_num نام فرضی فیلد شماره پرسنلی است .


IIf(Len([p_num])=4;"000000" & [p_num];IIf(Len([p_num])=5;"00000" & [p_num];IIf(Len([p_num])=6;"0000" & [p_num];IIf(Len([p_num])=7;"000" & [p_num];IIf(Len([p_num])=8;"00" & [p_num];IIf(Len([p_num])=9;"0" & [p_num];[p_num]))))))

karmand
چهارشنبه 17 مرداد 1386, 08:19 صبح
یک فرم با یک باتن در on click باتن در یک for next
dim mylen as integr
dim tedadsefr as integer
dim lensefr as string
for n = 1 to tedad_record
mylen=len(field)
tedadsefr=10-mylen
for m = 1 to tedadsefr
lensefr=lensefr&"0"
next
field=lensefr & lensefr
docmd.gotorecord , , acnext
next
البته میشود در فور دومی خود فیلد را هر مرتبه با یک صفر جمع کنی

o_panjeshahi
چهارشنبه 17 مرداد 1386, 16:52 عصر
update کن با دستور
("format("fieldname";"0000000000 در کوئری

Profesorjd
چهارشنبه 17 مرداد 1386, 21:48 عصر
آقا مهدی ! با تشکر ممنون کار انجام شد . ولی بطور کلی راه حل ساده تری نیست ؟

Profesorjd
چهارشنبه 17 مرداد 1386, 21:50 عصر
یک فرم با یک باتن در on click باتن در یک for next
dim mylen as integr
dim tedadsefr as integer
dim lensefr as string
for n = 1 to tedad_record
mylen=len(field)
tedadsefr=10-mylen
for m = 1 to tedadsefr
lensefr=lensefr&"0"
next
field=lensefr & lensefr
docmd.gotorecord , , acnext
next
البته میشود در فور دومی خود فیلد را هر مرتبه با یک صفر جمع کنی


با تشکر . ولی این کد که ترسیدم عمل کنم ! بنظرم صفر را جایگزین عدد کند !
البته فکر کنم ترتیب کد نویسی کمی بهم خورده باشد !

مهدی قربانی
پنج شنبه 18 مرداد 1386, 00:49 صبح
ولی بطور کلی راه حل ساده تری نیست ؟

دوست عزیز فکر می کنم با توجه به اینکه شما فقط با استفاده از توابع IIf و Len شکل و فرمت مورد نظر رو پیاده می کنید این راه ساده ترین روش باشه ( البته به نظر حقیر ) .
موفق باشید .

Profesorjd
پنج شنبه 18 مرداد 1386, 13:27 عصر
دوست عزیز فکر می کنم با توجه به اینکه شما فقط با استفاده از توابع IIf و Len شکل و فرمت مورد نظر رو پیاده می کنید این راه ساده ترین روش باشه ( البته به نظر حقیر ) .
موفق باشید .


گرامی این کد شما را تستی عمل کردم شد ولی در عمل انجام نمی‌دهد . برای اینکار من یک کوئری ساختم و کد فوق را در آن نهادم میدانید جواب چه بود ؟! فقط کدهای پرسنلی 10 رقمی را آورد و عملاً نشد . بنا براین گفتم راه حل ساده‌تری هست که بشود عملاً انجام داد ؟
من میخواهم صفر را قبل از اعداد بگذارد بطوریکه همه آنها 10 رقمی شوند . مانند 1234 که بشود 0000001234 که نشد .
بازهم بابت زحمتی که کشده‌اید تشکر میکنم .

مهدی قربانی
پنج شنبه 18 مرداد 1386, 14:04 عصر
ولی من همین روش رو شبیه سازی کردم جواب داد به هر حال اگر بتونید نمونه برنامه رو بذارید بهتر میشه بررسی کرد و احیاناً مشکل رو برطرف کرد .

Profesorjd
پنج شنبه 18 مرداد 1386, 20:03 عصر
با سلام . چون حجم دیتای اصلی بسیار زیاد است یک نمونه ساده گذاشتم .

مهدی قربانی
جمعه 19 مرداد 1386, 00:42 صبح
سلام مجدد
در نمونه برنامه شما 2 جدول ایجاد شده که هر کدوم به کوئری متناظرش مرتبط شده ( 1 کوئری که ارقام رو تبدیل و کوئری دوم همون فیلد a رو آپدیت می کنه و هر دو باشرط مشترک اعداد از 1 تا 9 رقم عمل می کنن ) و فرمی که به table2‌ مرتبطه و با کامند باتون اقدام به اجرای کوئری آپدیت می کنه . نمونه رو ببینید اگر مشکلی بود من در خدمتم .

Profesorjd
جمعه 19 مرداد 1386, 12:53 عصر
سلام و تشکر
اشتباه از من بود . من اول از append استفاده کردم و بعد هم Update شرطی !! که جواب آن بود که عرض کردم . ببخشید بیسوادی من بود نه راه حل شما

مهدی قربانی
جمعه 19 مرداد 1386, 13:22 عصر
قابلی نداشت ، این اشتباهات برای همه ما پیش میاد و مهم اینه که تبدیل میشه به تجربه
موفق باشید .

Profesorjd
یک شنبه 21 مرداد 1386, 20:23 عصر
با سلام مجدد
از آنجا که سئوالم را در رابطه با راه‌حل ساده کسی جواب نداد! خودم جواب میدهم !!
میتوان از تابع Mid هم استفاده کرد :
Mid(100000000000 + [FieldName] ;2,8 مثلاً در رابطه با سوال خودم

مهدی قربانی
دوشنبه 22 مرداد 1386, 00:44 صبح
با سلام مجدد
از آنجا که سئوالم را در رابطه با راه‌حل ساده کسی جواب نداد! خودم جواب میدهم !!
میتوان از تابع Mid هم استفاده کرد :
Mid(100000000000 + [FieldName] ;2,8 مثلاً در رابطه با سوال خودم

سلام
متوجه منظور شما نشدم این تابع چه کاری انجام میده من که تست می کنم جواب درستی نمی گیرم ( روی نمونه آخری )؟

Profesorjd
سه شنبه 23 مرداد 1386, 22:56 عصر
سلام
ببخشید عدد آخر 10 است ! این تابع عدد ( 10000000000 ) را با اعداد درون فیلد جمع میکند ( کار سخت!!) و از عدد دوم (10) به بعد نمایش میدهد ( یا آپدیت میکند ) میشود همان فرمولی که شما قید کرده‌اید ولی با ضریب اطمینان کمتر و ساده تر . البته من تست کردم 90% درست بود فقط نمیدانم شاید تابع نویسی من اشتباه است که عدد 10 رقمی که آخرش 0 است 0 را حذف میکند !

مهدی قربانی
سه شنبه 23 مرداد 1386, 23:28 عصر
سلام
اینطوری برای 10 رقم جواب میده و صفر رو هم حذف نمی کنه (100 % )



Mid(10000000000+[field name];2)

Profesorjd
سه شنبه 23 مرداد 1386, 23:40 عصر
آقا بدجوری ما را مجذوب کردی ! حالا که نتیجه گرفته شد ( نمیدونم من فقط این حس رو دارم یا اینکه این تاپیک شده دو نفره!!!) یه فرمول کلی برای اعداد دو رقمی تا .... وجود دارد ؟ چرا این سئوال شد ؟!! برای اینکه از دو رقمی تا 10 رقمی با کم کردن تعداد 0 عدد بزرگه مشکل حل میشه حالا برای اعداد بزرگتر هم با اضافه کردن 0 مشکل رفع میشه ؟!!! یا باید با آرگومانهای تابع بازی کرد ؟

مهدی قربانی
چهارشنبه 24 مرداد 1386, 09:23 صبح
من که تست کردم جواب داد

o_panjeshahi
چهارشنبه 24 مرداد 1386, 18:45 عصر
من که نفهمیدم دستور فرمت من چش بود که را دور رفتید؟

مهدی قربانی
چهارشنبه 24 مرداد 1386, 20:49 عصر
دوست عزیز معذرت ، من به روش شما دقت نکرده بودم . این تابع هم می تونه خواسته دوستمون profesorjd رو تامین کنه و البته از ساده ترین راه . ممنون

Profesorjd
چهارشنبه 24 مرداد 1386, 22:51 عصر
سلام
عزیزان ! فکر کنم عنوان این فروم مسائل مربوط به اکسس باشد . میشود با کمک به یکدیگر کار با اکسس را یاد گرفت . ولی آیا میشود فقط از یک راه حرکت کرد ؟ پس برای حل مسئله یا مشکل هر شخص راه حلهایی را بیان کرد و نتیجه گرفت . البته برای مشکل بنده 3 راه حل پیشنهاد شد که من از راه حل آقامهدی استفاده کردم و چون راه چهارمی که خودم پیشنهاد کردم تقریباً از یک روش بود خواستم به جواب ایشان نزدیکتر شوم . دروغ چرا من دو راه حل دیگر را نه انجام دادم و نه بلد هستم که انجام دهم !؟ بازهم هم از همه دوستان که من حاج آقا !!!!!! را راهنمایی کردند بسیار بسیار متشکرم !