Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Comparação de datas não dá certo


Fells

Question

Bom dia galera, Feliz 2012.

Bom, tenho um probleminha e gostaria da ajuda de vocês.

Desenvolvo em ASP. Peguei um sistema meio pronto já onde há uma instrução (no codigo abaixo) para trazer dados do SQL. Esses dados se alteram de acordo com quem acessa o sistema. O mesmo identifica o cpf do usuario e traz os dados do banco que se referem aquele determinado usuário apenas.

É um sistema de calibração de instrumentos que exibe alguns dados do item juntamente com a ultima calibração feita (Dat_calibr) e a proxima a se fazer (Prox_calibr).

O problema é que não consigo fazer com que os dados com proxima calibração vencida sejam exibidos pintados de vermelho e os itens a vencer continuem em preto. Ele simplesmente esta exibindo TUDO em preto.

Abaixo tem um exemplo (NÚMERO DO PATRIMONIO) de como tentei fazer, mais não funfou. Aparentemente estou com problemas pra comparar datas.

Parece idiota, mais esta me dando mta dor de cabeça tentar resolver porque não estou conseguindo. rs Vlwws

'Select para pegar os dados do banco pertinentes ao usuário logado

sql = "SELECT *, convert(NVARCHAR(10), Dat_calibr, 103) AS Dat , convert(NVARCHAR(10), Prox_calibr, 103) AS Prox "

sql = sql & " FROM Instrumentos "

sql = sql & " INNER JOIN Instr_local ON Instrumentos.Cod_local = Instr_local.Cod_local AND Instr_local.CPF_respons =" & "'" & request("CPF") & "'"

sql = sql & " WHERE (" 'Calibrações vencidas e que vencem no mes atual

sql = sql & " YEAR(Instrumentos.Prox_calibr) < YEAR(GETDATE()) OR "

sql = sql & " MONTH(Instrumentos.Prox_calibr) <= MONTH(GETDATE()) AND YEAR(Instrumentos.Prox_calibr) = YEAR(GETDATE())"

sql = sql & " ) OR"

sql = sql & " (" 'Calibrações a vencer no mês seguinte e que estão marcadas como "Notificar calibração a vencer"

sql = sql & " ((MONTH(Instrumentos.Prox_calibr) = MONTH(DATEADD(MONTH, +1, GETDATE())) AND MONTH(DATEADD(MONTH, +1, GETDATE())) <=12) AND YEAR(Instrumentos.Prox_calibr) = YEAR(GETDATE()) ) OR"

sql = sql & " ((MONTH(Instrumentos.Prox_calibr) = MONTH(DATEADD(MONTH, +1, GETDATE())) AND MONTH(DATEADD(MONTH, +1, GETDATE())) =13) AND YEAR(Instrumentos.Prox_calibr) = YEAR(DATEADD(YEAR, +1, GETDATE())) )"

sql = sql & " AND Instr_local.flg_aviso_calibracao_avencer = 1 )"

sql = sql & " ORDER BY Instrumentos.Prox_calibr"

Set rs = Server.CreateObject("ADODB.Recordset")

rs.Open sql, Session("Gestao_conn"), 3, 3

If Not rs.bof AND Not rs.EOF Then

rs.MoveFirst

' Cria-se uma variavel com mes/ano do sistema

DataSistem = Month(date) &"/"& Year(date)

' trecho que adiciona o zero a esquerda no mes que tiver apenas 1 digito. Ex.: dd/m/aaaa - transforma para dd/MM/aaaa!

If Len(MONTH(DataSistem)) < 2 THEN

DataSistem = "0"& Month(date) &"/"& Year(date)

End If

Do While Not rs.EOF

%><tr><%

'************************************************************************************************************************

'NÚMERO DO PATRIMONIO **************************************************************************************************

'If faz a comparação das datas... pega-se com o MID o mes e ano e compara com a data do sistema (DataSistem)

'e pinta de vermelho os dados das calibrações vencidos.

If (MID(rs.Fields("Prox"),4,7) < DataSistem) THEN

%>

<td width="15%" align="center">

<font size="1" color = "red"><%=rs.Fields("Num_patr").Value%></font>

</td>

<%Else%>

<td width="15%" align="center">

<font size="1"><%=rs.Fields("Num_patr").Value%> - <%=MID(rs.Fields("Prox"),4,7)%> - <%=DataSistem%> </font>

</td>

<% End if %>

Edited by Fells
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Assim... pra comparar datas você tem que usar muitas vezes a função cdate pra informar pro asp que aquilo é uma data...

Daí o que te aconselho é o seguinte:

Como só te interessam o mês e ano... coloque o dia 01 na frente dos dois, sacou?

Ficaria assim:

If cdate("01"&"/"&MID(rs.Fields("Prox"),4,7)) < cdate ("01"&"/"&DataSistem) THEN
Deve funcionar... testa aí e posta aqui os resultados ok? Última coisa... se não funcionar, tenta fazer com que sua condicional mude apenas a cor do texto e não toda a tag td... assim:
<td width="15%" align="center">

<%
If cdate("01"&"/"&MID(rs.Fields("Prox"),4,7)) < cdate ("01"&"/"&DataSistem) THEN%>
<font size="1" color = "red"><%=rs.Fields("Num_patr").Value%></font>
<%else%>
<font size="1"><%=rs.Fields("Num_patr").Value%> - <%=MID(rs.Fields("Prox"),4,7)%> - <%=DataSistem%> </font>
<%end if%>

</td>

Sacou?

Link to comment
Share on other sites

  • 0

[RESOLVIDO]

Bom dia Rafaeelll...

Vlwws cara! Isso mesmo... funfou. você me ajudou pácas... Ta aee o código em que me ajudou.

Ele compara certinho agora. O problema é que a instrução sql não esta trazendo o que eu de fato gostaria, mais vou abrir outro post porque já é outro assunto.

Valeu mesmo cara.

' Cria-se uma variavel com mes/ano do Sistema

Datasistem = 0

DataSistem = CDate(01 &"/"& Month(date) &"/"& Year(date))

'trecho que adiciona o zero a esquerda no mes que tiver apenas 1 digito. Ex.: dd/m/aaaa - transforma para dd/MM/aaaa!

If Len(MONTH(DataSistem)) < 2 THEN

DataSistem = CDate(01 &"/0"& Month(date) &"/"& Year(date))

End If

' Cria-se uma variavel com mes/ano do BD

RsProx = 0

RsProx = CDate(01 &"/"& Month(rs.Fields("Prox")) &"/"& Year(rs.Fields("Prox")))

'trecho que adiciona o zero a esquerda no mes que tiver apenas 1 digito. Ex.: dd/m/aaaa - transforma para dd/MM/aaaa!

If Len(Month(rs.Fields("Prox"))) < 2 THEN

RsProx = CDate(01 &"/0"& Month(rs.Fields("Prox")) &"/"& Year(rs.Fields("Prox")))

End If

'Exemplo de um dos itens que é exibido no sisteminha.

'NÚMERO DO PATRIMONIO *******************************************************************************

'If faz a comparação das datas... e pinta de vermelho os dados das calibrações vencidos.

If (RsProx < DataSistem) THEN

%>

<td width="15%" align="center">

<font size="1" color = '#FF0000' ><%=rs.Fields("Num_patr").Value%></font>

</td>

<%Elseif (RsProx >= DataSistem) THEN%>

<td width="10%" align="center">

<font size="1" color = '#000000'><%=rs.Fields("Num_patr").Value%></font>

</td>

<%Else%>

<td width="15%" align="center">

<font size="1" color = '#DAA520'>Há erro(s) aqui!</font>

</td>

<% End if

'NÚMERO DO PATRIMONIO *******************************************************************************

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...