ANO ATUAL COMO CRITéRIO EM CONSULTA SQL

 Tópico anterior Próximo tópico Novo tópico

ANO ATUAL COMO CRITéRIO EM CONSULTA SQL

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#494134 - 19/06/2020 20:35:48

LIOMAR
STA MARIA DA VITORIA
Cadast. em:Dezembro/2005


Prezados, Boa Noite.
Tenho um campo na tabela de numeração sequencial por ano. A cada novo ano, a numeração deve reiniciar de 1 novamente, isso para compor um campo numeração de projeto que é do tipo varchar numerosequencial/Ano. Pra isso tenho na tabela os campos 'SequencialAno' do tipo Integer e 'Ano' do tipo Varchar. A cada novo registro, preciso pegar o Max do último registro da coluna SequencialAno e adicionar + 1. até aí tudo bem, mas não estou conseguindo colocar o critério ano atual, para saber se o ano atual do sistema está igual ao gravado no último registro da tabela. Estou tentando assim:

Dim nowYear As Integer = Date.Now.Year

        Dim sql As String = 'SELECT Max(SequencialAno) FROM tblIndicacao Where Ano = ' & nowYear

Sem o critério Ano, obtenho o número do último registro Sequencialano e consigo adicionar + 1, porém, com o critério Ano a consulta não retorna valor; lembrando que enquanto  o ano do último registro lançado na tabela for igual ao ano corrente, ele vai somando; quando o ano atual do Sistema for diferente, o Max deve retornar zero, para recomeçar a contagem de 1.
Estou usando uma Função para retornar o valor do Max, mas o erro está na realização da consulta.

De já agradeço a quem puder sugerir correções no código. Sei que deve ser uma coisa boba, mas está me pegando!
Liomar Souza

Liomar Souza

#494135 - 19/06/2020 23:02:53

COQUITO
BELO HORIZONTE
Cadast. em:Junho/2014


Citação:
:
Prezados, Boa Noite.
Tenho um campo na tabela de numeração sequencial por ano. A cada novo ano, a numeração deve reiniciar de 1 novamente, isso para compor um campo numeração de projeto que é do tipo varchar numerosequencial/Ano. Pra isso tenho na tabela os campos 'SequencialAno' do tipo Integer e 'Ano' do tipo Varchar. A cada novo registro, preciso pegar o Max do último registro da coluna SequencialAno e adicionar + 1. até aí tudo bem, mas não estou conseguindo colocar o critério ano atual, para saber se o ano atual do sistema está igual ao gravado no último registro da tabela. Estou tentando assim:

Dim nowYear As Integer = Date.Now.Year

        Dim sql As String = 'SELECT Max(SequencialAno) FROM tblIndicacao Where Ano = ' & nowYear

Sem o critério Ano, obtenho o número do último registro Sequencialano e consigo adicionar + 1, porém, com o critério Ano a consulta não retorna valor; lembrando que enquanto  o ano do último registro lançado na tabela for igual ao ano corrente, ele vai somando; quando o ano atual do Sistema for diferente, o Max deve retornar zero, para recomeçar a contagem de 1.
Estou usando uma Função para retornar o valor do Max, mas o erro está na realização da consulta.

De já agradeço a quem puder sugerir correções no código. Sei que deve ser uma coisa boba, mas está me pegando!
Liomar Souza



  Dim nowYear As Integer = Date.Now.Year  
altere para
  Dim Year_in_Digits as integer = Year(Now)


Deus melhor amigo meu...


#494138 - 20/06/2020 18:20:46

LIOMAR
STA MARIA DA VITORIA
Cadast. em:Dezembro/2005


Obrigado amigo Coquito pela ajuda,
porém ainda não alcancei o objetivo. Como disse, na tabela o campo 'Ano' é do tipo varchar e com a implementação da variável para: Dim Year_in_Digits as integer = Year(Now), está retornando o seguinte erro:
A conversão do tipo 'DBNULL' no tipo 'integer' não é válida.

é que tem algumas linhas dessa coluna que não estão preenchidas o campo 'ano'. Teria mais uma dica para contornar a situação.
Obrigado, meu amigo.

Liomar Souza

#494140 - 20/06/2020 23:43:00

JESUEL OLIVEIRA
IBIUNA
Cadast. em:Dezembro/2003


Amigo.

Tente usar LIKE ao invés de =

Ano = ' &

Se solucionou o problema, encerre o tpico!

Agradeo a todos, Jesuel Oliveira - Ibina - SP!



Resposta escolhida #494141 - 21/06/2020 01:35:15

WCOSTA
VASSOURAS
Cadast. em:Dezembro/2003


Membro da equipe
O campo ano é numérico (Integer) ou string (Char ou VChar)?
Eu fria uma consulta usando as funções do Próprio MYSQL tipo:
Aqui filtraria pelo campo, tipo Date ou Datetime ou TimeStamp ou Integer ou year com 4 dígitos, par não gerar erros na consulta
SELECT YEAR(campo);

Aqui exemplifico com funções do próprio MySQL, mas fique atento a compatibilidades das versões do BD (aqui para v4.0+)
SELECT YEAR(NOW());

ou ainda
SELECT YEAR(Date(NOW()));



AntSoft Systems On Demand



#494142 - 21/06/2020 20:31:43

LIOMAR
STA MARIA DA VITORIA
Cadast. em:Dezembro/2005


Prezados,
Agradeço aos amigos Jesuel e WCosta pelas colaborações. Fazendo os testes aqui pude constatar o seguinte: Que a consulta está retornando o erro 'A conversão do tipo 'DBNULL' no tipo 'integer' não é válida.', porque ainda não existe nenhum registro na tabela em que o ano seja igual 2020. Nesse caso, o propósito seria recomeçar a contagem da coluna 'SequencialAno' de 1 de novo. Exemplo:
SequencialAno     Ano        NumeracaoProjeto
         1                 2019                1/2019
         2                 2019                2/2019
         3                 2019                3/2019
         1                 2020                1/2020  Aqui mudou de ano, então recomeça a contagem. Nesse Caso, ao mudar de ano a consulta deveria retornar 0 (zero), que adicionado +1 = 1, já que a cada novo registro do mesmo ano adiciona-se mais um na sequencialano. O problema é que neste caso tá retornando null.
Fiz o teste manual inserindo um registro com o ano 2020 e o erro foi supresso.

Como faço para nesse caso retornar 0 (zero) ao invés de null?
Agradeço a todos pela paciência em face de minha ignorância no trato da questão.
P.S. Converti a coluna 'Ano' da tabela para o tipo integer e a coluna SequencialAno também é do tipo integer.

Liomar Souza

#494143 - 21/06/2020 21:19:42

WCOSTA
VASSOURAS
Cadast. em:Dezembro/2003


Membro da equipe
Liomar,
Como o SELECT onde o ano seria o corrente, o rows.count dever retornar zero e aí vocês inicia a contagem sempre a partir do count+1
Criai a função abaixo e não testei, mas dá uma olhada  se atende, se estiver usando SQLServer ou MSAcces, adapta a função
VB.NET/MYSQL

Public Function CountProjectperYear() as Integer
Dim  iCount as Integer=0
Dim sSQL as String = 'SELECT * FROM tblIndicacao Where Ano=@ano'
Using conn as New MySQL Connection(strcConn)
   Using comm as New MySQLCommand(sSQL, conn)
      comm.Parramenters.AddWithValues('@ano', Year(Now))
           Using dta as new MysQLDataAdapter(comm)
                    Dim dt as new DataTable()
                      dta.Fill(dt)
                      If dt.Rows.Count> 0 then
                           iCount= dt.Rows.Count +1
                      Else
                           iCount = 1
                      End If
           End Using
   End Using
End Using
Return iCount
Catch ex as Exception
MessageBox.Show('Erro: ' & ex.ToString)
Return iCount ' Como aqui retorna Zero é importante tratar o erro, para que o projeto não receba o número Zero
End Try
End Function


AntSoft Systems On Demand



#494153 - 23/06/2020 19:48:28

LIOMAR
STA MARIA DA VITORIA
Cadast. em:Dezembro/2005


Beleza, meu amigo WCosta.
Adaptei sua função e atendeu perfeitamente à minha necessidade. Muitíssimo obrigado pela ajuda e pela atenção. Pessoas como você é que fazem o mundo ser melhor. Estou muito grato. Minha função ficou assim:
Public Function RetornaCountAno()

        Dim iCount As Integer = 0
        Dim sql As String = 'SELECT Count(SequencialAno) FROM tblIndicacao  Where Ano=' & Year(Now)
        Try
            Dim Dt As New AcessoDados() 'Classe de Acesso

            iCount = Dt.RetornarIdNumerico(sql) 'Método que retorna consulta
            If iCount > 0 Then
                iCount = iCount + 1
            Else
                iCount = 1
            End If

            Return iCount

        Catch ex As Exception
            Throw ex
        End Try
    End Function


Mais uma vez obrigado.

Liomar Souza

#494155 - 23/06/2020 20:18:27

COQUITO
BELO HORIZONTE
Cadast. em:Junho/2014


Citação:
:
Obrigado amigo Coquito pela ajuda,
porém ainda não alcancei o objetivo. Como disse, na tabela o campo 'Ano' é do tipo varchar e com a implementação da variável para: Dim Year_in_Digits as integer = Year(Now), está retornando o seguinte erro:
A conversão do tipo 'DBNULL' no tipo 'integer' não é válida.

é que tem algumas linhas dessa coluna que não estão preenchidas o campo 'ano'. Teria mais uma dica para contornar a situação.
Obrigado, meu amigo.



es solo colocar una condicion en tu coluna amigo usando el isnull(coluna,0) y pronto


Deus melhor amigo meu...


#494157 - 23/06/2020 22:10:56

WCOSTA
VASSOURAS
Cadast. em:Dezembro/2003


Membro da equipe
Citação:
  Beleza, meu amigo WCosta.
Adaptei sua função e atendeu perfeitamente à minha necessidade. Muitíssimo obrigado pela ajuda e pela atenção. Pessoas como você é que fazem o mundo ser melhor. Estou muito grato. Minha função ficou assim:

Meu Brother estamos aqui no mundo para isso. Forte e fraterno abraço.

AntSoft Systems On Demand



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por WCOSTA em 24/06/2020 13:56:33