Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Numeros faltantes (https://www.clubdelphi.com/foros/showthread.php?t=39595)

Caral 24-01-2007 23:32:25

Numeros faltantes
 
Hola a todos y gracias de antemano.
Mi consulta es la siguiente:
Ejemplo:
Tengo una tabla con un campo numerico (Numero), en este hay logicamente numeros.
2500
3998
4000
4001
4003
4004
4008
etc.
Como puedo saber de esta lista cuales faltan, teniendo en cuenta que son consecutivos del 1 en adelante y que el campo puede contener mas de 10000 numeros diferentes.
Si fuera posible que me indicaran un procedimiento o funcion se los agradeceria.
Me gustaria poder colocar dos edit y definir entre ellos cuales numeros faltan.
y que se mostrara en un grid.
Nota:
No manejo muy bien las funciones, si me explican lo agradecere mucho.:D
Ya se que pido mucho, pero la verdad no se me ocurre como hacerlo.:rolleyes:
Saludos

Robert01 24-01-2007 23:49:45

Podrías usar un contador que vaya desde el más pequeño al ultimo, en cada paso del bucle pruebas si está el número o si falta.

O sino podrías poner todos los números en un arreglo e ir comprobando cuales no están en tu lista.

saludos

roman 25-01-2007 00:00:52

Quizá un poco descabellado pero se me ocurre esto:

Creas una tabla numeros con un sólo campo numero e insertas todos los números hasta el mayor posible. Esto lo puedes hacer con un simple ciclo:

Código Delphi [-]
Query.SQL.Text := "insert into numeros values(:numero)";

for I := 1 to MaximoNumero do
begin
  Query.ParamByName('numero').AsInteger := I;
  Query.ExecSQL;
end;

Luego, para averiguar cuáles número faltan entre un primer y último número usas la consulta:

Código SQL [-]

select * from numeros
where
  numero not in (select numero from tu_tabla) and
  numero between :primero and :ultimo

Sustituyes los parámetros y lanzas la consulta:

Código Delphi [-]
Query.ParamByName('primero').AsInteger := EditPrimerNumero.Text;
Query.ParamByName('ultimo').AsInteger := EditUltimoNumero.Text;

Query.Open;

// Saludos

fdelamo 25-01-2007 12:06:12

Hola,

prueba esto que he contestado en otro hilo:

Código SQL [-]
SELECT A.ID+1
FROM TABLA A
LEFT JOIN TABLA B ON (A.ID = B.ID-1)
WHERE B.ID IS NULL

lo único que deberías desechar el valor más grande, porque será el siguiente al mayor.

Un saludo

Caral 25-01-2007 20:36:31

Gracias a todos por sus respuestas
Voy a probar todas
Gracias
Saludos


La franja horaria es GMT +2. Ahora son las 01:32:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi