Ver Mensaje Individual
  #16  
Antiguo 01-03-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por anubis Ver Mensaje
...
De todas formas, el problema que tengo es que, despues de insertar un nuevo registro, si pido ese registro el, id_producto por ejemplo, me devuelve 0 y en el dbgrid me sale en blanco.
Lo soluciono cerrando la tabla y abriendola de nuevo.
Ya probe con refresh y tampoco me lo resuelve.
Es que cuando Firebird incrementa el generador desde un trigger (vg. BEFORE INSERT) el DataSet no se entera del nuevo valor asignado hasta que lo cierres y abras nuevamente.

Una cosa que podes hacer es usar la propiedad GeneratorFielddel TIBDataSet, ejemplo:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  DS: TIBDataSet;
begin
  DS := IBDataSet1;
  DS.GeneratorField.Generator   := 'G_TABLA';
  DS.GeneratorField.Field       := 'ID';
  DS.GeneratorField.IncrementBy := 1;
  DS.GeneratorField.ApplyEvent  := gamOnPost;
end;
(Configuré la propiedad en tiempo de ejecución para clarificar, pero podes hacerlo en tiempo de diseño desde el Inspector Object)


Hay dos cosas que olvidé mencionarte, la primera es que los componentes IBX para Delphi hasta la versión 7.8 inclusive, no soportan la cláusula RETURNING (no sé si es así en versiónes posteriores de IBX).

La segunda y mas importante, es que no uses el modo del mensaje #7
Código SQL [-]
SELECT MAX(ID_PRODUCTO) as ULTIMO_ID FROM PRODUCTO
para obtener el último identificador en un entorno multiusuario, por que fácilmente se podría generar incongruencia en los datos. Lo conveniente es solicitar la generación de un ID
Código SQL [-]
SELECT GEN_ID(G_PRODUCTO, 1) AS TENTATIVE_ID FROM RDB$DATABASE
, almacenarlo y luego utilizarlo (Commit) o bién descartar ese valor (Rollback).

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita