![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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.... |
#2
|
||||
|
||||
Hola nuevamente!
Cita:
Conectar Trigger con Delphi: http://www.clubdelphi.com/foros/show...2152#post82152 Cita:
Espero que sea útil y seguimos en contacto. |
#3
|
|||
|
|||
Vamos a ver.
Yo lo resolvi este problema de la Siguiente Manera 1° Tenia que crear un SP donde obtendria el codigo siguiente a grabar, es decir, CREATE PROCEDURE CODIGO_SIGUIENTE RETURNS ( NUEVO_CODI_CLIE VARCHAR(10)) AS begin NUEVO_CODI_CLIE='CLI' || CAST(gen_id(codi_gener,0)+1 AS VARCHAR(7)); suspend; end 2. En delphi agrege Un IBQuery y Un DataSource 3. En la propiedad SQL del IBQUERY escribi : Select * from CODIGO_SIGUIENTE 4. En la Propiedad DATASET del DATASOURCE coloque IBQuery1 5. Ahora en el Objeto TBEDIT en su propiedad DATASOURCE escribi DATASOURCE1 6. y por ultimo en el Objeto TBEDIT en su propiedad DATAFIELD coloque: NUEVO_CODI_CLIE (que es el valor que retorna el SP). Espero que te sirva. Es obvio que para esto tienes que tener : IBDATABASE, IBTRANSACTION, y ver que haya conexion con Firebir SALudos a TOdos |
![]() |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
![]() |
|