Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   triggers no se activa (https://www.clubdelphi.com/foros/showthread.php?t=24739)

Juanito-Kun 31-08-2005 21:10:20

triggers no se activa
 
Hola que tal.

Bueno tengo un pequeño problemita que he estado batallando con el desdes hace un rato, trabajo con delphi 7 e interbase 6.5

tengo la siguiente tabla

Código:

CREATE TABLE CUSTOMER
(
  CUSTNO        INTEGER NOT NULL,
  COMPANY        VARCHAR(30) NOT NULL,
  ADDR1        VARCHAR(30),
  ADDR2        VARCHAR(30),
  CITY        VARCHAR(15),
  STAPE        VARCHAR(20),
  ZIP        VARCHAR(10),
  COUNTRY        VARCHAR(20),
  PHONE        VARCHAR(15) NOT NULL,
  FAX        VARCHAR(15),
  TAXRATE        INTEGER,
  CONTACT        VARCHAR(30),
  LASINVOICEDATE        TIMESTAMP,
 PRIMARY KEY (CUSTNO)

tengo el siguiente trigger:

Código:

CREATE TRIGGER NEXTNUM FOR CUSTOMER
ACTIVE BEFORE INSERT POSITION 0
as
begin
new.custno= GEN_ID(nextcust,1);
end

Uso los componentes IBDataSet para hacer los insert, delete....
cuando estoy corriendo la aplicacion e inserto un registro y lo trato de guardar me sale la leyenda de que es necesario poner el valor al campo "CUSTNO"(es not null), como si el trigger no se activara, lo que encuentro raro es que en la IBConsolda de Interbase caundo te vas a "PROPIEDADES" de la tabla - en la pestaña "DATA" en este caso de la tabla "CUSTOMER" en esa parte puedo insertar registros pero cuando lo hago me marca lo mismo, pero....

Cuando utilizo Interactive SQL y hago un insert a mano(insert into...) si me activa el trigger y me pone en el campo "CUSTNO" el numero que le da el generador, que puede estar mal?

gracias de antemano.... y saludos

Juanito-Kun 31-08-2005 21:27:54

Triggers ya se activa
 
Hola que tal... perdonen pero al aparecer encontre algo..

necesito darle un valor antes, para que no me marque ese error ..

lo que hice es poner en el evento OnNewRecord del del IBDataSet esto:

Código:


 IBDataSet1CUSTNO.AsInteger:=0;

Le doy por default un valor(0), ahora mi pregunta es: ¿ si es la mejor manera de resolver esto?..

Gracias y Saludos.

Lepe 31-08-2005 22:17:35

Código:

AS
begin
    if (NEW.custno IS null) then
      new.custno= GEN_ID(nextcust,1);
end

ya no necesitas asignarlo a mano.

Un saludo

Juanito-Kun 31-08-2005 23:29:50

Triggers No se activan
 
Hola que tal Lepe, antes que nada gracias por responder...

Hice lo que me dijiste...

Quite el codigo que puse en el evento..

Cambie el Trigger a lo que me dijiste y me sigue pidiendo el valor..


Código:

CREATE TRIGGER NEXTNUM FOR CUSTOMER
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (NEW.custno IS null) then
          new.custno= GEN_ID(nextcust,1);
end


Gracias y saludos...:rolleyes:

Rufus 01-09-2005 10:18:19

Desde los programas hechos con Delphi te va a pedir el valor, lo que tienes que hacer es pasarle un valor null y listo.

Además, hombre, fijate lo que te dijo Lepe que pusieras:
Código SQL [-]
AS
begin
    if (NEW.custno IS null) then
      new.custno= GEN_ID(nextcust,1);
end
, así que está claro, pasale null.

rastafarey 01-09-2005 15:58:03

Resp
 
Si le asignas un valor desde delphi y preguntas si no es nulo estonces este no se asignara.

LA solucion es decirle al campo desde delphi que es no requerido.

Juanito-Kun 01-09-2005 18:50:37

Trigger Si Se Activa
 
GRACIAS Lepe, Rufus, rastafarey funciono a la perfeccion :p...

Soy muy amables :D...

Saludos y que esten bien.:)

ELINK 03-09-2005 23:25:09

Tambien lo Puedes poner dentro del insert , de esta manera:

"insert into session(id, site) values(gen_id(sessionid,1),"SiteId")"

Espero q esto tambien te ayude :D

rastafarey 12-09-2005 17:58:21

Resp
 
Lo del Gen_id es buena opcion por que al parecer los generadore parecen infinitos (int64 o bigint) pero para que incrementar el generador y si sucede algun error y tambien para que enviar mas datos por la red.

Pero cada quien puede tomar la desicon que le parezca mas conveniente.


La franja horaria es GMT +2. Ahora son las 00:37:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi