FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
no veo automunerico
Hola a todos para empezar no se si este hilo esta bien aqui o va en Conexión con bases de datos.
Mi problema es el siguiente: estoy usando firebird 1.5, delphi 7, componentes fibplus5_3 e IBExpert tengo varias tablas con campos autonumericos (en todas tengo el mismo problema) y cuando ingreso datos desde el ibexpert todo marcha como era de esperarse sin nungun problema (por lo menos en la generación del autonumerico ), cuando programa mi aplicación en delphi 7 uso los componentes de fibplus para hacer la conección con la base y a la vez con las tablas, para prueba use un dbgrid y un dbvavigator, cuando ingreso datos en el dbgrid el autonumerico vale cero, guardo el registro y sigue valiendo cero, ingrso un nuevo registro y en los dos registros veo el valor de cero para el autonumerico, doy un refresh a la tabla y el autonumerico sigue siendo cero. Salgo de la aplicación y entro a ibexpert para ver que paso en la tabla y ooohh sorpresa el autonumerico se genero bien, es decir si ingrese los registros 1 y 2 desde delphi mi campo id (que es el autonumerico) tiene los valores 1 y 2, el generator tiene el valor 2, etc.. todo normal. alguien tiene una idea de por que no pueda ver el valor real del autonumerico en delphi??
__________________
Espero poder seguir exprimiéndote el cerebro 8) Jorge Zamora Ginez Puebla, Pue. México |
#2
|
||||
|
||||
Hola.
Tu problema está en que el nuevo código se genera directamente en la base de datos (mediante un trigger), y el Dataset Delphi no se entera de que el campo ha cambiado. Para que vuelva a leer el valor del campo, y se dé cuenta del cambio, tendrás que hacer un Refresh del Dataset. NOTA : Puedes probar a poner la propiedad AutoGenerateValue del campo persistente, a arAutoInc, para indicarle que ese campo es asignado por la base de datos, y debe volver a leerlo. Aunque en algunos sistemas esto no funciona, no sé que tal irá con FibPlus y Firebird. Yo lo que hago es no calcular esos campos mediante un Trigger, sinó que obtengo el nuevo valor mediante un procedimiento almacenado (IBExpert te puede crear automáticamente este procedimiento), y lo asigno al campo desde Delphi. Así el Dataset en Delphi siempre tendrá el valor que le hemos asignado manualmente, y no tienes que refrescarlo para que vaya a buscar el nuevo valor. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#3
|
||||
|
||||
A ver si te funciona con hacer un commit y Refrescas el dataset
|
#4
|
||||
|
||||
hola gracias por las sugerencias
Código PHP:
para el commit tengo el siguiente código.
y para cancelar
los cuales mando a llamar en el afterpos y afterCancel respectivamente Código PHP:
Código PHP:
No entendia para que me servia pero ahora con tu comentario empiezo a entender lo llame con un pFIBStoredProc lo ejecuto pero en ese punto me gana la ignorancia despues que hago?? les escribo la ddl de mi tabla para que me den su opinion a ver si no esta ahi el error
__________________
Espero poder seguir exprimiéndote el cerebro 8) Jorge Zamora Ginez Puebla, Pue. México |
#5
|
||||
|
||||
Yo capturo el evento AfterInsert del Dataset en Delphi, y en ese evento llamo al procedimiento almacenado, asignando su resultado al campo de clave primaria.
Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#6
|
||||
|
||||
master me disculparas pero la parte que no entiendo es como capturo el resultado del procedimiento
__________________
Espero poder seguir exprimiéndote el cerebro 8) Jorge Zamora Ginez Puebla, Pue. México |
#7
|
||||
|
||||
Llámame Marc por favor (lo de master es un poco exagerado).
Este seria un ejplo. de código en el AfterInsert ; Código:
procedure qryClientesAfterInsert(Dataset:TDataset); begin IBSp.ExecProc; DataSet.FieldValues['ID'] := IBSp.Params.ParamValues['ID']; end; Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
|
|