PROCURAR CDIGO DISPONVEL

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

PROCURAR CDIGO DISPONVEL

C#

 Compartilhe  Compartilhe  Compartilhe
#484091 - 23/08/2018 08:07:46

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Boa dia pessoal!
Imaginem a seguinte situao: uma tabela est assim:

Id (int) - Codigo (int) - Descricao (varchar)
1         -      01           - Descrio 1
2         -      03           - Descrio 2
3         -      04           - Descrio 3
4         -      05           - Descrio 4

Reparem que entre o Id 1 e 2 est faltando o cdigo []02[]. Estou tentando uma maneira de descobrir se existe um []cdigo disponvel[] entre os registros da tabela, mas no estou conseguindo organizar a ideia pra fazer essa query. Algum poderia me ajudar nessa?
Abraos a todos.

____________________________________________________
No h nessa vida algo que no se possa alcanar, voc s precisa ir buscar.

#484096 - 23/08/2018 08:58:36

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Rapaz, cria um Stored Procedure ou uma fuction.

Stored Procedure /;

  BEGIN
DECLARE sloop INT;
DECLARE v1 INT DEFAULT 0;
DECLARE codigoinicial INT;
DECLARE scodigo INT;
SET codigoinicial = (select min(a.codigo) from aaaaaatesteexcluir a);
  SET SLOOP = (SELECT COUNT(a.id) FROM aaaaaatesteexcluir a);
sloop:WHILE v1 < sloop DO
   set scodigo = (select a.codigo from aaaaaatesteexcluir a where a.id  = v1 limit 1);
   if codigoinicial != scodigo then
        select codigoinicial +1;
        leave sloop;
    end if;
    SET v1 = v1 + 1;
  END WHILE sloop;
END


Function :

  BEGIN
DECLARE sloop INT;
DECLARE v1 INT DEFAULT 0;
DECLARE codigoinicial INT;
DECLARE scodigo INT;
SET codigoinicial = (select min(a.codigo) from aaaaaatesteexcluir a);
  SET SLOOP = (SELECT COUNT(a.id) FROM aaaaaatesteexcluir a);
sloop:WHILE v1 < sloop DO
   set scodigo = (select a.codigo from aaaaaatesteexcluir a where a.id  = v1 limit 1);
   if codigoinicial != scodigo then
        return codigoinicial +1;
        leave sloop;
    end if;
    SET v1 = v1 + 1;
  END WHILE sloop;
END



Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#484097 - 23/08/2018 08:59:45

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Observe que em amgas as funes retorna apenas o primeiro codigo disponivel.


Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#484098 - 23/08/2018 09:16:57

FFCOUTO
COM LEVY GASPARIAN
Cadast. em:Março/2005


Tente este cdigo:
SELECT MIN(codigo) + 1 FROM SuaTabela AS t1 LEFT JOIN SuaTabela AS t2 on t1.codigo + 1 = t2.codigo;


Cursos de Excel e VB6:
cursoexcelvba.com.br


#484105 - 23/08/2018 10:38:48

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Essa consulta me retorna os nmeros faltantes, porm gostaria de []transformar[] em LinQ.

SELECT
  g1.CodigoGrupo - 1 AS livre
FROM
  grupo AS g1
  LEFT JOIN grupo AS g2 ON g1.CodigoGrupo - 1 = g2.CodigoGrupo
WHERE
  g2.CodigoGrupo IS NULL AND g1.CodigoGrupo > 1;


FoxMan, sua sugesto para mim no funciona pois eu uso Entity Framework com banco de dados Sql CE e ele no tem suporte a Stored Procedures (pelo menos eu pesquisei e me disseram isso).
exatamente isso que eu precisava, porm tem que ser sem o uso de Stored Procedures.


____________________________________________________
No h nessa vida algo que no se possa alcanar, voc s precisa ir buscar.

#484106 - 23/08/2018 10:40:13

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


propsito, no LinQPad eu consigo []transformar[] essa query de SQL para LINQ?

____________________________________________________
No h nessa vida algo que no se possa alcanar, voc s precisa ir buscar.

#484107 - 23/08/2018 11:56:24

NOBODY
BOA VISTA / PE
Cadast. em:Agosto/2009


Estava com um problema bem parecido
e o que me ajudou foi uma SQL que me retorna todos os produtos com lacunas de sequencia.

segue :
Public Overloads Function getCodigoDisponivel() As String
        Dim codigoDisponivel As String = 1
        db = New AcessoDB
        cmd = New OleDbCommand()

        Try
            cmd.CommandText = []SELECT e.codigo-[]1[] AS Lacuna FROM estoque e WHERE e.codigo<>[]1[] AND NOT EXISTS (SELECT b.codigo FROM estoque b WHERE b.codigo=e.codigo-[]1[])[]
            cmd.Connection = db.Conectar([]Estoque.mdb[])
            dr = cmd.ExecuteReader()

            If dr.HasRows Then
                While dr.Read
                    codigoDisponivel = dr([]lacuna[]).ToString
                End While
                Return codigoDisponivel
            Else
                Return codigoDisponivel
            End If
        Catch ex As Exception
            []Throw ex
            Return codigoDisponivel
        Finally
            db.Desconectar()
            db = Nothing
            dr.Close()
            cmd = Nothing
            dr = Nothing
        End Try



#484110 - 23/08/2018 22:42:45

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Se um valor apenas, fcil saber qual est faltando, pura matemtica: Some todos os que tem e some todos os que deveria ser. Por exemplo, sua tabela tem 1, 2, 4 e 5. Some 1+2+4+5, voc  ter 12, mas a soma de 1+2+3+4+5 15, ento 15 - 12, te revela o nmero que falta. Agora se for mais complexo que isso(faltando e/ou sobrando vrios valores), voc entra em um problema vrias ordens de magnitude maior, conhecido como []gaps and islands[]. solvel mas no muito simples, veja aqui

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#484111 - 24/08/2018 08:16:33

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Pessoal, obrigado pelas respostas, mas pensei em uma soluo bem simples para o meu caso:
Primeiro crio um contador, depois fao uma lista dos registros da tabela, a com um foreache percorro a lista e comparo o cdigo do grupo com o contador.
Se for diferente, porque est faltando aquele cdigo, a ele sai do loop e me informa o nmero do cdigo.

int contador = 1;
var lista = db.Grupo.OrderBy(x => x.CodigoGrupo).ToList();
foreach (var item in lista)
{
    if (item.CodigoGrupo != contador)
    {
        MessageBox.Show([]Cdigo faltante: [] + contador.ToString().PadLeft(2, []0[]));
        break;
    }
    contador++;
}


____________________________________________________
No h nessa vida algo que no se possa alcanar, voc s precisa ir buscar.

#484126 - 24/08/2018 23:24:06

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Citação:
:
Pessoal, obrigado pelas respostas, mas pensei em uma soluo bem simples para o meu caso:

Legal....

Aqui no meu sisema ficaria assim :

MessageBox(SQL.RetornaCodigoLivre());


E em SQL.RetoraCodigoLivre(), seria algo como :

return MySqlToString([]Call spRetornaCodigoLivre()[]);


Veja o codigo que uso para retornar (uma lista de produtos, ou apenas a quantidade) produtos vendidos no boto btnBuscaQtdeItens.

private void btnBuscaQtdeItens_Click(object sender, EventArgs e)
{
     Acoes.Mensagem = Controle.Acao.RetornaPrdutosVendidos().Count + [] Produto(s) Encontrado(s)[];
}








Grupo DotNet.Br no FaceBook

Grupo WhatsDev



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


Tópico encerrado, respostas não sao permitidas
Encerrado por PERCIFILHO em 27/08/2018 11:34:07