saludos..., estoy creando un mantenimiento en el que pretendo que
uno de los campos claves (codigobanco) se autoasigne en el Triguer de la base de datos 'beforeinsert'.
1.-) Cuando creo un nuevo registro en el mantenimiento, en la aplicación cliente no veo el valor de dicho campo clave en ningun momento, es decir
cuando creo un nuevo registro el valor del campo clave asignado por el triguer aparece vacio, incluso después de grabar el campo tambien aparece vacio, en cámbio, cuando cierro y abro la aplicación si que aparece automáticamente el registro con el valor asignado por el triguer correctamente. De hecho, incluso despues de grabar dicho nuevo registro ,hojeando la base de datos en el 'sql Manager' observo que se ha generado correctamente el valor del campo.
Utilizo el componente tfibdataset de los fibplus
2.-) Por otro lado, si en el evento afterinsert de dicho componente, intento asignar el foco de edifición en un dbedit con por ejemplo 'editnombre.setfocus', recibo un accesviolation ¿?
este es el código de la base de datos.
Código:
CREATE TABLE FAC_MAE_FABAN (
EMPRESA VARCHAR(3) CHARACTER SET NONE NOT NULL COLLATE NONE,
CODIGOBANCO INTEGER NOT NULL,
NOMBREBANCO VARCHAR(40) CHARACTER SET NONE COLLATE NONE,
ENTIDAD VARCHAR(4) CHARACTER SET NONE COLLATE NONE,
SUCURSAL VARCHAR(4) CHARACTER SET NONE COLLATE NONE,
DC VARCHAR(2) CHARACTER SET NONE COLLATE NONE,
CUENTA VARCHAR(10) CHARACTER SET NONE COLLATE NONE,
POBLACION VARCHAR(40) CHARACTER SET NONE COLLATE NONE,
DIRECCION VARCHAR(40) CHARACTER SET NONE COLLATE NONE,
PROVINCIA VARCHAR(20) CHARACTER SET NONE COLLATE NONE,
TELEFONO DEF_TFNO_FAX,
FAX DEF_TFNO_FAX,
OBSERVACION BLOB,
CUENTACONTABLE VARCHAR(8) CHARACTER SET NONE COLLATE NONE,
CLAVELIBROPOSICION VARCHAR(10) CHARACTER SET NONE COLLATE NONE,
RIESGOMAXIMOPAGARES NUMERIC(11, 2) DEFAULT 0.0,
RIESGOMAXIMORECIBOS NUMERIC(11, 2) DEFAULT 0.0,
RIESGOMAXIMO COMPUTED BY (RIESGOMAXIMORECIBOS+RIESGOMAXIMOPAGARES));
ALTER TABLE FAC_MAE_FABAN ADD CONSTRAINT PK_FAC_MAE_FABAN PRIMARY KEY (EMPRESA,CODIGOBANCO);
CREATE INDEX FAC_MAE_FABAN_IDX1 ON FAC_MAE_FABAN(NOMBREBANCO);
SET TERM ^ ;
SET TERM ^ ;
CREATE TRIGGER FAC_MAE_FABAN_BI FOR FAC_MAE_FABAN
ACTIVE BEFORE INSERT
POSITION 0
AS
DECLARE VARIABLE NULTIMO INTEGER DEFAULT 0;
BEGIN
nultimo = 0;
if (new.codigobanco is null) then
begin
select max( codigobanco ) from fac_mae_faban Where (empresa = new.empresa) into :nultimo;
nultimo = nultimo+1;
new.codigobanco = nultimo;
end
END^
SET TERM ; ^
a ver si me pueden ayudar, estoy dandole vueltas, he imagino que tiene algo que ver con la visiblidad de las transacciones, pero no consiguo identificar el problema.