Ir para conteúdo
Fórum Script Brasil
  • 0

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


Fells

Pergunta

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 %>

Editado por Fells
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...