PDA

View Full Version : SP تاریخ شمسی برای دوستانی که با اکسس پروجکت کار میکنند



sarami
چهارشنبه 18 مرداد 1385, 23:54 عصر
ظاهرا تعداد دوستانی که به سمت اکسس پروجکت متمایل شدن زیاد شده برا همین گفتم شاید نکته هایی وجود داشته باشه که به ذهنم می رسه برای دوستان مفید باشه از اون جمله میشه به تاریخ شمسی برای sql اشاره کرد . دوستانی که با اکسس پروجکت کار میکنن این نکته رو فراموش نکنن که هیچ گاه برای استفاده از تاریخ به تاریخ سیستم سرویس گیرنده (Client) متکی نباشید و حتما تاریخ رو از سمت سذویس دهنده (Server)بخونین تا اگه تاریخ سیستم کاربری تنظیم نبود رکوردهای اشتباه وارد بانک شما نشه.
اینم sp اماده:
CREATE PROCEDURE dbo.sp_Hijri_Date

AS


DECLARE @a datetime
DECLARE @Y int,@M INT,@D INT,@YY int,@MM INT,@DD INT,@T varchar(6)


set @a=getdate()
set @Y =(Year(getdate()))
set @M = (Month(getdate()))
set @D = (Day(getdate()))

If (@M = 1 And @D < 21 )
BEGIN
set @YY = @Y - 622
set @MM = @M + 9
set @DD = @D + 10
End

If @M = 1 And @D > 20
BEGIN
set @YY = @Y - 622
set @MM = @M + 10
set @DD = @D - 20
End

If @M = 2 And @D < 20
BEGIN
set @YY = @Y - 622
set @MM = @M + 9
set @DD = @D+ 11
End

If @M = 2 And @D > 19
BEGIN
set @YY = @Y - 622
set @MM = @M + 10
set @DD = @D - 19
End

If @M = 3 And @D < 21
BEGIN
set @YY = @Y - 622
set @MM = @M + 9
set @DD = @D+ 9
End

If @M = 3 And @D > 20
BEGIN
set @YY = @Y- 621
set @MM = @M - 2
set @DD = @D- 20
End

If @M = 4 And @D < 21
BEGIN
set @YY = @Y- 621
set @MM = @M - 3
set @DD = @D+ 11
End


If @M = 4 And @D > 20
BEGIN
set @YY = @Y - 621
set @MM = @M- 2
set @DD = @D - 20
End
If @M = 5 And @D < 22
BEGIN
set @YY = @Y - 621
set @MM = @M - 3
set @DD = @D + 10
End
If @M = 5 And @D > 21
BEGIN
set @YY = @Y - 621
set @MM = @M - 2
set @DD = @D - 21
End
If @M = 6 And @D < 22
BEGIN
set @YY = @Y - 621
set @MM = @M - 3
set @DD = @D + 10
End

If @M = 6 And @D > 21
BEGIN
set @YY = @Y - 621
set @MM = @M - 2
set @DD = @D - 21
End
If @M = 7 And @D < 23
BEGIN
set @YY = @Y - 621
set @MM = @M - 3
set @DD = @D + 9
End
If @M = 7 And @D > 22
BEGIN
set @YY = @Y - 621
set @MM = @M - 2
set @DD = @D - 22
End
If @M = 8 And @D < 23
BEGIN
set @YY = @Y- 621
set @MM = @M - 3
set @DD = @D + 9
End
If @M = 8 And @D > 22
BEGIN
set @YY = @Y - 621
set @MM = @M - 2
set @DD = @D- 22
End

If @M = 9 And @D < 23
BEGIN
set @YY = @Y- 621
set @MM = @M - 3
set @DD = @D + 9
End
If @M = 9 And @D > 22
BEGIN
set @YY = @Y - 621
set @MM = @M - 2
set @DD = @D- 22
End
If @M = 10 And @D < 23
BEGIN
set @YY = @Y - 621
set @MM = @M - 3
set @DD = @D + 8
End
If @M = 10 And @D > 22
BEGIN
set @YY = @Y - 621
set @MM = @M - 2
set @DD = @D - 22
End
If @M = 11 And @D < 22
BEGIN
set @YY = @Y - 621
set @MM = @M - 3
set @DD = @D+ 9
End

If @M = 11 And @D > 21
BEGIN
set @YY = @Y - 621
set @MM = @M - 2
set @DD = @D- 21
End
If @M = 12 And @D < 22
BEGIN
set @YY = @Y- 621
set @MM = @M - 3
set @DD = @D + 9
End
If @M = 12 And @D > 21
BEGIN
set @YY = @Y - 621
set @MM = @M - 2
set @DD = @D - 21
End



If (Right(@Y, 2) % 4 = 0 And @M > 2)
BEGIN

set @DD = @DD+ 1
If @MM <= 6
BEGIN
If @DD > 31
BEGIN
set @DD = 1
set @MM= @MM + 1
End
else if @MM > 6
BEGIN
If @DD > 30
BEGIN
set @DD = 1
set @MM= @MM + 1
End
End

If @MM = 12 And @DD= 30
BEGIN
set @MM=1
set @dd=1
set @yy=@yy+1
End
end
End

If (Right(@Y, 2) - 1)%4 = 0 And @M <= 3
BEGIN
If Not ( @M = 3 And @D > 20)
BEGIN
set @DD= @DD + 1
If @DD = 31
BEGIN
set @DD = 1
set @MM = @MM + 1
End
End
End



SET @T = Right(str(@YY), 2) + Right('00'+(LTRIM(STR(@MM))), 2) + Right('00'+(LTRIM(STR(@DD))), 2)


select @t as 'Date'




GO

اینم فانکشن تاریخ برا کد نویستون تا بتونین از طریق اون تاریخ سرور رو در کد نویسی داشته باشین
Function Hijri_ShortDate() As String
On Error GoTo Err_Handler
Dim rst As ADODB.Recordset
Dim strsql As String
strsql = "EXECUTE sp_Hijri_Date"
Set rst = New ADODB.Recordset
rst.open strsql, Application.CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic

If Not rst.EOF Then
Hijri_ShortDate = rst.Fields(0)
End If
rst.Close

Exit Function
Err_Handler:
MsgBoxFa Err.Description, , "dateErr"

End Function
Function Hijri_LongDate()
On Error GoTo Err_Handler
Dim Today As Date, strWeekDay As String, strMonth As String
Today = Now
Select Case Weekday(Today)
Case 1
strWeekDay = "&#237;˜&#212;&#228;&#200;&#229;"
Case 2
strWeekDay = "&#207;&#230;&#212;&#228;&#200;&#229;"
Case 3
strWeekDay = "&#211;&#229; &#212;&#228;&#200;&#229;"
Case 4
strWeekDay = "چ&#229;&#199;&#209;&#212;&#228;&#200;&#229;"
Case 5
strWeekDay = "پ&#228;&#204;&#212;&#228;&#200;&#229;"
Case 6
strWeekDay = "&#204;&#227;&#218;&#229;"
Case 7
strWeekDay = "&#212;&#228;&#200;&#229;"
End Select

Select Case Mid(Hijri_ShortDate, 3, 2)
Case 1
strMonth = "&#221;&#209;&#230;&#209;&#207;&#237;&#228;"
Case 2
strMonth = "&#199;&#209;&#207;&#237;&#200;&#229;&#212;&#202;"
Case 3
strMonth = "&#206;&#209;&#207;&#199;&#207;"
Case 4
strMonth = "&#202;&#237;&#209;"
Case 5
strMonth = "&#227;&#209;&#207;&#199;&#207;"
Case 6
strMonth = "&#212;&#229;&#209;&#237;&#230;&#209;"
Case 7
strMonth = "&#227;&#229;&#209;"
Case 8
strMonth = "&#194;&#200;&#199;&#228;"
Case 9
strMonth = "&#194;&#208;&#209;"
Case 10
strMonth = "&#207;&#237;"
Case 11
strMonth = "&#200;&#229;&#227;&#228;"
Case 12
strMonth = "&#199;&#211;&#221;&#228;&#207;"
End Select
Dim yy As Integer
yy = Left(Hijri_ShortDate, 2)

Hijri_LongDate = strWeekDay & ", " & Right(Hijri_ShortDate, 2) & " " & strMonth & "," & yy
Exit Function
Err_Handler:
MsgBoxFa "err"
End Function

mohsenna30ri
پنج شنبه 19 مرداد 1385, 07:01 صبح
من که فارسی ها رو خرچنگ قورباغه می بینم

شاپرک
پنج شنبه 19 مرداد 1385, 23:54 عصر
آقای صارمی Sp مربوط به تبدیل شمسی به میلادی رو هم دارید ؟
ممنون

sarami
جمعه 20 مرداد 1385, 02:04 صبح
متاسفانه ندارم شاپرک جان ..

moustafa
جمعه 20 مرداد 1385, 20:34 عصر
من که فارسی ها رو خرچنگ قورباغه می بینم
از این خرچنگ قورباغه ها شما هم برای ما بذار ماکپی می کنیم تایه ماجول اکسس فارسی میشه