View Full Version : چگونگی چک کردن قابل تبدیل بودن یک رشته توسط strtodate به نوع date؟
oghab
یک شنبه 24 مهر 1384, 13:03 عصر
سلام
اگه من یه edit داشته باشم و بخواهم یه تاریخ مثلا تاریخ تولد را توش بنویسم و بعد به یه متغیر که از نوع Tdate تعریف کردم نسبت بدم. تا اینجاش که مشکلی نداره.
حالا اگه تاریخی که تو edit وارد میشه از نظر کاراکتری درست نباشه و من بخواهم قبل از اینکه به متغیرم نسبتش بدم ببینم. یعنی قبل از استفاده strtodate . ببینم این date هست یا نه. که اگه مقدار وارده اشتباه بود برنامه خطا نده و خودم پیغام خطا به کاربر بدم، . چطور باید چک کنم.
یعنی اصل سوالم اینکه چطور چک کنم وارد شده در edit قابل تبدیل به date هست و بعد استفاده اش کنم.
یعنی جلو این f:= در برنامه زیر چی بنویسم؟
procedure TForm1.Button3Click(Sender: TObject);
var
d:tdate;
f:boolean;
begin
f:=
if f then
begin
d:=StrToDate(edit1.Text );
label3.Caption :=DateToStr(d);
end
else
APPLICATION.MessageBox('تازیخ درست وارد نشده',mb_ok)
else
end;
اینجا هم که همه چی راست به چپ میشه بهم میریزه.
ممنونم
Kamyar.Kimiyabeigi
یک شنبه 24 مهر 1384, 17:15 عصر
من فکر میکنم خودتون باید این کنترل رو انجام بدین توابع Pos و Copy و Delete در این زمینه خیلی کمکتون میکنه
m-khorsandi
یک شنبه 24 مهر 1384, 17:36 عصر
درود
شما با استفاده از تابع IsValidDate میتونید صحت تاریخ رو چک کنید.
یونیت SysUtils رو هم Use کنید.
oghab
دوشنبه 25 مهر 1384, 10:05 صبح
سلام
من سعی کردن از تابع isvalidDate استفاده کنم ولی 2 تا پارامتر می خواست که نمی دونستم چی باید بنویسم. برای پارامتر اول همون مقداری که تو edit وارد شده بود را نوشتم ولی برای پارامتر دوم چیزی به فکرم نرسید و خب error دا و من متوجه نشدم پارامتر اولم هم درست بوده یا نه!
حالا اگه ممکنه پارامترهایی که باید برای این تابع استفاده منم را هم بگید
با تشکر
پیروز و سربلند باشید
m-khorsandi
دوشنبه 25 مهر 1384, 14:06 عصر
دقیقا" سه تا پارامتر میخواد، 1- سال 2- ماه 3- روز .
برای تقسیم کردن "تاریخ" به این سه پارامتر هم میتونید از DecodeDate استفاده کنید.
oghab
دوشنبه 25 مهر 1384, 16:34 عصر
سلام
شما درست می گید سه پارامتر سال - ماه - روز را میخواهد
ولی من فقط یه edit دارم که محتویاتش یه رشته است و این سه پارامتر را نداره که به این وسیله چک کنم
اگه بخواهم همانطور که دوست عزیزمون آقای Kimiyabeig فرمودند از توابع Pos و Copy و Delete استفاده کنیم و این سه پارامتر را بدست بیاریم. بدون استفاده از تابع isvaliddate هم میشه دیگه فهمید مقدار وارد شده صحیح هست یا نه!
(من الان چند ساعت نشستم و دارم سعی می کنم یه راه حل پیدا کنم. از نوع variant و نسبت دادن مقدار edit.text به یه متغیر از اون نوع (v) و با استفاده از تابع vartype و مشخص کردن نوع v و نسبت دادن نوع آن به یه متغیر (w) از نوغ word و باز با استفاده از تابع vartypeastext و نسبت دادنش به یه متغیر رشته ای و ریختنش توی label استفاده کردم. تا نوع داده وارد شده به edit را پیدا کنم . ولی به کجا رسیدم string)
ببینید من یه edit دارم و توی آون یه تاریخ مثلا 5/6/1384 وارد می کنم و بعد با استفاده از تابع strtodate اونا به یه متغیر از نوع date نسبت میدم.
حالا میخوام قبل از استفاده از strtodate ورودی را اعتبارسنجی کنم
که اگه مثلا کاربر نوشت ffff یا 6//5/1384 قبل از اینه برنامه روی خط
d:=strtodate(edit1.text)
error بده من با خودم با showmessage خطا بدم و مانع اجرای اون خط بشم.
اصل کلام برای اعتبار سنجی داده وارد شده در یک edit که ببینیم از نوع date هست یا نه راه دیگه ای غیر از آنچه آقای Kimiyabeig فرمودند "از توابع Pos و Copy و Delete استفاده کنید" وجود داره یا نه!
مرسی
m-khorsandi
دوشنبه 25 مهر 1384, 16:39 عصر
1- توابعی که من گفتم همگی در مورد تاریخ میلادی بود.
2- شما میتونید برای اینکه تا حدی از اشتباه کاربر جلوگیری کنید از MaskEdit استفاده کنید.
oghab
دوشنبه 25 مهر 1384, 17:14 عصر
سلام
دز موزد میلادیشم. من نفهمیدم چطور استفاده کنم. به هر حال ممنون. چون من تاریخ شمسی لازم دارم.
اگه حوصله دارید و امکانش هست راجع به maskedit هم یه توضیحی بدبد.
خیلی ممنون
موفق باشید
disappear
دوشنبه 25 مهر 1384, 22:24 عصر
سلام .
یادمه که آقای خجسته در سایت خودش یک چیزایی داشت . که صحت تاریخ را در تقویم فارسی چک می کرد . البته این یک Unit بود . این یونیت خیلی توابع درباره تاریخ هم داشت .
ama55555
دوشنبه 25 مهر 1384, 22:36 عصر
یه را ساده آن استفاده از TRY,EXCEPT می باشد
ama55555
دوشنبه 25 مهر 1384, 22:37 عصر
یه راه ساده آن استفاده از TRY , EXCEPT می باشد
oghab
سه شنبه 26 مهر 1384, 10:31 صبح
سلام
یعنی چه جوری از try و except استفاده کنم؟
m-khorsandi
سه شنبه 26 مهر 1384, 13:12 عصر
این هم یه مثال ساده از MaskEdit:
ama55555
سه شنبه 26 مهر 1384, 23:47 عصر
به همین سادگی
procedure TForm1.Button1Click(Sender: TObject);
begin
try
StrToDate(MaskEdit1.Text)
except
ShowMessage('تاریخ را درست وارد نمائید');
end;
end;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.