Ir para conteúdo

POWERED BY:

Arquivado

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

empirerock

problemas em Contar registros informando data inicial e final

Recommended Posts

Estou fazendo um código que me conte quantos registros tenho no banco mysql de um determinado campo(no caso "tiporm"), informando a data inicial e final.

 

Só que os valores estão saindo zerados, não está contando.

 

segue abaixo o código:

 

 

DataInicial = Request.Form("data_inicial")
DataFinal = Request.Form("data_final")

'select no banco
strSQL1 = "SELECT COUNT(tiporm) as total1 FROM rm WHERE tiporm = 'RECLAMAÇÃO' AND datacad >" & DataInicial & " AND datacad <" & DataFinal & ""
   
strSQL2 = "SELECT COUNT(tiporm) as total2 FROM rm WHERE tiporm = 'RECEITAS' AND datacad >" & DataInicial & " AND datacad <" & DataFinal & ""

strSQL3 = "SELECT COUNT(tiporm) as total3 FROM rm WHERE tiporm = 'ELOGIO' AND datacad >" & DataInicial & " AND datacad <" & DataFinal & ""
  
strSQL4 = "SELECT COUNT(tiporm) as total4 FROM rm WHERE tiporm = 'SUGESTÃO' AND datacad >" & DataInicial & " AND datacad <" & DataFinal & ""
  
strSQL5 = "SELECT COUNT(tiporm) as total5 FROM rm WHERE tiporm = 'INFORMAÇÃO' AND datacad >" & DataInicial & " AND datacad <" & DataFinal & ""

 

 

Se eu colocar só com a data inicial funciona, más com a data final não funciona

strSQL1 = "SELECT COUNT(*) as total1 FROM rm WHERE tiporm = 'RECLAMAÇÃO' AND datacad >" & DataInicial & ""

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os campos de DATA são de que tipo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dê uma pesquisada por "Between" éuma função da linguagem SQL que faz o que você precisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tô tentando com between e também não estou conseguindo

 

 

'select no banco
strSQL1 = "SELECT COUNT(*) as total1 FROM rm WHERE tiporm = 'RECLAMAÇÃO' AND datacad BETWEEN " & DataInicial & " AND " & DataFinal & ""

Compartilhar este post


Link para o post
Compartilhar em outros sites

use # para delimitar a data

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não adiantou, dá erro:

 

Tipo de erro:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[MySQL][ODBC 3.51 Driver][mysqld-5.0.27-community-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

/sacintra/relatorio1.asp, line 28

 

LINHA28: Set rs1=Conexao.Execute(strSQL1)

 

strSQL1 = "SELECT COUNT(*) as total1 FROM rm WHERE tiporm = 'RECLAMAÇÃO' AND datacad BETWEEN #" &  DataInicial & "# AND #" &  DataFinal  &"#"

 

E mesmo fazendo para contar com data maior que 17/9/2008 ele não conta direito:

 

 

strSQL1 = "SELECT COUNT(*) as total1 FROM rm WHERE tiporm = 'RECLAMAÇÃO' and datacad > '17/9/2008'"

Será que alguém aqui já passou por esse problema que estou tendo:

 

tenho de contar quantas reclamações, elogios, etc teve em um determinado perídodo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou explicar melhor o que preciso.

 

 

esse campo "tiporm" terá valores assim:

RECLAMAÇÃO

ELOGIO

SUGESTÃO

INFORMAÇÃO

RECEITAS

 

O que quero é um relatório que conte quantas RECLAMAÇÃO, ELOGIO, etc... tiveram num determinado período.

 

O relatório deverá sair assim:

 

 

Relatório período: 1/9/2008 a 30/9/2008

-------------------------------

Total de Reclamações: 10

Total de Elogios: 5

Total de Solicitações de receitas: 6

Total de Sugestões: 4

Total de Informações: 9

-------------------------------------

Compartilhar este post


Link para o post
Compartilhar em outros sites

O formato de data padrão do MySQL é "aaaa-mm-dd" teste com essa substituição e poste o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O formato de data padrão do MySQL é "aaaa-mm-dd" teste com essa substituição e poste o resultado.

 

 

Eu cadastrei manualmente a data no banco com o formato dd-mm-aaaa para teste

 

Bom, vou jogar fazer uns testes.

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os Front-Ends de gerenciamento de BD's normalmente permitem a entrada "visual" no modo padrão do sistema/local mas a SQL usa esse formato que indiquei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os Front-Ends de gerenciamento de BD's normalmente permitem a entrada "visual" no modo padrão do sistema/local mas a SQL usa esse formato que indiquei.

 

Entendi.

 

 

O mais perto que consegui chegar foi com esse código abaixo, porém ele não está respentando período que estou colocando. Ele já me dá o total de tudo e não por período

 

 

DataInicial = Request.Form("data_inicial")

DataFinal = Request.Form("data_final")

 

 

strSQL1 = "SELECT COUNT(tiporm) as total1 FROM rm WHERE datacad BETWEEN '" &DataInicial& "' AND '" &DataFinal& "' and tiporm = 'RECLAMAÇÃO'"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os Front-Ends de gerenciamento de BD's normalmente permitem a entrada "visual" no modo padrão do sistema/local mas a SQL usa esse formato que indiquei.

 

Entendi.

 

 

O mais perto que consegui chegar foi com esse código abaixo, porém ele não está respentando período que estou colocando. Ele já me dá o total de tudo e não por período

 

 

DataInicial = Request.Form("data_inicial")

DataFinal = Request.Form("data_final")

 

 

strSQL1 = "SELECT COUNT(tiporm) as total1 FROM rm WHERE datacad BETWEEN '" &DataInicial& "' AND '" &DataFinal& "' and tiporm = 'RECLAMAÇÃO'"

 

 

 

Puts. verdade mesmo. rs

 

Com esse código que coloquei po último, informando a data no form inicial: 2008/9/1 a Final: 2008/9/15

 

Aí assim dá o valor correto.

 

Então como devo proceder?

Pois fica estranho digitar no form a data 2008/9/1

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce pode digitar normal e inverter antes da consulta sem interferencia do usuario

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce pode digitar normal e inverter antes da consulta sem interferencia do usuario

valeu por responder também.

 

Más como inverteria isso? com replace?

 

 

 

Nossa nunca fiz replace de data. Como que faz isso? rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use as funções IsDate(), CDate(), Day(), Month() e Year() para isso. Caso não consiga fazer dê uma olhada no "Laboratório de Scripts" pois lá existe uma função para formatação postada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use as funções IsDate(), CDate(), Day(), Month() e Year() para isso. Caso não consiga fazer dê uma olhada no "Laboratório de Scripts" pois lá existe uma função para formatação postada.

vou pesquisar sobre isso. obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado a todos que me responderam. Valeu Salgado!

 

Agora deu certo. Ficou assim:

 

DataInicial = Request.Form("data_inicial")

DataI = DataInicial
DataI = Year(Cdate(DataI)) & "-" & Right("0"&Month(Cdate(DataI)),2) & "-" & Right("0"&Day(Cdate(DataI)),2)


DataFinal = Request.Form("data_final")

DataF = DataFinal
DataF = Year(Cdate(DataF)) & "-" & Right("0"&Month(Cdate(DataF)),2) & "-" & Right("0"&Day(Cdate(DataF)),2)



strSQL1 = "SELECT COUNT(tiporm) as total1 FROM rm WHERE datacad BETWEEN '" &DataI& "' AND '" &DataF& "' and tiporm = 'RECLAMAÇÃO'"

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.