Zodiac финал

Обсуждение технических вопросов работы с системами управления базами данных (СУБД), работе с языком SQL и скриптовыми языками.
Ответить
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Zodiac финал

Сообщение Александр »

заканчивая тему с ежедневным гороскопом http://www.lplm.ru/phpBB2/viewtopic.php?f=18&t=536 мы пришли к следующему формату
делаем функцию в базе

Код: Выделить всё

ALTER function [LSDBO].[Ric_Get_Zodiac]
/*вернуть строку со знаком зодиака, дату привести к текущему году*/
        (@bDate datetime      	--День рождения
         )
--Returns xml 
Returns varchar(255)
 Begin
  Declare @uName varchar(255),
          @bsDate varchar(10),
          @Rd int,
          @d int,
          @m int

  Set @d = DAY(@bDate)
  Set @m = MONTH(@bDate)
  Set @bsDate = ltrim(left(CONVERT (varchar,@bDate,104),6)+ Convert(varchar,year(GETDATE())))
  Set @Rd=DATEDIFF(day, GETDATE(),CONVERT(datetime, @bsDate, 104))
--если день рождения уже прошел - увеличить год на 1
  if  @Rd<0 begin
   Set @bsDate = left(CONVERT (varchar,@bDate,104),6)+ Convert(varchar,year(GETDATE())+1)
   Set @Rd=DATEDIFF(day,GETDATE(),CONVERT(datetime, @bsDate, 104))
  end

  Select @uName=
   Case
    When (@m=3 AND @d>20) OR (@m=4 AND @d<21) Then '<En>Aries</En><Ru>Овен</Ru><Ch>94</Ch>'
    When (@m=4 AND @d>20) OR (@m=5 AND @d<21) Then '<En>Taurus</En><Ru>Телец</Ru><Ch>95</Ch>'
    When (@m=5 AND @d>20) OR (@m=6 AND @d<22) Then '<En>Gemini</En><Ru>Близнецы</Ru><Ch>96</Ch>'
    When (@m=6 AND @d>21) OR (@m=7 AND @d<23) Then '<En>Cancer</En><Ru>Рак</Ru><Ch>97</Ch>'
    When (@m=7 AND @d>22) OR (@m=8 AND @d<24) Then '<En>Leo</En><Ru>Лев</Ru><Ch>98</Ch>'
    When (@m=8 AND @d>23) OR (@m=9 AND @d<24) Then '<En>Virgo</En><Ru>Дева</Ru><Ch>99</Ch>'
    When (@m=9 AND @d>23) OR (@m=10 AND @d<24) Then '<En>Libra</En><Ru>Весы</Ru><Ch>100</Ch>'
    When (@m=10 AND @d>23) OR (@m=11 AND @d<23) Then '<En>Scorpio</En><Ru>Скорпион</Ru><Ch>101</Ch>'
    When (@m=11 AND @d>22) OR (@m=12 AND @d<22) Then '<En>Sagittarius</En><Ru>Стрелец</Ru><Ch>102</Ch>'
    When (@m=12 AND @d>21) OR (@m=1 AND @d<21) Then '<En>Capricorn</En><Ru>Козерог</Ru><Ch>103</Ch>'
    When (@m=1 AND @d>20) OR (@m=2 AND @d<21) Then '<En>Aquarius</En><Ru>Водолей</Ru><Ch>104</Ch>'
    When (@m=2 AND @d>20) OR (@m=3 AND @d<21) Then '<En>Pisces</En><Ru>Рыбы</Ru><Ch>105</Ch>'
  End  
--вернуть строку формата строки/xml
--<Bd> - день и месяц рождения + год (текущий или следующий)
--<Rd> - осталось до дня рождения
--<En> - наименование знака гороскопа по англицки
--<Ru> - наименование знака гороскопа по русски
--<Ch> - код знака зодиака для функции Char (шрифт Windings)

--  Return convert (xml,'<Zodiac><Bd>'+left(@bsDate,10)+'</Bd><Rd>'+CONVERT(varchar,@Rd)+'</Rd>' +  @uName+'</Zodiac>')
  Return '<Zodiac><Bd>'+left(@bsDate,10)+'</Bd><Rd>'+CONVERT(varchar,@Rd)+'</Rd>' +  @uName+'</Zodiac>'
 End
пишем vbscript

Код: Выделить всё

Dim XML

Sub Goroskop()

 Dim xmlHTTP, Root, Find, Node, t,url
 Dim Desc, gA, gB, gF,mD,UserName, sel,tmp

    tmp = LsVars.GetVarValue("tmp")
    find=lCase(mid(tmp,InStr(1,tmp,"<En>")+4,InStr(1,tmp,"</En>")-(InStr(1,tmp,"<En>")+4)))  'достанем англоязычное название знака

    md = FormatDateTime(Now(), 2)
    md = Right("0000" + CStr(Year(md)), 4) + Right("00" + CStr(Month(md)), 2) + Right("00" + CStr(Day(md)), 2)
'    md = Right("0000" + CStr(Year(Now())), 4) + Right("00" + CStr(Month(Now())), 2) + Right("00" + CStr(Day(Now())), 2)

    url = "http://i.horo.ru/rss/" & Find & ".xml"                                                                         'сформируем адрес

    Set XML = CreateObject("Msxml.DOMDocument")
          XML.async = False
          If Not XML.Load(url) = True Then
            MsgBox "Документ не загружен" '& vbcr & url
            Exit Sub
          Else
            Set Root = XML.documentElement
    
            For Each Node In Root.GetElementsByTagName("channel")
              Desc = Node.childNodes(2).Text                                                                            'прочитаем заголовок
            Next
      
            For Each Node In Root.GetElementsByTagName("item")                                        'прочитаем 3 гороскопа
              If Left(Node.childNodes(1).Text, Len(Node.childNodes(1).Text) - 2) = "http://www.ignio.com/r/daily/?rss" & mD Then gA = Node.childNodes(2).Text
              If Left(Node.childNodes(1).Text, Len(Node.childNodes(1).Text) - 2) = "http://www.ignio.com/r/dailybus/?rss" & mD Then gB = Node.childNodes(2).Text
              If Left(Node.childNodes(1).Text, Len(Node.childNodes(1).Text) - 2) = "http://www.ignio.com/r/dailycook/?rss" & mD Then gF = Node.childNodes(2).Text
            Next
          End If
 
          Set Root = Nothing
    Set XML = Nothing
    find=mid(tmp,InStr(1,tmp,"<Rd>")+4,InStr(1,tmp,"</Rd>")-(InStr(1,tmp,"<Rd>")+4))
    if find=0 then
       find="Поздравляем с днем рождения!!!"
    else
       find="До Вашего дня рождения осталось всего "+find+" д."
    end if
вызываем его откуда нужно, например из действия

Код: Выделить всё

z_data = AttribGetDefault ( User_Obj , LinkID_0 , z_data_atr , today() )
tmp = Set ( f_ExecSQLSelect_2 ( 'select lsdbo.ric_get_zodiac(~''+string(z_data ,'yyyy.mm.dd')+'~')' , '' , '' ) )
шаг с вызовом скрипта vbscript
Захват-40.gif
Захват-40.gif (34.07 КБ) 19772 просмотра
например для формы - вычисляемое поле с именем zodiak

Код: Выделить всё

f_ExecSQLSelect_3 ( 'select lsdbo.ric_get_zodiac(~''+string(a100000006300005,'yyyy.mm.dd')+'~')' , '' , '' , '' , 10) 
вычисляемое поле вытаскивающее из полученной строки Zodiaс нужный фрагмент
русское название

Код: Выделить всё

mid(zodiac,pos(zodiac,'<Ru>',1)+4,pos(zodiac,'</Ru>',1)-(pos(zodiac,'<Ru>',1)+4))
графическое изображение Windings и т.д.

Код: Выделить всё

Char( number(mid(zodiac,pos(zodiac,'<Ch>',1)+4,pos(zodiac,'</Ch>',1)-(pos(zodiac,'<Ch>',1)+4)) ) )
выглядит типа так на форме
Захват-38.gif
Захват-38.gif (13.08 КБ) 19772 просмотра
или так в форме из пользовательского отчета

Код: Выделить всё

select * from LSDBO.Ric_Get_ePersonnel(:id) order by ffio

Код: Выделить всё

......Select *
   From
        (Select isobject_id, fFIO, fID, uCn from LSDBO.Ric_Get_Personnel(@ObjID) /*where dMnemo='Подч'*/) as tPersonnel 
     left join 
        (Select 
                (select lsdbo.ric_get_zodiac(vv6.value)) as fBdDate,   --День рождения
                vv7.value as fStatus,   --Статус ...........
Захват-39.gif
Захват-39.gif (9.16 КБ) 19772 просмотра
Формат возвращаемой строки намеренно взят xml в ожидании когда с одной стороны Лоция наконец то его подключит а с другой в плане того что мы сами без Лоции переходим на хранение xml строк с которыми на сервере работаем как с xml после приведения типов
....
два важных момента
1й - дата передаваемая в процедуру в виде строки должна быть отформатирована как в атрибуте или так 'dd.mm.yyyy' или так 'yyyy.mm.dd'
2й - гороскоп гораздо позитивнее первого варианта (другой сайт) - и что характерно - он действительно работает :wink: :wink: :wink: :wink: например у меня сегодня 'плохой' день - и я конечно же наехал на техподдержку Лоции по ошибке, и случайно удалил архив объектов на 100 элементов с полным уничтожением половины информации :roll: :wink: :wink: замучался восстанавливать
да и 3й момент
конечно мы обратились к администрации сайта с гороскопами и они любезно согласились на то что мы используем их контент (нас правда мало....) так что перед плотным использованием лучше спросить разрешение у них - а то отключат нафиг всех :wink: :wink: :wink: :wink:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Старик Крупский
Активный участник
Сообщения: 803
Зарегистрирован: 27 июл 2006, 22:17
Откуда: Москва

Re: Zodiac финал

Сообщение Старик Крупский »

Александр писал(а): конечно мы обратились к администрации сайта с гороскопами и они любезно согласились на то что мы используем их контент
Ты наверняка забыл спросить у Лоции любезного разрешения лазить по сайтам с гороскопами :lol: :lol: :lol:
"Лучше меньше, да лучше" (C)
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Re: Zodiac финал

Сообщение Александр »

:wink:
некоторые темы этого раздела - вполне - иллюстрации к книге по Лоции на которую мы их подвигнули и они .... надо помочь с материалом! :wink: :wink:

так что СК предлагаю тебе тоже выложить какой нибудь аппетитный кусочек кода - ведь им выдумывать примеры из головы - проще застрелиться :wink: а так все живо и просто и естественно

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Re: Zodiac финал

Сообщение Александр »

хотите сделать ваших женщин лучше!?
добавьте в гороскоп эротический раздел
замена вышеописанного скрипта - СПЕЦИАЛЬНО К 8 МАРТА

Код: Выделить всё

Dim XML

Sub Goroskop()

 Dim xmlHTTP, Root, Find, Node, t,url
 Dim Desc, gA, gB, gF, gL, gE, mD, UserName, sel, tmp, Sex

    tmp = LsVars.GetVarValue("tmp")
    Sex= LsVars.GetVarValue("Sex")

    find=lCase(mid(tmp,InStr(1,tmp,"<En>")+4,InStr(1,tmp,"</En>")-(InStr(1,tmp,"<En>")+4)))  'достанем англоязычное название знака

    md = FormatDateTime(Now(), 2)
    md = Right("0000" + CStr(Year(md)), 4) + Right("00" + CStr(Month(md)), 2) + Right("00" + CStr(Day(md)), 2)
'    md = Right("0000" + CStr(Year(Now())), 4) + Right("00" + CStr(Month(Now())), 2) + Right("00" + CStr(Day(Now())), 2)

    url = "http://i.horo.ru/rss/" & Find & ".xml"                                                                         'сформируем адрес

    Set XML = CreateObject("Msxml.DOMDocument")
          XML.async = False
          If Not XML.Load(url) = True Then
            MsgBox "Документ не загружен" '& vbcr & url
            Exit Sub
          Else
            Set Root = XML.documentElement
    
            For Each Node In Root.GetElementsByTagName("channel")
              Desc = Node.childNodes(2).Text                                                                            'прочитаем заголовок
            Next
      
            For Each Node In Root.GetElementsByTagName("item")                                        'прочитаем 5 гороскопов
              If Left(Node.childNodes(1).Text, Len(Node.childNodes(1).Text) - 2) = "http://www.ignio.com/r/daily/?rss" & mD Then gA = Node.childNodes(2).Text
              If Left(Node.childNodes(1).Text, Len(Node.childNodes(1).Text) - 2) = "http://www.ignio.com/r/dailybus/?rss" & mD Then gB = Node.childNodes(2).Text
              If Left(Node.childNodes(1).Text, Len(Node.childNodes(1).Text) - 2) = "http://www.ignio.com/r/dailycook/?rss" & mD Then gF = Node.childNodes(2).Text
              If Left(Node.childNodes(1).Text, Len(Node.childNodes(1).Text) - 2) = "http://www.horo.ru/lov/tom/" & Find & ".html?rss" & mD Then gL = Node.childNodes(2).Text
              If Left(Node.childNodes(1).Text, Len(Node.childNodes(1).Text) - 2) ="http://www.ignio.com/r/dailyero/?rss" & mD Then gE = Node.childNodes(2).Text
            Next
          End If


          Set Root = Nothing
    Set XML = Nothing
    find=mid(tmp,InStr(1,tmp,"<Rd>")+4,InStr(1,tmp,"</Rd>")-(InStr(1,tmp,"<Rd>")+4))
    if find=0 then
       find="Поздравляем с днем рождения!!!"
    else
       find=""
    end if

    tmp="  -" & "Общий" & vbCr & gA & vbCr & vbcr & "  -" & "Бизнес" & vbCr & gB & vbCr & vbcr & "  -" & "Кулинарный" & vbCr & gF  & vbCr & vbcr & "  -" & "о Любви" & vbCr & gL & vbcr & vbcr & find

  If len(tmp)>1024 then
      Select Case Sex
        Case "Муж." 
'          tmp="  -" & "Общий" & vbCr & gA & vbCr & vbcr & "  -" & "Бизнес" & vbCr & gB & vbCr & vbcr & "  -" & "Кулинарный" & vbCr & gF & vbcr & vbcr & find
          tmp="  -" & "Весенний" & vbCr & gE & vbCr & vbcr & "  -" & "Бизнес" & vbCr & gB & vbCr & vbcr & "  -" & "Кулинарный" & vbCr & gF & vbcr & vbcr & find
        Case "Жен."
'          tmp= "  -" & "Общий" & vbCr & gA & vbCr & vbcr & "  -" & "Бизнес" & vbCr & gB & vbCr & vbcr & "  -" & "о Любви" & vbCr & gL & vbcr & vbcr & find
          tmp= "  -" & "Весенний" & vbCr & gE & vbCr & vbcr & "  -" & "Бизнес" & vbCr & gB & vbCr & vbcr & "  -" & "о Любви" & vbCr & gL & vbcr & vbcr & find
      End Select
    End If
    
    MsgBox tmp, vbOKOnly + vbInformation + vbSystemModal, Desc+".  " '+find

End Sub
:wink: :wink: :wink: :wink: :wink:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Старик Крупский
Активный участник
Сообщения: 803
Зарегистрирован: 27 июл 2006, 22:17
Откуда: Москва

Re: Zodiac финал

Сообщение Старик Крупский »

Александр писал(а):хотите сделать ваших женщин лучше!?
Смилуйся, Александр! Куда уж лучше?! :lol:
"Лучше меньше, да лучше" (C)
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Re: Zodiac финал

Сообщение Александр »

:wink: :wink: :wink: :wink: :wink:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Ответить