Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

StoredPorc

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: StoredPorc Responder citando

Saco este tema del hilo de los campos autoincrementales, aunque esté relacionado con él, porque no me está funcionando bien esta parte del código.

Vamos a ver. Tengo definido un generador y un procedimiento de la siguiente forma:
Código:
CREATE GENERATOR Id_personas

Código:
CREATE PROCEDURE GEN_PERSONAS
RETURNS(
  REGISTRO INTEGER)
AS
BEGIN Registro = GEN_ID(Id_personas, 1); END;

Al pedir que se ejecute lo he puesto así en el OnClick del botón con que indico Alta:
Código:
lNuevo = true;
spPersona->ExecProc();
fPersonas->Tag = spPersona->ParamByName("Registro")->Value;

Se ejecuta sin errores pero no funciona bien: El valor mayor que tiene en este momento la tabla para el campo Registro es 17261 y tras ejecutarlo una primera vez el valor que me da es 3; más aun: si cancelo la grabación de la ficha y vuelvo a pulsar el botón de alta, en lugar de volver a darme el valor 3 me genera el valor 4 y si cierro el programa SIN GRABAR y vuelvo a pedir un alrta me da el valor 5. Es como si guardara el último valor generado, independientemente de si se ha grabado o no.

He comprobado con IBManager que el generador tiene guardado el siguiente código:
Código:
CREATE GENERATOR ID_PERSONAS;

SET GENERATOR ID_PERSONAS TO 5;

¿Qué estoy haciendo mal?
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

usa el IBManager y establece el valor del Generador al numero que te interesa
en pocas palabras el generador debe contener una linea como esta

Código:
SET GENERATOR ID_PERSONS TO 17261;


Para que a partir de ahi se tome el valor correspondiente.


Nota: habres el IBManager te vas a la parte de la izquierda donde dice "Generators" presiona doble click en el generador que te interese modificar el valor. en la ventana que aparece introduce el valor que de consderarse en este caso 17261 y presionas el boton que tiene un "rayo", o F9 aceptas las transacciones y posteriormente sin modificar tu programa lo ejecutas y listo!

Saludos.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Gracias César. El actualizar el valor del generador, ¿se puede hacer con esto en tiempo de ejecución?
Código:
Query->Close();
Query->UnPrepare();
Query->SQL->Text = "SELECT MAX(Registro) Registro FROM Personas";
Query->Prepare();
Query->Open();

IBSql->Close();
IBSql->SQL->Text = "SET GENERATOR Id_personas TO " + FormatFloat("0", Query->FieldByName("Registro")->AsInteger);
IBSql->Prepare();
IBSql->ExecQuery();

Otra cosa. ¿Cómo impido que se guarde el valor calculado si cancelo el proceso de alta? Porque tal cual lo tengo ahora, en el OnClick del botón Alta, el nuevo valor se almacena aunque anule el alta.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

como se comentaba en viejos post, el valor solo y unicamente debe ser incrementado cuando el usuario ha presionado el boton de "Guardar" solo hasta ese momento sabes que el usario NO: ha cancelado, no se ha dormido, no se pone a jugar cartas y si asi lo hiciera, cuando llegue a poner el boton "Grabar" o "Guardar" hasta ese momento generamos o incrementamos el valor Del Generador.



Saludos.!!
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

De acuerdo. Entonces cambiaré la ubicación de la ejecución al momento de grabar. Muchas gracias César ¡eres un hacha! Smile
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.