PDA

View Full Version : ثبت تاریخ شمسی از طریق سرور در بانک



MBeigy
شنبه 24 بهمن 1383, 16:33 عصر
سلام
اگر بخواهیم تاریخ و زمان سرور را گرفته و در دیتابیس ذخیره کنیم (یعنی برای هر کلاینت مثلا زمان ثبت رکوردهایش را هم ثبت کنیم اما این تاریخ و زمان از دستگاه کلاینت گرفته نشود بلکه از سرور گرفته شود) و در ضمن این تاریخ شمسی هم باشد چکار میتوانیم بکنیم؟ :گیج:
:reading: آیا تابعی به زبان sql هست که این کار تبدیل به شمسی را انجام دهد؟

esi022
شنبه 24 بهمن 1383, 22:18 عصر
سلام دوست گرامی
2 راه داری
یکی اینکه میلادی ذخیره کنی و موقع خوندن تاریخ شمسی رو نشون بدی
چون نمیتونی تو فیلد date/time شمسی ذخیره کنی

راه دیگه هم اینه که با برنامت تاریخ شمسی رو مثلا با فرمت 13830203 که سوم اردیبهشت 83 رو نشون میده یا با هر فرمتی که میخوای ذخیره کنی

چون تو تاریخ شمسی تاریخهایی وجود داره که sql قبول نمیکنه ( چون تو میلادی وجود نداره )
در ضمن نگفتی که با چه برنامه ای داری به sql کانکت میشی

MBeigy
یک شنبه 25 بهمن 1383, 00:52 صبح
سلام
ممنون که جواب دادید. باید بگم که من با وی بی کانکت میشم اما فکر نمیکنم این مهم باشه چون همونطور که گفتم نمیخوام تاریخ از کامپیوتر کلاینت خونده بشه. اینکه میلادی ذخیره کنم و موقع نمایش شمسی نشون بدم خوبه اما موقع نشان دادن توی گزارشها مثلا با DataReport معمولا نمیشه تبدیل کرد و مشکل ساز میشه(یا شاید من بلد نیستم).
در مورد راه دیگه هم مستلزم اینه که اس کیو ال بتونه تبدیل تاریخ رو انجام بده چون همونطور که گفتم میخوام که تاریخ رو از سرور بگیرم نه از کلاینت ها
از دوستان میخوام که اگر تجربه‌ای دارن یا راهی به ذهنشون میرسه یا اون تابع تبدیل تاریخ رو با زبان T SQL دارن کمک کنند.
باز هم ممنون :sunglass:

vafa_mohsen
یک شنبه 25 بهمن 1383, 14:20 عصر
دوست عزیز سلام

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

MBeigy
یک شنبه 25 بهمن 1383, 16:49 عصر
سلام به همگی
بله دوست عزیز من هم دقیقا همین روش تبدیل تاریخ را در TSQL میخوام یعنی یک فانکشن در دیتابیس بنویسم چون من برنامه اجرایی در داخل سرور ندارم که بخوام بوسیله اون تبدیل رو انجام بدم.
اگر هم بخوام در کامپیوتر کلاینت این کار رو انجام بدم و به سرور برگردونم یعنی برای هر رکورد باید یک رفت و برگشت اضافی درست کنم و چون تعداد update هام و همینطور کلاینت هام زیاده بیخودی ترافیک شبکه رو بالا بردم. لذا این کار در این مورد خاص درست نیست.
به هر حال از کمکتون متشکرم :wink: لطفا اگر چیز دیگه‌ای به ذهنتون میرسه یا اون فانکشن تبدیل در SQL رو دارید کمک کنید.

N_D
یک شنبه 25 بهمن 1383, 16:53 عصر
سلام من این کد رو نوشتم .. ببین کارت رو راه میندازه یا نه
در ضمن مارو مطلع کن( اینکه درست کار میکنه یا نه)


CREATE proc GetTodayDate AS
begin
declare @YR int, @DY int
SET @YR = Year(GetDate())
SET @DY = DATEDIFF(day, CAST(Year(GetDate())AS Char(4) )+'-01-01',Getdate() )
SELECT dbo.GetHijriDate(@YR,@DY +1)
end


GO
--------------------------------------------------------------------------------------------------------

CREATE Function GetHijriDate(@YR int,@DY int) Returns char(10) AS
Begin
Declare @monthDays char(36),@KabiseDayes char(36),@monthNames char(39)
declare @s int,@days int,@i int, @Base int
declare @Sal char(4),@mah char(2),@roz char(2)
SET @monthDays=',30,30,29,31,31,31,31,31,31,30,30,30'
SET @KabiseDayes=',30,30,30,31,31,31,31,31,31,30,30,30 '
SET @monthNames=',10,11,12,01,02,03,04,05,06,07,08,09, 10'
SET @Base = 10
SET @S= @YR-622
IF @YR % 4 = 1 SET @Base= @Base +1
IF @S % 4 = 3 SET @monthDays= @KabiseDayes
SET @Days= @DY+@Base
Set @i=1
While @i<=12
begin
IF @Days <= Cast(SUBSTRING(@monthDays, 3*@i-1, 2) as int) break;
SET @Days =@Days-Cast(SUBSTRING(@monthDays, 3*@i-1, 2) as int);
SET @i =@i +1
end
SET @mah = SUBSTRING(@monthNames, 3*@i-1, 2)
SET @roz = Cast( @Days as char(2) )
IF LEN(@roz)=1 SET @roz ='0'+ @roz
IF @i >3 SET @S=@s+1
SET @sal = Cast(@s as char(4))
Return @sal+'/'+@mah+'/'+@roz
End

GO

MBeigy
یک شنبه 25 بهمن 1383, 23:19 عصر
سلام به همه دوستان
دست شما درد نکنه من الان اونو برمیدارم و تست میکنم. ان شاالله درست کار میکنه.
باز هم ممنون :wink:

محمد حسین صمدیان
دوشنبه 26 بهمن 1383, 02:59 صبح
متاسفم دوست من که نمیتونم کمکت کنم.
چون من یک دلفی کارم که از VB متنفرم(net. نه).
من تموم برنامه های دیتا بیسم بجز اولیاش یعنی اونهایی که یکسال پیش مینوشتم تماما مولتی تایر اندو با لایه طرف سرور کار مورد نظر شما رو انجام میدم.
ببین اگه میتونی با وی بی دات نت مولتی تایر بنویسی مولتی تایر کار کن که خیلی حرفه ایه.
ام میتونی از یک تریگر هم توی MSSQL بهره ببری.

M.GhanaatPisheh
دوشنبه 26 بهمن 1383, 14:09 عصر
با لایه طرف سرور کار مورد نظر شما رو انجام میدم
ببخشید مولتی تایر چیه میشه تعریفش کنید؟



MBeigy عزیز متدهای تبدیل تاریخ رو خودتون به T-SQL تبدیل کنید
مشکل چیه دوست عزیز
فکر می کنم راه عاقلانه همینه.

محمد حسین صمدیان
سه شنبه 27 بهمن 1383, 02:16 صبح
ببخشید مولتی تایر چیه میشه تعریفش کنید؟
dot_net_lover عزیز مولتی تایر یک تکنولوزی نسبتا جدید دزر ساختار های بانک اطلاعاتی است که در ان هر کلاینت مستقیما با بانک ارتباط نمی یابد بلکه ابتدا یک مازول داده یا برنامه طرف سرور را اجرا کرده و برنامه طرف سرور که روی سرور نصب است وظیفه ارتباط با بانک را به عهده دارد مزیت این روش این است که به ازای هر ارتباط با سرور یک Tread از برنامه سرور اجرا شده و می توان تا چند میلیون کلاینت را با بانک مرتبط کرد بدون اینکه هیچ تداخلی بین درخواست ها از سرور روی دهد، در حالی که در معماری خادم/مخدوم یا دو لایه درخوست ها از سرور امکان تداخل دارند و از طرف دیگر میتوان بسته های داده را هم رد گیری کرد.در دلفی به این روش MIDAS می گویند.
برای اطلاعات بیشتر به کتاب های زیر مراجعه کنید:
1 -اراکل انتشارات ناقوس
2 -برنامه نویسی بانک اطلاعاتی در دلفی - مهندس مولانا پور-انتشارات تخت سلیمان
3-ذلفی 6 انتشارات کانون نشر علوم
موفق باشید.

M.GhanaatPisheh
سه شنبه 27 بهمن 1383, 15:23 عصر
این از کدوم کتاب بود؟--> خادم / مخدوم !!!!
من می خواستم تصور شما رو بدونم.

MBeigy
سه شنبه 27 بهمن 1383, 18:29 عصر
سلام
ببخشید دیر شد داشتم جواب میدادم که کارتم تموم شد. دیگه وقت نکردم تا امروز.
آقای صمدیان با همان وی بی 6 هم میشه برنامه های مولتی تیر نوشت. اما متاسفانه این برنامه دو لایه (کلاینت سرور) است لذا باید مشکل به همین نحوی که توضیح دادم حل شود.
البته امیدوارم که معماری چندلایه شما مثل خیلی ها این نباشد که فقط یک سری کامپوننت رو در سرور قرار میدهند و به اونها وصل میشند و نه از com+ و نه object pooling و نه بقیه مزایای چندلایگی استفاده نمیکنند.
به هر حال از توجه شما متشکرم. موفق باشید. :)

MBeigy
سه شنبه 27 بهمن 1383, 18:34 عصر
سلام به همه دوستان
دست شما درد نکند من کد شما رو در کنار یک ماجول تبدیل تاریخ در وی بی که تقریبا از صحت کارش اطمینان دارم (به دلیل کثرت استفاده توسط برنامه نویسان و عدم برخورد با خطا تا بحال) امتحان کردم و تا سال 2025 میلادی اختلافی ندیدم اما در سال 2025 روز 20 مارچ رو 30 اسفند 10403 تشخیص میده ولی در اون ماجول 1 فروردین تشخیص میده. البته من شنیده بودم که غیر از 4 سال یکبار عامل دیگه ای هم در وجود سال کبیسه دخالت داره ولی دقیقا نمیدونم چی بود و چند سال یکبار تکرار میشد.
به هر حال فکر نمیکنم این برنامه من تا سال 2025 کار کنه !!! ولی اگه کار کرد و من هم زنده بودم حتما تا اون موقع مشکلشو حل میکنم. بنابراین دست شما درد نکنه چون کار منو راه انداختی و واقعا لطف کردی. :wink:

محمد حسین صمدیان
پنج شنبه 29 بهمن 1383, 13:03 عصر
:flower:
البته امیدوارم که معماری چندلایه شما مثل خیلی ها این نباشد که فقط یک سری کامپوننت رو در سرور قرار میدهند و به اونها وصل میشند و نه از com+ و نه object pooling و نه بقیه مزایای چندلایگی استفاده نمیکنند. :flower:

از توجه تون متشکرم من معمولا از +COM و SOAP استفاده می کنم و معمولا ار تباطم با استفاده از پروتکل HTTP برقرار میشه :sunglass: