# Native Code > برنامه نویسی در Delphi > ابزارهای گزارش سازی در دلفی >  گزارش از تاریخ ........... تا تاریخ .............

## b_mohammadpoor

سلام به همگی 

من یک برنامه با دلفی و بانک اکسس نوشتم که نیاز به یک گزارش در یک بازه زمانی داره مثلاً فروش از تاریخ تا تاریخ ، 
فیلد تاریخ را هم به صورت کارکتری گرفته ام (12/12/1382) ولی هرکار میکنم نمیتونم رکوردها رو در اون بازه زمانی فیلتر کنم یا انتخاب کنم لطفا به من بگید چکار کنم ؟؟؟  :(

----------


## Gladiator

باید تاریخ رو از نوع کارکتری به نوی تاریخ تبدیل کنی .

مثلا با StrToDate میتونی یک رشته استرینگ رو به نوع Date تبدیل کنی . در مجموع کار شما از پایه مشکل داره نباید تاریخ رو کارکتری طراحی میکردی .

موفق باشی .

----------


## Gladiator

باید یه توصیه هم بکنم :

برای تاریخ توی دلفی هیچ راهی بهتر و ساده تر و شکیل تر از استفاده از کامپوننت تاریخ فارسی آقای امیر رحیمی فراحانی نیست .

توی سایت http://www.farsicomponents.com میتونی قابلیتهاشو چک کنی و یه نسخه نمایشی دریافت کنی .

موفق باشی .

----------


## Behzad_Asharkhan

سلام
من از توابع آقای DelphiArea استفاده میکنم و مشکلی ندارم. شما هم امتحان کنید.   8) 
موفق باشی

----------


## (امید)

با سلام

در این مورد بحث خوبی داشتیم.
تو قسمت access می تونید پیدا کنید مبحث تاریخ و لاغیر...

----------


## omidsm

می تونید یک فیلد محاسباتی در اکسس تعریف کنید که رشته رابه 
عدد تبدیل کند مثلا
"10/10/1381" را به 13811010 تبدیل کند حال می توانید با این فیلد کار کنید

----------


## JavanSoft

اگر دوست داشتید این کامپوننت تاریخ رو هم ببین ... یکی از توابع ان تفریق و دیگر اشتراک و اجتماع و غیره است
Www.JavanSoft.com

----------


## SReza1

آقا gladiator
مطمئنی راهی که شما میگی بهترین راهه؟؟؟؟؟ :?: 
آیا همه روشها رو دیدی؟

----------


## Gladiator

تقریبا

شما این کامپوننت رو دیدی ؟ من قصد تبلیغ کردن ندارم ولی واقعا کامل و بی دردسره .

----------


## b_mohammadpoor

آخرش من نفهمیدم چه کار کنم چون من برنامه را نوشتم و به استفاده کننده تحویل دادم و حالا میخواهم گزارشهایش را طراحی کنم  :wink:

----------


## Gladiator

> من برنامه را نوشتم و به استفاده کننده تحویل دادم و حالا میخواهم گزارشهایش را طراحی کنم


پس به خدا توکل کن  :mrgreen:

----------

دوست عزیز
تا جایی که من میدونم توی دلفی میتونیم دو تا رشته رو با هم مقایسه کوچکتر  و بزرگتر و یا مساوی بکنیم 
به عنوان مثال رشته   'ali'  از رشته  'morteza'  کوچکتر است یعنی در حقیقت رشته به یک عدد که محصول کد تک تک کاراکتر های رشته است در یک مقایسه تبدیل میشه .
من اینو در دستور رنج در  table  و  query   استفاده کردم  جواب داده 
......................................
به امید روزی که ایران از نظر کامپیوتر به خدایی برسد . با تلاش تمام برنامه نویسان و علاقه مندان به کامپیوتر در این مرزو بوم

----------


## omidsm

> دوست عزیز
> تا جایی که من میدونم توی دلفی میتونیم دو تا رشته رو با هم مقایسه کوچکتر  و بزرگتر و یا مساوی بکنیم


دوست عزیز شما فکر می کنید برای تاریخ 10/9/1382 و 10/11/1382 چه جوابی می دهد؟
چون اگر با این راه حل می شد دلفی خود از این راه استفاده می کرد
و چون این ساختار برای میلادی طراحی شده تنها راه که به نظر من می رسد آن است که در بالا 
اشاره کردم
ویا ساختاری شبیه تاریخ دلفی برای شمسی طراحی کنیم که من در حال  انجام آن هستم

و به امید روزی که ....

----------


## JavanSoft

یکی از توابعی که در کامپوننت تاریخ اینجانب تابعی بنام CompleateDate است که با در یافت یک تاریخ فارسی معادل صحیح انر برمی گرداند مثلا 
82/1/1 به 1382/01/01
1382/01/1 به 1382/01/01
از این راه می توانید کلیه مقایسه ها را انجام دهید

----------


## saeed_d

من از این روش استفاده می کنم
البته از اساتید محترم هم خواهشمندم که اگه ممکنه نظر خودشونو بدن 8) 
در کنار هر تاریخ یک فیلد از نوع عددی دارم که با روش زیر مقدار آنرا پر می کنم

                 dday1&#58;=y*366+&#40;m-1&#41;*31+d;
                 if m>7 then
                      dday1&#58;=dday1-&#40;m-7&#41;;

یعنی مقدار dday1رو توی اون می ریزم.پس هر تاریخ یک عدد منحصر به فرد برای خودش دارد و تاریخ هر چه بزرگتر باشد مقدار عدد هم بزرگتر است.
بعد بین هر دو تاریخ که بخواهم جستجو انجام دهم اول اون دو تا تاریخ رو با روش بالا به عدد تبدیل می کنم و بعد در اون فیلد عددی جستجو را بین اون دو عدد انجام میدم

----------


## Gladiator

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

چرا که این دوستمون میخواد تاریخهای خاصی رو فیلتر کنه . مثلا از اول شهریور ماه تا 7 شهریور ماه . توی روش شما باید هر تاریخی رو اول به یک عدد تبدیل کرد که توی فیلتر کردن یه خورده مشکل میشه .

البته این نظر منه .
موفق باشید .

روشی که آقای وکیلی اشاره کرده هم بد چیزی نیست . خیلی هم جالبه .

----------


## saeed_d

> سعید جون این روش فکر میکنم برای فیلتر کردن یه خورده مشکل باشه .
> 
> چرا که این دوستمون میخواد تاریخهای خاصی رو فیلتر کنه . مثلا از اول شهریور ماه تا 7 شهریور ماه . توی روش شما باید هر تاریخی رو اول به یک عدد تبدیل کرد که توی فیلتر کردن یه خورده مشکل میشه .
> 
> البته این نظر منه .
> موفق باشید .
> 
> روشی که آقای وکیلی اشاره کرده هم بد چیزی نیست . خیلی هم جالبه .


گلادیاتور جان سلام
از ارسال نظرتان متشکرم
می شه بگین تو فیلتر چه مشکلی پیش میاد؟

----------

> نوشته شده توسط dadvand
> 
> دوست عزیز
> تا جایی که من میدونم توی دلفی میتونیم دو تا رشته رو با هم مقایسه کوچکتر  و بزرگتر و یا مساوی بکنیم 
> 
> 
> دوست عزیز شما فکر می کنید برای تاریخ 10/9/1382 و 10/11/1382 چه جوابی می دهد؟
> چون اگر با این راه حل می شد دلفی خود از این راه استفاده می کرد
> و چون این ساختار برای میلادی طراحی شده تنها راه که به نظر من می رسد آن است که در بالا 
> ...


.............
سلام دوست عزیز
اگه تاریخ رو به صورت  10/09/1382    وارد کنی مقایسه رو درست انجام میده 
..  به امید روزی که ایران از نظر کامپیوتر خدایی کند . با همت همه برنامه نویسان و علاقه مندان به کامپیوتر

----------


## JavanSoft

یکی دیگر از توابع همان کامپوننت تابع تبدیل یک تاریخ به معادل عددی با توجه به فرمت صحیح ان است

----------


## Gladiator

آقا سعید با سلام

من چون برای تاریخ فارسی با اون کامپوننت تاریخ فارسی آقای رحیمی کار میکنم یکم تنبل و تن پرور شدم  :mrgreen: 

با روش شما باید اول یک رنج تاریخ که مشخص میشه به عدد تبدیل بشه و بعد فیلتر ولی با اون کامپوننت هیچ کار خاصی لازم نیست و فقط 2 خط فیلتر ساده مینویسی و تمام . توی برنامه نویسی هم هر چی کار کمتری انجام بدی و نتیجه بهتری بگیری هنر کردی  :mrgreen:  و از نظر وقت و انرژی هم صرفه جویی کردی .

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

موفق باشی .

----------


## SyntaxCheck

سلام
مقایسه دو رشته از سمت چپ انجام میشه و هیچ مشکلی نداره.سال در سمت چپ و ماه و روز به ترتیب.کافیه در روشی که استفاده میکنیم برای تاریخها الگوی خاصی رو همیشه رعایت کنیم مثلا برای ماه دو کاراکتر رو در نظر بگیریم که برج نهم به این صورت نوشته میشه( 09) و نه (9) و یا سال دویستو یک رو بنویسیم 0201 (چهار کاراکتر). با این روش ثبت تاریخ بصورت کاراکتری هیچ مشکلی در مقایسه نخواهد داشت.
در ضمن استفاده از StrtoDate کار جالبی برای تاریخ شمسی نیست. چون کنترل صحت روی تاریخ انجام میشه. مثلا روز 31 ام از برج اردیبهشت رو امتحان کنید و اکسپشن رو ببینید.

----------


## said ali

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

----------


## saeed_d

> آقا سعید با سلام
> 
> من چون برای تاریخ فارسی با اون کامپوننت تاریخ فارسی آقای رحیمی کار میکنم یکم تنبل و تن پرور شدم  :mrgreen: 
> 
> با روش شما باید اول یک رنج تاریخ که مشخص میشه به عدد تبدیل بشه و بعد فیلتر ولی با اون کامپوننت هیچ کار خاصی لازم نیست و فقط 2 خط فیلتر ساده مینویسی و تمام . توی برنامه نویسی هم هر چی کار کمتری انجام بدی و نتیجه بهتری بگیری هنر کردی  :mrgreen:  و از نظر وقت و انرژی هم صرفه جویی کردی .
> 
> به هر حال اگر خودت فیلتر بین 2 تا تاریخ رو هم باهاش امتحان کردی توضیحشو بنویس تا این دوستمون هم استفاده کنه .
> 
> موفق باشی .


گلادیاتور جان سلام
شما درست میگین  :تشویق:  
اما جناب SyntaxCheck هم روش خوبی رو گفتند. اینطور نیست :?:

----------


## Gladiator

سعید جون 

سینتکس چک که کارش حرف نداره ٬ ما خیلی مخلصشیم .

و همچنین بقیه برو بچه های سایت .

موفق باشید .

----------

من نمیفهمم شما سر چی دارین بحث میکنین :?: 
این کوری که نوشتم یک ساله که داره واسه یه برنامه گزارش درست میکنه هنوز هم error نداده
select * from table1 where date between date1 and date2
date1 ,date2 دو تاریخ به فرمت yyyy/mm/dd هستند و date هم از نوع string
ضمنن اگه از دیتابیس dbisam استفاده کنین تاریخ فارسی رو کاملا ساپورت میکنه

----------


## moradi_am

اسانترین را برای شما اینس که یک تابع بنوسی که اعداد کوچکتر از 10 را دورقمی کنه (1 به 01 تبدیل بشه و ...) در اینصورت مقایسه رشته ای هم جواب خواهد داد.نوشتن تابع هم سخت نیست و برای اینکه بعد از این اطلاعات درست وارد بشه موقع ذخیره این تبدیل را انجام بده .

-------------------------------------------------------------------------------
خدا مارا از شر زبان فارسی و تاریخ فارسی محفوظ نگه دارد .

----------


## kimia1

این کامپوننت های   که میگین از کجا میشه گیر آورد؟ :?:

----------


## arshia_

> می تونید یک فیلد محاسباتی در اکسس تعریف کنید که رشته رابه 
> عدد تبدیل کند مثلا 
> "10/10/1381" را به 13811010 تبدیل کند حال می توانید با این فیلد کار کنید
> _________________


چطور میشه اینکارو انجام داد آیا تابعی برای این کار داریم یا باید به صورت دستی  اونو انجام بدیم؟؟

----------


## amir_22

سلام به همه دوستان 

چطور میشود یک دکمه برای فیلتر کردن شرط خاص یا چند شرطی بر روی فیلدهای از نوع رشته درست کرد 
16/10/83

----------


## amir_22

سلام به همه دوستان 

چطور میشود یک دکمه برای فیلتر کردن شرط خاص یا چند شرطی بر روی فیلدهای از نوع رشته درست کرد 
16/10/83

----------


## arkia

منم به یه مشکل بر خوردم که نیاز دارم مثلا تاریخ 16/10/83 را به 16-10-  83 تبدیل کنم. اگه ممکنه برام حلش کنین.

----------


## computer-mag

> منم به یه مشکل بر خوردم که نیاز دارم مثلا تاریخ 16/10/83 را به 16-10-  83 تبدیل کنم. اگه ممکنه برام حلش کنین.


خوب مشکلی که نیست!شما باید توی رشتت دنبال / بگردیو هر جا / دیدی اون رو حذف کنیو جاش - بزاری! همین کار خاص دیگه ایهم نم یخواد!

----------


## hadisalahi2

من خودم بارها تاریخ رو به صورت رشته با هم مقایسه کردم و همیشه هم درست جواب داده.
پس بهتره دنبال مشکل تو یه جای دیگه از برنامتون بگردید. نه توی مقایسه رشته ها

----------

