Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fells

[Resolvido] Comparação de Data não dá certo

Recommended Posts

Boa tarde galera.

 

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

 

Desenvolvo em ASP. Peguei um sistema meio pronto já e dei andamento. Nele 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 para calibrar 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 CALIBRAÇÃO VENCIDA sejam exibidos em 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 vencidas caso seja menor que a data atual.
'***** MAIS NÃO ESTA OCORRENDO ISSO

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, continuo mexendo no codigo e não consigo entender o pq ele não compara a data e pinta os itens vencidos.

Porem eu consegui simplificar um pouco e vou tentar explicar novamente pra vcs entenderem e tentar ajudar.

Tudo é exibido em preto, os vencidos e os a vencer. Segue trecho exemplo do codigo.

 

'****************************************************************************************************************
'Cria-se a data_atual, variavel com mes/ano do sistema
mes_atual = Month(Date)
ano_atual = Year(Date)

data_atual= mes_atual & "/" & ano_atual
  	        'trecho que adiciona o zero a esquerda no mes que tiver apenas 1 digito.
	If Len(MONTH(data_atual)) < 2 THEN
	data_atual = "0"& Month(date) &"/"& Year(date)
	End If

' Cria-se a RsProx, variavel com mes/ano da prox calibração
RsProx = Month(rs.Fields("Prox")) &"/"& Year(rs.Fields("Prox"))

  	        'trecho que adiciona o zero a esquerda no mes que tiver apenas 1 digito
	If Len(Month(rs.Fields("Prox"))) < 2 THEN
	RsProx = "0"& Month(rs.Fields("Prox")) &"/"& Year(rs.Fields("Prox"))
	End If

  If (RsProx < data_atual) THEN
' Se calibração menor que data atual, item vencido, pinta de vermelho
  %>
  <td width="15%" align="center">
	<font size="1" color = '#FF0000' ><%=rs.Fields("Num_patr").Value%></font>
  </td>

' Se calibração maior igual que data atual, item a vencer, fica como preto.
  <%Elseif (RsProx >= data_atual) THEN%>
   <td width="10%" align="center">
        <font size="1" color = '#000000'><%=rs.Fields("Num_patr").Value%></font>
   </td>

' Caso não atenda as condições acima
<%Else%>
<td width="15%" align="center">
         <font size="1" color = '#DAA520'>Há erro(s) aqui!</font>
   </td>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só eu interajo comigo msm! kkkkkkk

 

Peguei um errinho. Rodei o codigo pedindo pra ele comparar apenas os anos das calibrações com o ano atual.

Aiiii siiiiiim ele pintou o que eh menor que 2012 de vermelho. E o que eh maior igual ficou preto.

Logo o problema esta sendo quando a data esta no formato MM/AAAA. Teria que fazer uma conversão pra comparar uma data com a outra??

AAAA comparado com AAAA da certo. Agora MM/AAAA com MM/AAAA não da.

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um response.write na sua string SQL para ver o que esta sendo passado, o que você pode fazer também , é ao inves de converter e comparar pela SQL fazer direto no code ASp usando CDate e DateDiff

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um response.write na sua string SQL para ver o que esta sendo passado, o que você pode fazer também , é ao inves de converter e comparar pela SQL fazer direto no code ASp usando CDate e DateDiff

 

Bom dia Xanburzum.

Entao cara, esta complciado pq peguei isso na metade do caminho ja e eu não entendo muito, mais a intrução SLQ esta assm:

 

sql = "SELECT *, convert(NVARCHAR(10), Dat_calibr, 103) AS Dat , convert(NVARCHAR(10), Prox_calibr, 103) AS Prox "
'Dat_calibr --> Data da ultima calibração
'Prox_calibr --> Data da proxima calibração

 

Creio que seja ai, quando ele pega os campos de data e converte pra NVARCHAR que dá o "erro" lá na frente de nao pintar os itens vencidos.

Pq depois, pra exibir as informações, eu faço um tratamento pra ele ficar MM/AAAA e comparo com a data do sistema.

 

 

____________________________________________________________________________

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu faria como o xanburzum sugeriu, compararia no asp, dessa forma poderia tentar comparar mm/aa e se não der certo, faria 2 comparações uma dentro da outra, sendo a do ano a primeira comparação, seguida pela comparação do mês.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu faria como o xanburzum sugeriu, compararia no asp, dessa forma poderia tentar comparar mm/aa e se não der certo, faria 2 comparações uma dentro da outra, sendo a do ano a primeira comparação, seguida pela comparação do mês.

 

Faaala Vinicius, td jóia cara?

 

O xanburzum deu uma boa sugestão. Estava tentando pesquisar direitinho sobre o que ele disse, pois não sei como fazer no codigo.

 

____________________________________________________________________________

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz uma pesquisa no fórum existem ótimos exemplos, e caso surgir mais duvidas, não hesite em postar

Compartilhar este post


Link para o post
Compartilhar em outros sites

(RESOLVIDO)

 

Aee galera. Valew pelas orientações.

ResolveMOS o problema.

 

Segue codigo de como ficou.

 


'montei a data do sistema e usei o CDate conforme me disseram.
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

'Fiz a instrução SQL pra trazer os dados.
sql = "SELECT * FROM [....]

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

 Do While Not rs.EOF 
 RsProx = 0

' Criei uma variavel com a data das proximas calibrações do BD
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		
 %><tr><%

'**************************************************************************************************
'NÚMERO DO PATRIMONIO -- Aqui é só um exemplo de como comparei a data do sistema com a data da proxima calibração
'para que seja pintado de vermelho aquilo que esta vencido.
'**************************************************************************************************

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.