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

Problema com virada de ano


dcoder

Pergunta

Bom dia,

Meu sistema exibe resultados mostrando os meses de janeiro a julho, ou seja de 7 em 7 meses. Fazendo os testes observei que ao chegar o mes de julho o sistema não consegue exibir os outros meses, da erro, pois iria exibir de julho a janeiro pegando assim o novo ano.

Como posso resolver este problema ? dei uma pesquisada e não consegui solução...

minha query é esta:

jan_760 = ("Select item, sum(total) as DtEntrega from FIAT where month(DtEntrega)=01 and item = 517680760 group by item order by sum(total)")
set jan760 = conexao.execute(jan_760)

Obrigado.

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

Posts Recomendados

  • 0

Obrigado Rafael, já tinha tentado usar o dateadd como mencionou no tópico anterior, com a outra parte do sistema estava dando certo, mais agora esta dando erro:

'mes_atual    = datepart  ("m", date)
janeiro      = dateadd   ("m", -1, now)

'**********************************************************************
'consultas para o item 090
jan_090=("Select item, sum(total) as DtEntrega from FIAT where DtEntrega='"&janeiro&"' and item = 467711090 group by item order by sum(total)")
set jan090 = conexao.execute(jan_090)   'linha 19
Esta dando erro: Microsoft JET Database Engine (0x80040E07) Tipo de dados imcompatível na expressão de critério. /sigma/inicio_.asp, line 19 parte do código onde exibe o resultado:
<%
    if jan090.EOF then
    Response.write("0")
    Else
    Response.write jan090("DtEntrega")
    end if
%>

[]'s

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

  • 0

Não estao não, estao como data normal mesmo...

[]'s

-------

Olha, já tentei de todas essas maneiras:

mes1        =  Month(date)-1
janeiro      =  datepart   ("m","01-01-2009")
mes1        =  Month(month(date)-1)
janeiro      =  dateadd   ("m", -1, now)
todas ocorrem o mesmo erro: Microsoft JET Database Engine (0x80040E07) Tipo de dados imcompatível na expressão de critério. /sigma/inicio_.asp, line 21 assim funciona, obtenho o resultado que preciso, porém não vai adiantar, quando virar o ano vai dar pau:
jan_090=("Select item, sum(total) as DtEntrega from FIAT where month(DtEntrega)=01 and item = 467711090 group by item order by sum(total)")
'response.write jan_090
'response.end
set jan090 = conexao.execute(jan_090)

Ta osso o negocio....

[]'s

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

  • 0

dia =  datepart ("d","janeiro")
mes =  datepart ("m","janeiro")
ano =  datepart ("yyyy","janeiro")

janeiro = dia &"/"&mes&"/"&ano

jan_760 = ("Select item, sum(total) as DtEntrega from FIAT where month(DtEntrega)=01 and item = 517680760 group by item order by sum(total)")
set jan760 = conexao.execute(jan_760)

[]'s rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, como sabe desse item 760 ?

Vou tentar aqui....vlww

[]'s

Deu erro de novo:

Erro de tempo de execução do Microsoft VBScript (0x800A000D)

Tipos incompatíveis: '[string: "janeiro"]'

/sigma/inicio_.asp, line 466

Mais consegui dessa maneira:

mesant      = Month(date)-1
mesatual    = Month(date)

jan_090=("Select item, sum(total) as DtEntrega from FIAT where month(DtEntrega)='"&mesant&"' and item = 467711090 group by item order by sum(total)")
response.write jan_090
'response.end
set jan090 = conexao.execute(jan_090)

fev_090=("Select item, sum(total) as DtEntrega from FIAT where month(DtEntrega)='"&mesatual&"'and item = 467711090 group by item order by sum(total)")
set fev090 = conexao.execute(fev_090)

preciso adaptar isso para reconhecer o proximo ano tambem...

[]'s

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

  • 0
Acho que o erro é porque você não colocou o "#" para indicar que o campo era do tipo data !

Tente assim:

jan_090=("Select item, sum(total) as DtEntrega from FIAT where DtEntrega=#'"&janeiro&"'# and item = 467711090 group by item order by sum(total)")

Fiz da maneira que disse, da erro:

Microsoft JET Database Engine (0x80040E07)

Erro de sintaxe na data na expressão de consulta 'month(DtEntrega)=#'10/2/2009'# and item = 467711090'.

/sigma/inicio_.asp, line 41

Obrigado...

Link para o comentário
Compartilhar em outros sites

  • 0
Mesmo erro:

Microsoft JET Database Engine (0x80040E07)

Erro de sintaxe na data na expressão de consulta 'month(DtEntrega)=#10/2/2009# and item = 467711090'.

/sigma/inicio_.asp, line 41

olha che.... não faço ideia da onde venha isso:

month(DtEntrega)

Tem certeza que sua query esta exatamente igual da forma que o Bareta postou?

Confirme isso com muita atenção... deve haver algum pequeno erro ainda!

Só pra confirmar: DtEntrega é um campo do seu BD, certo? Está no formato data, é isso?

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia,

Sim Rafael, esta correta, pois bem, eu consegui solucionar uma parte do problema, olhe a query e o código:

mes = Month(date)-1
ano = Year(date)
janeiro1 = mes & "/" & ano
response.write janeiro


mes_atual = Month(date)
ano_atual = Year(date)
fevereiro1 = mes_atual & "/" & ano_atual



mes_mar = Month(date)+1
ano_mar = Year(date)
marco1 = mes_mar & "/" & ano_mar
'response.write marco1


mes_abril = Month(date)+2
ano_abril = Year(date)
abril1 = mes_abril & "/" & ano_abril
'response.write abril1


mes_maio = Month(date)+3
ano_maio = Year(date)
maio1 = mes_maio & "/" & ano_maio
'response.write maio1

mes_junho = Month(date)+4
ano_junho = Year(date)
junho1 = mes_junho & "/" & ano_junho
'response.write maio1


mes_julho = Month(date)+5
ano_julho = Year(date)
julho1 = mes_julho & "/" & ano_julho
'response.write maio1



'***********************************************************************
'consultas para o item 090
jan_090=("Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='"&janeiro1&"' and item = 467711090 group by item order by sum(total)")
'response.write jan_090
'response.end
set jan090 = conexao.execute(jan_090)

fev_090=("Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='"&fevereiro1&"' and item = 467711090 group by item order by sum(total)")
set fev090 = conexao.execute(fev_090)

mar_090=("Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='"&marco1&"' and item = 467711090 group by item order by sum(total)")
set mar090 = conexao.execute(mar_090)

abril_090=("Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='"&abril1&"' and item = 467711090 group by item order by sum(total)")
set abril090 = conexao.execute(abril_090)

maio_090=("Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='"&maio1&"' and item = 467711090 group by item order by sum(total)")
set maio090 = conexao.execute(maio_090) 

jun_090=("Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='"&junho1&"' and item = 467711090 group by item order by sum(total)")
set jun090 = conexao.execute(jun_090)

jul_090=("Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='"&julho1&"' and item = 467711090 group by item order by sum(total)")
set jul090 = conexao.execute(jul_090)

então é o seguinte, com essa modificação que fiz consegui que o sistema mostre os valores do ano corrente, se o ano for 2009 ele me exibe só os valores de 2009 e se for 2010 ela me exibira os valores de 2010, mais isso não resolveu meu problema.

Como mensionei o sistema exibe de 7 em 7 meses então, se hoje estamos no mes de fevereiro ele esta exibindo de janeiro a julho, se eu mudar a data do micro para março ele exibe de fevereiro a agosto eliminando assim os meses anteriores e sempre exibindo o mes atual mais 6 meses.... deu pra sacar ?

imagine um sistema rotativo de meses onde ficam exibindo de 7 em 7 meses, entra fevereiro, janeiro fica pra traz e fevereiro entra em seu lugar exibindo os próximos 6 meses....e assim por diante.

Se estivermos em outubro por exemplo ele já entra exibindo não só os meses do ano de 2009 como tambem de 2010 assim:

(mes atual)

setembro - outubro - novembro - dezembro - janeiro - fevereiro - março

total de set. total de out. e assim com todos os meses...

a consulta me mostra não só os valores dos meses deste ano como tambem os proximos meses incluindo os de 2010..

é esse meu problema, ele só exibe os resultados do mes atual e como os proximos meses são de 2010 ele não exibe...

Espero que tenham entendido..

abraços

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

  • 0

Cara, a sua consulta não está igual não !

Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='"&janeiro1&"' and item = 467711090 group by item order by sum(total)
O certo seria:
Select item, sum(total) as DtEntrega from FIAT where DtEntrega='"&janeiro1&"' and item = 467711090 group by item order by sum(total)

Link para o comentário
Compartilhar em outros sites

  • 0

Cara... seguinte... vou te ajudar a mudar essa tua lógica de programação... vamos usar dateadd... a melhor forma que tem pra essas coisas...

Me responda as seguintes perguntas:

1) Se estamos em janeiro/09, de qual a qual periodo terá de ser a consulta?

2) Se estamos em fevereiro/09, de qual a qual periodo tera de ser a cansulta?

3) Se estamos em março/09, de qual a qual periodo tera de ser a cansulta?

4) Se estamos em abril/09, de qual a qual periodo tera de ser a cansulta?

5) Se estamos em maio/09, de qual a qual periodo tera de ser a cansulta?

6) Se estamos em junho/09, de qual a qual periodo tera de ser a cansulta?

7) Se estamos em julho/09, de qual a qual periodo tera de ser a cansulta?

8) Se estamos em agosto/09, de qual a qual periodo tera de ser a cansulta?

9) Se estamos em setembro/09, de qual a qual periodo tera de ser a cansulta?

10) Se estamos em outubro/09, de qual a qual periodo tera de ser a cansulta?

11) Se estamos em novembro/09, de qual a qual periodo tera de ser a cansulta?

12) Se estamos em dezembro/09, de qual a qual periodo tera de ser a cansulta?

13) O que tem e no campo DtEntrega?

14) Qual o tipo de dados configurado para o campo DtEntrega no bd?

15) Qual o formato configurado para o campo DtEntrega no bd?

16) Para realizar a consulta o sistema sempre considerará automaticamente o mes atual ou o user seleciona o mês de referência em um form?

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Jonathan,

Se eu fizer assim:

Select item, sum(total) as DtEntrega from FIAT where DtEntrega='"&janeiro1&"' and item = 467711090 group by item order by sum(total)

Microsoft JET Database Engine (0x80040E07)

Tipo de dados imcompatível na expressão de critério.

/sigma/inicio2.asp, line 106

Não sei, mais acho que o month(DtEntrega) esta indicando que a consulta é pelo mes='"&janeiro&"' puxando assim o mes 1;;

Obrigado pela atenção...

Parabéns a todo ae e obrigado pela atenção e ajuda, já to ficando de cabelos em pé...

Link para o comentário
Compartilhar em outros sites

  • 0
Cara... seguinte... vou te ajudar a mudar essa tua lógica de programação... vamos usar dateadd... a melhor forma que tem pra essas coisas...

Me responda as seguintes perguntas:

1) Se estamos em janeiro/09, de qual a qual periodo terá de ser a consulta?

2) Se estamos em fevereiro/09, de qual a qual periodo tera de ser a cansulta?

3) Se estamos em março/09, de qual a qual periodo tera de ser a cansulta?

4) Se estamos em abril/09, de qual a qual periodo tera de ser a cansulta?

5) Se estamos em maio/09, de qual a qual periodo tera de ser a cansulta?

6) Se estamos em junho/09, de qual a qual periodo tera de ser a cansulta?

7) Se estamos em julho/09, de qual a qual periodo tera de ser a cansulta?

8) Se estamos em agosto/09, de qual a qual periodo tera de ser a cansulta?

9) Se estamos em setembro/09, de qual a qual periodo tera de ser a cansulta?

10) Se estamos em outubro/09, de qual a qual periodo tera de ser a cansulta?

11) Se estamos em novembro/09, de qual a qual periodo tera de ser a cansulta?

12) Se estamos em dezembro/09, de qual a qual periodo tera de ser a cansulta?

13) O que tem e no campo DtEntrega?

14) Qual o tipo de dados configurado para o campo DtEntrega no bd?

15) Qual o formato configurado para o campo DtEntrega no bd?

16) Para realizar a consulta o sistema sempre considerará automaticamente o mes atual ou o user seleciona o mês de referência em um form?

[]'s Rafael Spilki

Ok valos lá

1) Se estamos em janeiro/09, de qual a qual periodo terá de ser a consulta?

de dezembro de 2008 a junho de 2009

2) Se estamos em fevereiro/09, de qual a qual periodo tera de ser a cansulta?

de janeiro de 09 a julho de 09

3) Se estamos em março/09, de qual a qual periodo tera de ser a cansulta?

de fevereiro de 09 a agosto 09

4) Se estamos em abril/09, de qual a qual periodo tera de ser a cansulta?

marco de 09 a setembro de 09

5) Se estamos em maio/09, de qual a qual periodo tera de ser a cansulta?

abril de 09 a novembro 2009

6) Se estamos em junho/09, de qual a qual periodo tera de ser a cansulta?

maio de 09 a dez de 09

7) Se estamos em julho/09, de qual a qual periodo tera de ser a cansulta?

junho de 09 a janeiro de 2010

8) Se estamos em agosto/09, de qual a qual periodo tera de ser a cansulta?

julho de 09 a fevereiro de 2010

9) Se estamos em setembro/09, de qual a qual periodo tera de ser a cansulta?

agosto de 09 a marco de 2010

10) Se estamos em outubro/09, de qual a qual periodo tera de ser a cansulta?

setembro de 09 a abril de 2010

11) Se estamos em novembro/09, de qual a qual periodo tera de ser a cansulta?

outubro de 09 a maio de 2010

12) Se estamos em dezembro/09, de qual a qual periodo tera de ser a cansulta?

novembro de 09 a junho de 2010

13) O que tem e no campo DtEntrega?

data d/m/yyyy

14) Qual o tipo de dados configurado para o campo DtEntrega no bd?

data normal d/m/yyyy

15) Qual o formato configurado para o campo DtEntrega no bd?

data normal

16) Para realizar a consulta o sistema sempre considerará automaticamente o mes atual ou o user seleciona o mês de referência em um form?

sempre considera automaticamente o mês atual

Obrigado ae Rafael. O sistema é brutooo...

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

Então... quer ver como é bem mais simples do que parece?

<%
'data formato brasileiro
session.lcid = 1046
'setando data atual
data = date
'datai =  1 mes a menos que a data atual
datai = dateadd ("m",-1,data)
'separando mes e ano da datai... o primeiro dia é sempre 01!
mesdatai = datepart ("m", datai)
anodatai = datepart ("yyyy", datai)
'setando dataini com dia sempre 01
dataini = "01" & "/" & mesdatai & "/" & anodatai
'setando datafini = 6 meses mais do que dataini
datafini = dateadd ("m",6,dataini)
'setando query com utilização de between... sendo que o total dessa doma estara no rs("total")
sql = "Select sum(total) as total from FIAT where DtEntrega between #"&dataini&"# and #"&datafini&"# and item = 467711090 group by item asc"
%>

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

Ok,

Deu esse erro:

Microsoft JET Database Engine (0x80040E14)

Erro de sintaxe na cláusula GROUP BY.

/sigma/inicio2.asp, line 30

mudei para order by e:

Microsoft JET Database Engine (0x80040E21)

Você tentou executar uma consulta que não inclui a expressão 'item' especificada como parte de uma função agregada.

/sigma/inicio2.asp, line 30

valeu..[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

Sim é número, existe sim...

Cara, acho que não tem como fazer isso não...já tentei de todo jeito....

só uma pergunta, o datepart, dateadd são mais utilizados em sqlserver me parece que não funcionam direito com access,

será que é por causa disso ?

Mudei a data para dezembro e dei um response.write nas query's olha o que esta acontecendo:

Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))= '11/2009' and item = 467711090 group by item order by sum(total)
'aqui exibe o valor pois o mes é 11


Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='12/2009' and item = 467711090 group by item order by sum(total)
'aqui tambem, mes 12


Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='13/2009' and item = 467711090 group by item order by sum(total)
'aqui que era para começar a exbir janeiro de 2010 não exibe pois a query me retorna mes 13/2009 e não 01/01/2010


Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='14/2009' and item = 467711090 group by item order by sum(total)
'aqui ocorre o mesmo com a de cima


Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='15/2009' and item = 467711090 group by item order by sum(total)
'aqui tambem


Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='16/2009' and item = 467711090 group by item order by sum(total)
'aqui tambem


Select item, sum(total) as DtEntrega from FIAT where (month(DtEntrega) &'/'& year(DtEntrega))='17/2009' and item = 467711090 group by item order by sum(total) 
'e aqui

estao somando os meses....

[]'s

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

  • 0

Uhm... mas assim... você já está pesquisando por um item especifico... logo não tens que agrupalo de forma alguma... além do que esse seu select é para soma... só exibirá a soma... portanto não tem o que agrupar... nem ordenar... teste assim:

<%
'data formato brasileiro
session.lcid = 1046
'setando data atual
data = date
'datai =  1 mes a menos que a data atual
datai = dateadd ("m",-1,data)
'separando mes e ano da datai... o primeiro dia é sempre 01!
mesdatai = datepart ("m", datai)
anodatai = datepart ("yyyy", datai)
'setando dataini com dia sempre 01
dataini = "01" & "/" & mesdatai & "/" & anodatai
'setando datafini = 6 meses mais do que dataini
datafini = dateadd ("m",6,dataini)
'setando query com utilização de between... sendo que o total dessa doma estara no rs("total")
sql = "Select sum(total) as total from FIAT where DtEntrega between #"&dataini&"# and #"&datafini&"# and item = 467711090 "
%>
e tipo... caso queira imprimir em tela além do valor total os campos também, faça outro select... assim:
<%
'data formato brasileiro
session.lcid = 1046
'setando data atual
data = date
'datai =  1 mes a menos que a data atual
datai = dateadd ("m",-1,data)
'separando mes e ano da datai... o primeiro dia é sempre 01!
mesdatai = datepart ("m", datai)
anodatai = datepart ("yyyy", datai)
'setando dataini com dia sempre 01
dataini = "01" & "/" & mesdatai & "/" & anodatai
'setando datafini = 6 meses mais do que dataini
datafini = dateadd ("m",6,dataini)
'setando query com utilização de between... sendo que o total dessa doma estara no rs("total")
sql = "Select sum(total) as total from FIAT where DtEntrega between #"&dataini&"# and #"&datafini&"# and item = 467711090 "
sql2 = "Select * from FIAT where DtEntrega between #"&dataini&"# and #"&datafini&"# and item = 467711090 group by item"
%>

[]'s Rafael Spilki

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
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...