Este codigo es para una pequeña bd en FB:
//******************************************************************************/
/* Generated by IBExpert 2009.03.25 15/07/2009 11:20:41 a.m. */
/******************************************************************************/
SET SQL DIALECT 3;
SET NAMES ISO8859_1;
CREATE DATABASE 'LOCALHOST:D:\RAD 6.0\TalaCath\BD\Capturas.fdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 4096
DEFAULT CHARACTER SET ISO8859_1;
/******************************************************************************/
/* Generators */
/******************************************************************************/
CREATE GENERATOR "GEN_PK_ID";
SET GENERATOR "GEN_PK_ID" TO 0;
/******************************************************************************/
/* Tables */
/******************************************************************************/
CREATE TABLE NOMBRES (
ID INTEGER NOT NULL,
NOMBRE VARCHAR(10) NOT NULL
);
CREATE TABLE PRODUCTOS (
ID INTEGER NOT NULL,
CODIGO INTEGER NOT NULL,
PESO FLOAT NOT NULL,
HF TIMESTAMP NOT NULL
);
/******************************************************************************/
/* Primary Keys */
/******************************************************************************/
ALTER TABLE NOMBRES ADD CONSTRAINT PK_NOMBRES PRIMARY KEY (ID);
ALTER TABLE PRODUCTOS ADD CONSTRAINT PK_PRODUCTOS PRIMARY KEY (ID);
/******************************************************************************/
/* Triggers */
/******************************************************************************/
SET TERM ^ ;
/******************************************************************************/
/* Triggers for tables */
/******************************************************************************/
/* Trigger: NOMBRES_BI */
CREATE TRIGGER NOMBRES_BI FOR NOMBRES
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.id is null) then
new.id = gen_id("GEN_PK_ID",1);
end
^
/* Trigger: PRODUCTOS_BI */
CREATE TRIGGER PRODUCTOS_BI FOR PRODUCTOS
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.id is null) then
new.id = gen_id("GEN_PK_ID",1);
end
^
SET TERM ; ^
Para la tabla productos desde delphi estoy ejecutando esto:
dbDataset.Insert ; dbDatasetcodigo.Value := StrToInt(Num); dbDatasetHF.Value := Now; dbDatasetPeso.Value := StrToFloat(MidStr(str,3,7)); dbDataset.Post ;
y obtengo un mensaje de error diciendome que el "Field ID debe tener un valor", se supone que para eso esta el trigger, al detectar que no hay valor genera uno nuevo Antes de Insertar.
Debo decir que este codigo me funcionaba bien en D7 por lo que tengo mis dudas si algo se me esta olvidando o hay algun defecto en D12