Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Duda dbExpress + Interbase (https://www.clubdelphi.com/foros/showthread.php?t=1996)

¥0n1 04-07-2003 19:18:31

Duda dbExpress + Interbase
 
Hola lista, Tengo una pequena duda, estoy trabajando con dbExpress + Interbase Server 6.01, Windows 2000 especificamente con el componente TSQLClientDataSet ( el ultimo de la paleta dbExpress) y mi duda es que tengo un Trigger + un Generador en el Server para un campo autoincrementado que es el Codigo ademas de ser Not Null y el Triger no se me ejecuta cuando estoy editabdo en el Grid. Sin embargo si se ejecuta cuando inserto datos en un administrador de IB tipo Databse WorkBench, por ejemplo.

Cuando inserto los datos a traves del Grid en mi aplicacion me dice que el campo XXX es no puede ser nulo y es que el trigger no se me esta ejecutando. Como tengo que hacer para el Trigger s e me ejecute ?? Alguna propiedad, evento, componente ?? He buscado por todas partes y no acabo de dar pie con bola ...

Gracias a todos de antemano ...

kinobi 04-07-2003 19:37:10

Hola,

Cita:

Posteado originalmente por ¥0n1
el Triger no se me ejecuta cuando estoy editabdo en el Grid
un trigger nunca se ejecuta en el lado cliente, siempre se ejecuta en el servidor. Es decir, al poner un DataSet en estado de edición el trigger no se ejecutará ya que el servidor todavía no ha hecho nada (un INSERT, UPDATE o DELETE, las tres únicas acciones que pueden desencadenar la ejecución de un trigger).

Saludos.

guillotmarc 05-07-2003 14:55:48

Hola.

En lugar de utilizar un trigger, usa un procedimiento almacenado, o una consulta, para calcular el nuevo codigo a asignar, y haz la asignación en el evento afterinsert del clientdataset.

Ejemplo de procedimiento almacenado :

Código:

SET TERM ^ ;

CREATE PROCEDURE "CLIENTE_Codigo"
RETURNS (ID INTEGER)
AS
BEGIN
  ID = GEN_ID(CLIENTE_GEN, 1);
END
^

SET TERM ; ^

CLIENTE_GEN es un generador.

Ahora, en el evento AfterInsert del clientdataset solo tienes que hacer algo como :

Código:

procedure TdmData.cdsP_FamiliasAfterInsert(DataSet: TDataSet);
begin
  spCLIENTE_Codigo.ExecProc;
  DataSetFieldValues['ID'] := spCLIENTE_Codigo.Params[0].Value;
end;

Por cierto, es mejor que no utilizas el SQLClientDataSet (yo solo lo utilizo en consultas, nunca cuando se harán modificaciones). Borland lo ha eliminado en Delphi 7, sustituyendolo por otro componente. Lo mejor es utilizar 3 componentes : 1 TSQLQuery + 1 TDataSetProvider + 1 TClientDataSet.

Saludos.


La franja horaria es GMT +2. Ahora son las 01:06:29.

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