# Native Code > برنامه نویسی در Delphi > مباحث عمومی دلفی و پاسکال >  تبديل تاريخ ميلادي به شمسي

## lovelygirl

دوستان تبديل تاريخ ميلادي به شمسي رو ميخوام خيلي جستجو كردم اما يه جواب درست و درمون پيدا نكردم ميشه راهنمايي كنيد خيلي  فوريه خواهشا سريع و كامل جواب بدين

----------


## Mahmood_M

برای استفاده از تاریخ شمسی ، بهترین راه استفاده از کامپوننتهای مربوط به تبدیل تاریخ میلادی به شمسی هست :
کامپوننت تقویم شمسی
این کامپوننت برای دریافت ورودی و نمایش تاریخ به کاربر مناسب است ...

DLL ای هم به نام Shamsi.DLL هست که برای کار با توابع تبدیل تاریخ می تونه مفید باشه ...
در گوگل جستجو کنید ، موارد بسیاری پیدا خواهید کرد ...

موفق باشید ...

----------


## lovelygirl

دوست عزيزم اون لينكي كه دادي اصلا دانلود نميشه يه جاهاي عجيب و غريب ميره اون dll رو هم سرچ كردم هيچي نمياره فقط مطالب آموزشي مياره خوده dll رو نميشه دانلود كرد
خواهشا اگه راه ديگه اي دارين بگيد كارم بدجوري گير كرده :خیلی عصبانی:

----------


## Pr0grammer

https://barnamenevis.org/showth...85%D8%B3%DB%8C
https://barnamenevis.org/showth...85%D8%B3%DB%8C
https://barnamenevis.org/showpo...61&postcount=7
https://barnamenevis.org/showth...ght=Shamsi.DLL

----------


## lovelygirl

اون لينك هايي كه مدير دادن رو امتحان كردم اما به جواب نرسيدم آخر يه يونيت پيدا كردم كه درست كار ميكنه اگه كسي خواست بگه بهش بدم اما مشكلم بازم حل نشده من تاريخ رو توي دلفي تونستم بيارم ولي ميخوام اين تاريخ رو توي اكسس ذخيره كنيم يعني فيلد تاريخ رو وصل كنم به جدولم در اكسس .
اما تو اكسسم هيچي نمياد جدول تاريخم خالي نشون داده ميشه 
ميشه راهنمايي كنيد

----------


## Felony

کدی که نوشتید چی هست ؟ فیلد تاریختون توی اکسس از چه نوعی در نظر گرفته شده ؟

----------


## Hadi_Fayyaz

> اون لينك هايي كه مدير دادن رو امتحان كردم اما به جواب نرسيدم آخر يه يونيت پيدا كردم كه درست كار ميكنه اگه كسي خواست بگه بهش بدم اما مشكلم بازم حل نشده من تاريخ رو توي دلفي تونستم بيارم ولي ميخوام اين تاريخ رو توي اكسس ذخيره كنيم يعني فيلد تاريخ رو وصل كنم به جدولم در اكسس .
> اما تو اكسسم هيچي نمياد جدول تاريخم خالي نشون داده ميشه 
> ميشه راهنمايي كنيد


سلام 
ميشه اسم يونيتي كه پيدا كرديد رو بدونم و اينكه چه تابعي توي اين يونيت كار تبديل تا ريخ رو انجام ميده؟
با تشكر

----------


## lovelygirl

> کدی که نوشتید چی هست ؟ فیلد تاریختون توی اکسس از چه نوعی در نظر گرفته شده ؟


 

فيلد تاريخم در اكسس از نوع Text هستش ميخوام تاريخ شمسي رو از دلفي وارد اكسس كنم اما تو اكسس نشون نميده فيلد توي دلفي رو از نوع dbtext گرفتم كه وصلش كردم به جدول اكسسم البته فيلد هاي زيادي دارم كه همشون به اكسسم وصله و درست كار ميكنند فقط اين تاريخم كار نميكنه نميدونم اشكالم كجاست

----------


## lovelygirl

> سلام 
> ميشه اسم يونيتي كه پيدا كرديد رو بدونم و اينكه چه تابعي توي اين يونيت كار تبديل تا ريخ رو انجام ميده؟
> با تشكر


 
اون يونيتي كه گرفتم اسمش date و تابع به كار رفته در اون TodayAsStringShamsi هستش
براتون ضميمه ميكنم كه بايد اول اين يونيت رو جايي كه پروژتون ذخيره كرديد قرار بدين و بعدش از توي دلفي از منوي project و گزينه add project اين يونيت را اضافه كنيد بعدش در قمست use خود دلفي اسم يونيت يعني date را use كنيد درست كار ميكنه من امتحان كردم

----------


## Felony

> براتون ضميمه ميكنم كه بايد اول اين يونيت رو جايي كه پروژتون ذخيره كرديد قرار بدين و بعدش از توي دلفي از منوي project و گزينه add project اين يونيت را اضافه كنيد بعدش در قمست use خود دلفي اسم يونيت يعني date را use كنيد درست كار ميكنه من امتحان كردم


دیگه وقتی از منوی Project یونیت رو Add میکنید نیازی نیست که کنار پروژتون باشه ، این کار برای زمانی هست که یونیت رو خودتون دستی به Uses اضافه کنید و یونیت جزو یونیت های استاندارد ( Windows , Classes , Forms و ... ) نباشه .

----------


## lovelygirl

> دیگه وقتی از منوی Project یونیت رو Add میکنید نیازی نیست که کنار پروژتون باشه ، این کار برای زمانی هست که یونیت رو خودتون دستی به Uses اضافه کنید و یونیت جزو یونیت های استاندارد ( Windows , Classes , Forms و ... ) نباشه .


 
به هرحال ما اينطوري عمل كرديم جواب داد
حالا اگه ميشه شما جواب منو بده
تو اكسس چطوري بيارمش؟

----------


## Felony

> به هرحال ما اينطوري عمل كرديم جواب داد


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



> حالا اگه ميشه شما جواب منو بده
> تو اكسس چطوري بيارمش؟


یه نمونه نوشتم با همون یونیتی که قرار دادید و به درستی کار میکنه ، ضمیمه رو ببینید .

----------


## Hadi_Fayyaz

> اون يونيتي كه گرفتم اسمش date و تابع به كار رفته در اون TodayAsStringShamsi هستش
> براتون ضميمه ميكنم كه بايد اول اين يونيت رو جايي كه پروژتون ذخيره كرديد قرار بدين و بعدش از توي دلفي از منوي project و گزينه add project اين يونيت را اضافه كنيد بعدش در قمست use خود دلفي اسم يونيت يعني date را use كنيد درست كار ميكنه من امتحان كردم


ببينيد دوست عزيز اشكالي كه شما به اون اشاره ميكنيد ربطي به تابع تبديل تاريخ ميلادي به شمسي نداره بلكه مربوط ميشه به نوع فيلد هايي كه استفاده كرديد. 
اگه درست فهميده باشم شما يك DBText روي فرمتون گذاشتيد و و اون رو از طريق يك DataSource به يك فيلد از جدول وصل كرديد و بعد توي برنامه خروجي تابع رو به DBText.Caption نسبت ميديد. در اين صورت روي فرمتون تاريخ نشون داده ميشه ولي در داخل جدول تاريخ نشون داده نميشه. اگه اين كار رو كرده باشيد بايد بگم تا اونجايي كه من ميدونم DBText يك ابجكتي براي نمايش اطلاعات از داخل جدول روي فرم هست نه براي ورود اطلاعات به جدول بنا بر اين با تغيير Caption مربوط به DBText نبايد انتظار داشته باشيد كه اطلاعات داخل جدول تغيير كنه. حالا براي حل مشكلتون ميتونيد به جاي DBText از DBEdit استفاده كنيد و يا با دستور هاي Insert يا Edit مربوط به جدول كار ورود اطلاعات به جدول رو انجام بديد.
اميد وارم اشكال شما رو درست حدس زده باشم.
موفق باشيد

----------


## lovelygirl

> ببينيد دوست عزيز اشكالي كه شما به اون اشاره ميكنيد ربطي به تابع تبديل تاريخ ميلادي به شمسي نداره بلكه مربوط ميشه به نوع فيلد هايي كه استفاده كرديد. 
> اگه درست فهميده باشم شما يك DBText روي فرمتون گذاشتيد و و اون رو از طريق يك DataSource به يك فيلد از جدول وصل كرديد و بعد توي برنامه خروجي تابع رو به DBText.Caption نسبت ميديد. در اين صورت روي فرمتون تاريخ نشون داده ميشه ولي در داخل جدول تاريخ نشون داده نميشه. اگه اين كار رو كرده باشيد بايد بگم تا اونجايي كه من ميدونم DBText يك ابجكتي براي نمايش اطلاعات از داخل جدول روي فرم هست نه براي ورود اطلاعات به جدول بنا بر اين با تغيير Caption مربوط به DBText نبايد انتظار داشته باشيد كه اطلاعات داخل جدول تغيير كنه. حالا براي حل مشكلتون ميتونيد به جاي DBText از DBEdit استفاده كنيد و يا با دستور هاي Insert يا Edit مربوط به جدول كار ورود اطلاعات به جدول رو انجام بديد.
> اميد وارم اشكال شما رو درست حدس زده باشم.
> موفق باشيد


با dbedit امتحان كردم توي اين آبجكت كه اصلا تاريخ رو نمياره فقط توي text تاريخ رو مياره
مشكلم رو درست حدس زدين اما خوب با edti جواب نداد يعني اصلا تاريخ رو هم تو دلفي نشون نداد

----------


## lovelygirl

> درسته که جواب میده ، در کل گفتم تا نحوه ی عملکردش رو بدونید .
> 
> یه نمونه نوشتم با همون یونیتی که قرار دادید و به درستی کار میکنه ، ضمیمه رو ببینید .


 
دوست عزيزم من به جز فليد تاريخ فيلدهاي ديگه هم دارم ايني كه شما دادي رو گذاشتم تو برنامه ام درست كار ميكنه اما فيلدهاي ديگمو پاك ميكنه يا نميدنم چرا اونا رو اضافه نميكنه فقط فيلد تاريخ پر ميشه بقيه سطرهاي جدوالم خالي ميمونه
ميشه بازم كمكم كني
خيلي ممنون ميشم

----------


## Felony

> دوست عزيزم من به جز فليد تاريخ فيلدهاي ديگه هم دارم ايني كه شما دادي رو گذاشتم تو برنامه ام درست كار ميكنه اما فيلدهاي ديگمو پاك ميكنه يا نميدنم چرا اونا رو اضافه نميكنه فقط فيلد تاريخ پر ميشه بقيه سطرهاي جدوالم خالي ميمونه
> ميشه بازم كمكم كني
> خيلي ممنون ميشم


اگر میتونید سورستون رو قرار بدید یا تکه کدی که برای اضافه کرد رکوردهاتون به جدول نوشتید رو اینجا بزارید تا بررسی بشه .

----------


## lovelygirl

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


 
دوست عزيز من كله برنامه ام را با جدوال اكسسم فرستادم 
توضيح برنامه ام رو بدم كه اين برنامه واسه تماس هاي گرفته شده از طرف داشنگاه پيام نور هستش كه نام را توي باكس اولي وارد ميكنم بعد تو باكس بعدي كد واحد دانشكاهي رو ميزنم مثلا 16 واسه آبعلي خودش تو دوتا باكس زيري آبعي رو مي نويسه و بعد پايين هم موضوع تماس و غيره رو ميزنم الان ميخوام تاريخ شمسي تو جدولي كه با نام tel ساختم بياد اگه نيگاش كنيد ميبيند كه اون كدي رو كه شما دادين وارد كردم فقط سطر خالي با تاريخ شمسي رو ايجاد كرده
ممنون ميشم راهنمايي كنيد
چون حجم برنامه ام زياد بود و آپلود نميشد دو تيكه اش كردم 1 و 2 خودتون كه ميدونيد كه همه رو يه جا تو يه فلدر بزاريد تا اجرا شه

----------


## Felony

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

----------


## lovelygirl

> موقع اجرای برنامه dbText تون رو با تاریخ شمستون مقدار دهی کنید ، برنامتون رو ویرایش کردم الان درست کار میکنه .


دوست عزيزم اين كه هنوزم تاريخو نمي نويسه كه
ميخوام تاريخو تو اكسسم بياره ها

----------


## Felony

من تست کردم کار کرد ، اون رکورد آخر تو بانک رو ببینید .

----------


## lovelygirl

> من تست کردم کار کرد ، اون رکورد آخر تو بانک رو ببینید .


 نميدونم كلافه شدم 
پس چرا اينجا هيچي نمي نويسه :خیلی عصبانی:  :خیلی عصبانی:

----------


## Felony

من مشکل شما رو نمیدونم چیه ولی بهترین روش این هست که خودتون دستی رکوردها رو اضافه کنید ، یعنی به وسیله ی متد insert جدول رو به حالت ورودی ببرید و رکوردهاتون رو بهش پست کنید ، دقیقا مثل نمونه ی قبلی که من قرار دادم .

موفق باشید .

----------


## lovelygirl

> من مشکل شما رو نمیدونم چیه ولی بهترین روش این هست که خودتون دستی رکوردها رو اضافه کنید ، یعنی به وسیله ی متد insert جدول رو به حالت ورودی ببرید و رکوردهاتون رو بهش پست کنید ، دقیقا مثل نمونه ی قبلی که من قرار دادم .
> 
> موفق باشید .


 
من كه مشكلمو گفتم كه
اين تاريخ شمسي رو از دلفي ميخوام ببرم تو اكسسم اما نميدونم چرا همه فيلدهام مياد جز فيلد تاريخم
ركوردهامو كه با navigator اضافه مي كنم كه دستي اضافه نميكنم
عقلم ديگه نمي كشه :اشتباه:

----------


## lovelygirl

برنامه ام را اينجا برايتان گذاشتم شرمندم هنوزم ويروس داره ببينيد دستي كه ميزنم تاريخ رو مينويسه اما خوب بازم مشكل داره چون وسطاش پيغام خطا هم ميده
اگه ميشه راهنماييم كنيد :افسرده:

----------


## دلفــي

> برنامه ام را اينجا برايتان گذاشتم شرمندم هنوزم ويروس داره ببينيد دستي كه ميزنم تاريخ رو مينويسه اما خوب بازم مشكل داره چون وسطاش پيغام خطا هم ميده
> اگه ميشه راهنماييم كنيد


کد شما مشکلی نداره ، ولی این رو هم یه امتحانی بکنید:

ADOTable1.FieldByNmae('Date').AsString := Trim(DBText1.Caption);

----------


## lovelygirl

> کد شما مشکلی نداره ، ولی این رو هم یه امتحانی بکنید:
> 
> ADOTable1.FieldByNmae('Date').AsString := Trim(DBText1.Caption);


 ببينيد مشكله من در اينه كه تاريخ شمس رو تو بانك اكسس نمي نويسه
بعدشم ايني كه شما گفتينو كجا بنويسم؟

----------


## دلفــي

> ببينيد مشكله من در اينه كه تاريخ شمس رو تو بانك اكسس نمي نويسه
> بعدشم ايني كه شما گفتينو كجا بنويسم؟


برنامه ای که آپلود کردید ناقصه و فرم 2 توش نیست ، لطف کنید برنامه کامل رو بزارید تا بهتر بتونم کمکتون کنم .

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

----------


## lovelygirl

> برنامه ای که آپلود کردید ناقصه و فرم 2 توش نیست ، لطف کنید برنامه کامل رو بزارید تا بهتر بتونم کمکتون کنم .
> 
> اون کد رو هم باید هنگام ارسال به جدول تلفن وارد کنید .


 
چرا برنامه ام كامله فقط چون حجمش زياد بود دو تيكه اش كردم دو تا فلدر رو تو يه فلدر قرار بدين درست ميشه در ضمن جداول رو هم تو تاپيك قبلي آپلود كردم و توضيح برنامه ام رو هم دادم

----------


## lovelygirl

ببينيد درست گذاشتم 
يونيت 2 را برايتان آپلود كردم

----------


## دلفــي

> ببينيد درست گذاشتم 
> يونيت 2 را برايتان آپلود كردم


بله درست بود !

این هم برنامه اصلاح شده :

----------


## lovelygirl

> بله درست بود !
> 
> این هم برنامه اصلاح شده :


 بابته برنامه ممونم اما اجرا نميشه
عكس مربوط به خطاها را براتون ميزارم ببينيد
مرسي

----------


## دلفــي

> بابته برنامه ممونم اما اجرا نميشه
> عكس مربوط به خطاها را براتون ميزارم ببينيد
> مرسي


 
این خطا به این خاطره که کوئیک ریپورتی که من ازش استفاده کردم با کوئیک ریپورتی که شما به کار بردید متفاوته .

برای حل مشکلتون چهار راه وجود داره

1- از کوئیک ریپورتی که من استفاده کردم استفاده کنید (اگه خواستید براتون میفرستم)
2 - کامپوننت مربوط به کوئیک ریپورت رو از روی فرم حذف کرده و دوباره از سربرگ کامپوننت ها اضافه کنید .
3 - روی فرم مربوط به کوئیک ریپورت راست کلیک کرده و گزینه View As Text رو بزنید و در Object کوئیک ریپورت تمامی سطرهایی که در اون گزینهUseStandardPrinter  وجود داره رو حذف کنید .
4 - صفحه گزارش رو دوباره از نو ایجاد کنید .

----------


## lovelygirl

> این خطا به این خاطره که کوئیک ریپورتی که من ازش استفاده کردم با کوئیک ریپورتی که شما به کار بردید متفاوته .
> 
> برای حل مشکلتون چهار راه وجود داره
> 
> 1- از کوئیک ریپورتی که من استفاده کردم استفاده کنید (اگه خواستید براتون میفرستم)
> 2 - کامپوننت مربوط به کوئیک ریپورت رو از روی فرم حذف کرده و دوباره از سربرگ کامپوننت ها اضافه کنید .
> 3 - روی فرم مربوط به کوئیک ریپورت راست کلیک کرده و گزینه View As Text رو بزنید و در Object کوئیک ریپورت تمامی سطرهایی که در اون گزینهUseStandardPrinter وجود داره رو حذف کنید .
> 4 - صفحه گزارش رو دوباره از نو ایجاد کنید .


 روي فرمم كه كامپوننت ندارم كه بعدشم تو تو هيچ كدوم از سطرها اوني كه شما ميگين رو نداره كه 
دوباره صفحه گزارشمو بسازم؟آخه هيچي كه فرقي نكرده همون شما چيشو عوض كردين؟

----------


## lovelygirl

خودم فهميدم چي شده گزارشمو به جدولم وصل نكرده بودين
بعدش فقط دوست عزيزم من اون دكمه ها رو الكي گذاشته بودم راستش من ميخواستم با dbnavigator كار كنم شما رو دكمه ها برنامه نوشتين البته خيلي خوب بود مرسي واقعا زحمت كشيدين كامل اجرا ميشه خيلي خوشحال شدم كه اجرا ميشه اما من گزينه هاي ديگه هم مثل Edit ركوردها يا پيمايش ركورد ها رو هم ميخوام واسه همين از navigator استفاده كردم البته قبلا هم گفتم مديرم گفته با اين كار كنم به هرحال شايد تونستم edit و پيمايش ركورد ها رو خودم درستش كردم
بازم ممنونم مرسي

----------


## maryammb66

سلام چطوری از فایل ضمیمه که به اسم date هستش رو اجرا کنم

----------


## مهران رسا

تابع TodayAsPersianDay برای نمایش ایام هفته به صورت فارسی به یونیت DATE.pas (Persian Turbo Vision Demo) اضافه شد.

----------

