Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-10-2008
Elite237 Elite237 is offline
Miembro
 
Registrado: jul 2007
Posts: 162
Poder: 17
Elite237 Va por buen camino
Unhappy Campo autoincrementable en firebird

Hola amigos del foro,fijense que tengo una duda al insertar datos a la BD.Tengo un campo que se llama eval_clave, es de tipo numerico y tiene valor autoincrementable.Al momento de insertarlo en la BD, si me incrementa el valor, hasta alli muy bien, pero al momento de borrar todos los registros de ese campo me sigue aumentando el valor desde el ultimo valor que tenia.Por ejemplo, si elimino todos los registros y el ultimo valor que tenia en eval_clave era 3, y despues cuando inserto otro registro en la BD,el valor de eval_clave aumenta a 4 en vez de que me vuelva a generar 0.Alguien sabe como modificarlo para que al momento de insertar un registro empiece desde 0?Saludos
Responder Con Cita
  #2  
Antiguo 29-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Código SQL [-]
SET GENERATOR NOMBRE_GENERADOR_GEN TO 0;

Creo que es así,

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #3  
Antiguo 29-10-2008
Avatar de Ana María
Ana María Ana María is offline
Miembro
 
Registrado: ago 2008
Posts: 40
Poder: 0
Ana María Va por buen camino
Si de pronto lo que necesitas es un identificador sin saltos (por ejemplo números de factura) lo mas práctico es crear un campo (UNIQUE) que se actualice mediante un trigger desde una tabla que haga de contador, mas o menos así (actualizaremos el campo Numero (UNIQUE) en la tabla Facturas:
Código SQL [-]
create table CONTADORES (
 IDUltimo        Integer NOT NULL);

insert into CONTADORES values(1);

create trigger BIFACTURAS for FACTURAS
    active before insert position 0 as
begin
    update CONTADORES
    set    IDUltimo = IDUltimo + 1;
    select IDUltimo - 1
    from   CONTADORES
    into   new.Numero;
end!

Todo esto se puede hacer manteniendo el campo auntoincremental como clave principal y el generador para obtener el número.

Gracias
Responder Con Cita
  #4  
Antiguo 29-10-2008
Elite237 Elite237 is offline
Miembro
 
Registrado: jul 2007
Posts: 162
Poder: 17
Elite237 Va por buen camino
Gracias Ana Maria por tu pronta respuesta. Solo que no se en que opcion de firebird hacerlo,uso el sql manager 2008 for interbase and firebird.De hecho es la primera vez que lo uso.Tu me podrias decir donde colocar el codigo que me sugeriste?
Responder Con Cita
  #5  
Antiguo 29-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Cita:
Empezado por Elite237 Ver Mensaje
Gracias Ana Maria por tu pronta respuesta. Solo que no se en que opcion de firebird hacerlo,uso el sql manager 2008 for interbase and firebird.De hecho es la primera vez que lo uso.Tu me podrias decir donde colocar el codigo que me sugeriste?
Hola,

http://img146.imageshack.us/img146/8581/emsoy2.jpg

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #6  
Antiguo 29-10-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
yo creo que lo que tu necesitas es averiguar el ultimo valor de la clave y sumarle uno:

Código SQL [-]
Select Max(Clave) + 1 from tabla
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #7  
Antiguo 29-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Cita:
Empezado por Elite237 Ver Mensaje
...Por ejemplo, si elimino todos los registros y el ultimo valor que tenia en eval_clave era 3, y despues cuando inserto otro registro en la BD,el valor de eval_clave aumenta a 4 en vez de que me vuelva a generar 0.Alguien sabe como modificarlo para que al momento de insertar un registro empiece desde 0?
Cita:
Empezado por eduarcol Ver Mensaje
yo creo que lo que tu necesitas es averiguar el ultimo valor de la clave y sumarle uno:

Código SQL [-]Select Max(Clave) + 1 from tabla
Ahora estoy más confundido , Saludos compadre
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #8  
Antiguo 29-10-2008
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.051
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
De todas formas, estos "generadores automáticos" no están pensado para eso, sino para ofrecer siempre un valor DISTINTO en un campo clave, para que no se repita.
Si lo modificas a mano, has perdido su "potencial" y ya lo mismo te da poner cualquier número
Responder Con Cita
Respuesta



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
Campo Autoincrementable al máximo casacham Conexión con bases de datos 1 08-09-2007 23:41:11
Campo autoincrementable en sql server 2000? dariana20 SQL 2 25-05-2006 19:07:05
Campo autoincrementable jonny0157 C++ Builder 1 11-08-2005 08:36:50
¿Como recuperar un valor de un campo autoincrementable? SyncMaster Firebird e Interbase 3 11-05-2004 08:08:04
como crear un campo autoincrementable acrophet Firebird e Interbase 2 14-10-2003 14:08:04


La franja horaria es GMT +2. Ahora son las 02:16:32.


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