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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-10-2010
Tcmn Tcmn is offline
Miembro
 
Registrado: sep 2004
Posts: 153
Poder: 22
Tcmn Va por buen camino
Estoy haciendo pruebas y curiosamente cuando doy de alta un registro y lo cancelo al generar otro registro me da el sig valor y luego lo cancelo y al dar de alta otro valor me vuelve a dar el sig. Ejemplo
Clave usuario
Ejecuto Insert 1 juan
Cancel
Ejecuto Insert 2 Lpez
Cancel
Ejecuto Insert 3 juana
Cancel
Ejecuto Insert 4 Luis
Post
Ejecuto Insert 6 Luisito (si notas como antes guarde me lo dobla)
Post


Saludos
__________________
Salu2
Responder Con Cita
  #2  
Antiguo 06-10-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.678
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Si lo das de alta, el generador avanza, aunque luego lo canceles.
Supongo que con "cancelar" te refieres a hacer un rollback. Pero el 'beforeinsert' ya se ha ejecutado y ha avanzado el generador.
Responder Con Cita
  #3  
Antiguo 06-10-2010
Tcmn Tcmn is offline
Miembro
 
Registrado: sep 2004
Posts: 153
Poder: 22
Tcmn Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Si lo das de alta, el generador avanza, aunque luego lo canceles.
Supongo que con "cancelar" te refieres a hacer un rollback. Pero el 'beforeinsert' ya se ha ejecutado y ha avanzado el generador.
Estoy de acuerdo con eso pero aun mi incognita es ¿por qué dobla el valor cuando sí guardo?

Saludos
__________________
Salu2
Responder Con Cita
  #4  
Antiguo 06-10-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
guillotmarc Va por buen camino
¿ Estas totalmente seguro que no llamas a estos mismos generadores en ningún otro sitio ?.

¿ Quizás en algunto evento AfterPost en Delphi ?.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 06-10-2010
Tcmn Tcmn is offline
Miembro
 
Registrado: sep 2004
Posts: 153
Poder: 22
Tcmn Va por buen camino
Probe directo en IBExpert y obviamente ahi todo va bien. En delphi sigue igual.
las unicas lineas de codigo que tengo en el IBDataSet ligado a tabla AYUDANTES
es:

procedure TDataModule2.IBAyudantesAfterCancel(DataSet: TDataSet);
begin
DataModule2.IBTransaction1.RollbackRetaining;
end;

procedure TDataModule2.IBAyudantesAfterDelete(DataSet: TDataSet);
begin
DataModule2.IBTransaction1.CommitRetaining;
end;

procedure TDataModule2.IBAyudantesAfterPost(DataSet: TDataSet);
begin
DataModule2.IBTransaction1.CommitRetaining;
end;

procedure TDataModule2.IBAyudantesNewRecord(DataSet: TDataSet);
begin
IBAyudantesCVEPERSONA.Value:=IBPersonasCVEPERSONA.Value;
end;//Esta linea es porq es una tabla detalle de la tabla maestra "PERSONAS"

En el IBDatabase y el IBTransaction al que esta ligado no he puesto una linea de codigo.
No se si sea alguna propiedad que deba modificar o que.

Disculpen mi ignorancia pero es la primera vez que trabajo con Firebird.
__________________
Salu2
Responder Con Cita
  #6  
Antiguo 06-10-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
El disparador no valida si el campo ya viene con valor. Una buena práctica es añadir un If al código del disparador para no darle valor al campo si éste ya trae uno.

Tcmn no ha dicho qué componentes de acceso está utilizando, pero según lo que comenta sobre las altas y los cancels, estoy casi seguro que:

1. Usa un evento OnNewRecord / AfterInsert de esos componentes para llamar al generador.

o bien:

2. Está utilizando IBX con la propiedad GeneratorField.ApplyEvent = gamOnNewRecord (lo cual no es mala idea).

Si fuera lo anterior, para resolver el problema creo que bastaría con añadir el clásico "IF (NEW.ID IS NULL) THEN" a los disparadores. A menos que a Tcmn le interese que esas claves sean consecutivas (algo que no debería ser requisito en una llave primaria ).

Saludos.

Al González.

P.D. Acabo de ver su nuevo comentario donde nos indica que sí está utilizando IBX. Tcmn, ¿cómo estás utilizando la propiedad GeneratorField del componente de datos?

Última edición por Al González fecha: 06-10-2010 a las 20:00:58.
Responder Con Cita
  #7  
Antiguo 06-10-2010
Tcmn Tcmn is offline
Miembro
 
Registrado: sep 2004
Posts: 153
Poder: 22
Tcmn Va por buen camino
Asi es el asunto era poner On server en la propiedad que dice Al Gonzalez.
Asunto solucionado muchas gracias y saludos
__________________
Salu2
Responder Con Cita
  #8  
Antiguo 06-10-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
guillotmarc Va por buen camino
En el futuro no está de más hacer los triggers como ha propuesto Al (te habrías ahorrado este problema, aunque es mejor haberlo tenido y saber exactamente donde estás asignando la clave primaria).

Es decir :

Código SQL [-]
CREATE OR ALTER TRIGGER G_CVEEQUIPO_BI FOR EQUIPOS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if (NEW.vceequipo is null) then NEW.cveequipo=gen_id(gen_equipos_id,1);
end
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
Respuesta


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
Escanear Doble Cara, Doble Lector karenthyuliana Gráficos 2 11-04-2008 17:29:42
Incrementa el porcentaje y no imprime. zugazua2001 Impresión 1 19-05-2006 08:59:19
generador novaten Conexión con bases de datos 1 09-04-2005 21:29:44
Campo clave incrementa Marcosr_87 SQL 8 21-11-2004 23:24:37
como puedeo incrementa un campo auto numerico simon Conexión con bases de datos 1 01-06-2004 20:55:12


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


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