FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
utilizacion trigger
Buenas tardes :
tengo un pequeño problema tengo una tabla que la cree en interbase y es las siguiente CREATE TABLE CLIENTE ( COD_CLIENTE INTEGER NOT NULL, COD_VENDEDOR INTEGER NOT NULL, NOMBRE_CLIENT VARCHAR(40) NOT NULL, EDAD INTEGER NOT NULL, ESTADO VARCHAR(20) NOT NULL, DIRECCION VARCHAR(20), TELEFONO INTEGER NOT NULL, PRIMARY KEY (COD_CLIENTE)) y un trigger asi CREATE TRIGGER CODCLIENT FOR CLIENTE ACTIVE BEFORE INSERT POSITION 0 AS begin new.cod_cliente=gen_id(codclient,1); end lo que intento hacer con el trigger es que me genere el consecutivo del codigo cliente, mi problema es que quiero que lo coloque automaticamente, lo que pasa es que cuando estoy insertando datos en la tabla cliente, me pide sin embargo el codigo del cliente, aunque despues de guardarlo el codigo que yo coloco me lo cambia al consecutivo que le sigue. necesito que no me toque digitar obligatoriamente un valor en el campo codigo cliente sino que me lo coloque automaticamente. Gracias por la atencion prestada. |
#2
|
||||
|
||||
El código del trigger es correcto, yo cuando hago eso normalmente inserto los datos restantes por medio de un procedimiento almacenado, entonces no obtienes el error.
Podrias hacerlo asi
__________________
[Crandel] |
#3
|
||||
|
||||
Gracias por responderme ante todo,
Mira lo que pasa es que no entiendo muy bien lo de procedimientos almacenados, si fueras tan amable de darme una luz de como deberia hacerlo. otra cosa el procedimiento almacenado se hace directamente en la base de datos (interbase) o se hace en delphi. |
#4
|
|||
|
|||
Hola,
yo creo q el problema lo tienes en delphi, y como te dice nuestro amigo, el trigger está bien. Lo q debes hacer es en la IBDataSet, buscar el evento OnNewRecord y allí poner el siguiente código: supongamos q tu IBDataset se llame IBClientes entonces el código sería: IBClientes.Cod_Cliente.Value := 0; Así no saldrá el error q tienes ahora, este error es causado porq el campo Cod_Cliente está como obligatorio, pero al ponerle como valor inicial un 0, no se ejecutará esta excepción y luego el trigger de IB le dará el código automático. Espero q te sirva. Un saludo. |
#5
|
||||
|
||||
Si tenes campos persistentes, basta también con que en tiempo de diseño pongas la propiedad Required del campo a false. Si no tenes campos persistentes, podes hacerlo en runtime después de abrir la tabla.
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#6
|
||||
|
||||
Cita:
Puedes usarlo dmagui.
__________________
[Crandel] |
#7
|
||||
|
||||
que pena la ignorancia pero bueno hice las dos cosas que me dijeron
bueno con el dataset supongamos q tu IBDataset se llame IBClientes entonces el código sería: IBClientes.Cod_Cliente.Value := 0; hice lo que me dijiste y me geneta los siguientes errores [Error] ejemplo.pas(34): Undeclared identifier: 'Cod_Cliente' [Error] ejemplo.pas(34): Missing operator or semicolon [Fatal Error] ejm.dpr(5): Could not compile used unit 'ejemplo.pas' y con el procedimiento almacenado no veo donde le este diciendo que me genere automaticamente el codigo, porque igual lo ejecute y me toca igual darle un numero en el campo del cod_cliente asi que despues me lo cambie segun el consecutivo que le toca. bueno el sp lo hice en interbase ahora cuando lo interactuo con delphi me sigue el inconveniente. Gracias por la colaboracion. |
#8
|
||||
|
||||
disculpen lo replique dos veces, fue sin intencion, no se en lo que estaba pensando
|
#9
|
||||
|
||||
ayuda con los sp
que pena la ignorancia pero bueno hice las dos cosas que me dijeron
bueno con el dataset supongamos q tu IBDataset se llame IBClientes entonces el código sería: IBClientes.Cod_Cliente.Value := 0; hice lo que me dijiste y me geneta los siguientes errores [Error] ejemplo.pas(34): Undeclared identifier: 'Cod_Cliente' [Error] ejemplo.pas(34): Missing operator or semicolon [Fatal Error] ejm.dpr(5): Could not compile used unit 'ejemplo.pas' y con el procedimiento almacenado no veo donde le este diciendo que me genere automaticamente el codigo, porque igual lo ejecute y me toca igual darle un numero en el campo del cod_cliente asi que despues me lo cambie segun el consecutivo que le toca. bueno el sp lo hice en interbase ahora cuando lo interactuo con delphi me sigue el inconveniente. Gracias por la colaboracion. |
|
|
|