| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 12 Nov, 2007 11:32 am Asunto: StoredPorc |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 12 Nov, 2007 12:38 pm Asunto: |
|
|
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. _________________
 |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 12 Nov, 2007 1:16 pm Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 12 Nov, 2007 1:52 pm Asunto: |
|
|
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.!! _________________
 |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
|