Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 30-10-2011
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 23
salvica Va por buen camino
Hola edgwin, buenas tardes. La función tiene un problema de concepto , me explico.
Supón una tabla con 10 registros.
  • Eliminamos cuatro
  • LLamamos a tu función, con SUMA = CERO
  • CUENTA devuelve seis
  • Siguiente número vale SIETE (probablemente ya ha sido utilizado, por lo que existirá)
Deberías utilizar MAX en vez de COUNT, para que devuelva el MAYOR valor de CODI
Código Delphi [-]
function fncSiguNume:Integer;
var
   vValoReto : Integer;
begin
   Query1.Close;
   Query1.SQL.Clear;
   Query1.SQL.Add('select MAX(codi) as Cuenta from tabla');
   Query1.Open;
   if Query1.IsEmpty then    
      vValoReto := 0
   else
      vValoReto := Query1.FieldByName('Cuenta').AsInteger;
   Query1.Close;
   
   Result := vValoReto + 1
end;

Cita:
Empezado por edgwin Ver Mensaje
Bueno me respondo a mi mismo. Si alguien sabe como optimizar esta funcion, es bienvenida.

Saludos

Código Delphi [-]function fncSiguNume(suma : Integer = 0):Integer;
var
vValoReto : Integer;
begin
//
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select count(codi) as Cuenta from tabla');
Query1.Open;
Query1.First;
vValoReto := Query1.FieldByName('Cuenta').AsInteger + suma;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(format('select count(codi) as Cuenta from tabla where codi = %s',[IntToStr(vValoReto)]));
Query1.Open;

if Query1.FieldByName('Cuenta').AsInteger > 0 then
vValoReto := fncSiguNume(suma+1);

Result := vValoReto;

end;
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Menor tiempo de Ejecucion para una funcion Informix pelacuaz Conexión con bases de datos 4 01-04-2009 23:54:40
campo autoinc teclilla Tablas planas 3 14-06-2008 02:10:52
Utileria para Informix cacuna Varios 2 19-08-2006 01:21:59
Firebird : Llamado para probadores de Firebird 2.0 JOSEPE Firebird e Interbase 0 12-03-2005 20:33:18
Migrar de Informix a FireBird 1.5 injavies Firebird e Interbase 13 30-03-2004 19:32:27


La franja horaria es GMT +2. Ahora son las 10:41:43.


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
Copyright 1996-2007 Club Delphi