Ver Mensaje Individual
  #9  
Antiguo 30-05-2005
inferno inferno is offline
Miembro
 
Registrado: may 2005
Posts: 10
Reputación: 0
inferno Va por buen camino
hola Hector ,es Julio ramos mi problema es el siguiente muy paresido al de JoanKa:Tengo las siguiente tablas:
CREATE TABLE tblfacturas (
COD_factura long NOT NULL,
NOMB_CLI VARCHAR(30),
);
CREATE TABLE tbltiene
(
COD_factura long NOT NULL, /* este campo esta referenciado al campo clave de tblfacturas*/

cod_articulo VARCHAR(10) NOT NULL/* este campo esta referenciado al campo clave de tblarticulo*/
);


CREATE TABLE tblarticulo
(

cod_articulo VARCHAR(10) NOT NULL,
nomb_articulo VARCHAR(50) NOT NULL
);


asi como este Procedimiento almacenado

CREATE PROCEDURE INSERTAR_factura (
COD_factura VARCHAR(10),
NOM_cli VARCHAR(30),
AS
begin
INSERT INTO tblfacturas (CODI_factura, NOMB_CLI, )
values (:COD_factura, :NOM_cli);
end


tengo este trigger
CREATE GENERATOR CODI_GENER;
SET GENERATOR CODI_GENER TO 0;


CREATE TRIGGER INSERTAR_CODI FOR CLIENTE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if (new.cod_factura is null) then
new.cod_factura=gen_id(codi_gener,1);/*este numero hay manera de sacarlo al momento de ser generado por alguna consulta,porcedimeinto desde delphi,el manejador*/
end
como puedes ver necesito el numero que genera el trigger al momento de insertar el tabla factura para colocarlo en tabla tbltiene en el campo cod_factura
este procedure lo puede hacer la cosa es que si el sistema esta en red me entiendes varias aplicaciones conectadas a la misma base de datos (cliente servidor).Porque un cliente "a" ejecuta el procedimiento insertar_factura y otro cliente "b" tambien ejecuta el procedimiento insertar_factura entoces caimos en esto que el cliente "b" ejecuta primero el procedimiento que retorna el numero generado por ejemplo el procedimeinto tu yo (CREATE PROCEDURE GET_NEXT_CODI_CLIE), al momento de seleccionar el valor selecciona la correcta o selecciona el ultimo numero generado y no es la correcta por primero el cliente "a" solicito el procedimiento insertar_factura.
CREATE PROCEDURE GET_NEXT_CODI_CLIE
RETURNS (NUEVO_CODI_CLIE long)
AS
BEGIN
/*Obtienes el valor actual del generador sin incrementarlo*/
/*Observa el incremento en cero en la función gen_id*/
NUEVO_CODI_CLIE=CAST(gen_id(codi_gener,0)+1 AS VARCHAR(7));
SUSPEND;
END

espero que me puedas ayudar....
Responder Con Cita