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)
-   -   Migrando firebird 2.5 a 3 (https://www.clubdelphi.com/foros/showthread.php?t=96606)

IVAND 14-02-2024 21:45:10

Migrando firebird 2.5 a 3
 
Hola a todos , estoy migrando mi base de 2.5 a 3 firebird utilizo los componentes ibx , al parecer todo normal le puse en configuracion que permita usar rfunc , todo funciona bien , pero al lanzar una validacion desde un stored procedure no sale como antes salia osea el mensaje de error que se dispara el trigger

Attempt to execute an unprepared dynamic SQL statement

alguno de uds les ha pasado , si pruebo desde ibexpert lanza la excepcion bien pero desde el sistema sale este error y no muestra mas

adjunto trigger
Código SQL [-]
CREATE OR ALTER trigger producto_bodega_au0 for producto_bodega
active after update position 0
AS
 declare variable nombre varchar(150);
begin
  /* Trigger text */
 if (new.cantidad<=-1) then
   Begin
     nombre = (select nombre from producto where key_producto=NEW.key_producto) ;
     exception bloquear_saldo_bodega 'El saldo de este Producto no puede estar en negativo = ' || nombre  ;
 
  End

end

Casimiro Notevi 15-02-2024 10:59:42

¿Ese mensaje lo produce el trigger o es de tu programa delphi?
Porque dices que con ibexpert no sale el error, pienso que es algo de tu programa.

En todo caso, para que quede más claro el código, en esta línea yo lo cambiaría, aunque no hace falta:

Esto: if (new.cantidad<=-1) then por esto: if (new.cantidad<=(-1)) then

IVAND 16-02-2024 15:22:35

Como siempre gracias por responder

Te explico mejor , el sp al momento que se ejecuta en firebird 3 desde ibexpert muestra este mensaje

BLOQUEAR_SALDO_BODEGA.
El saldo de este Producto no puede estar en negativo = ACAI FUTURO COM LIQ 269ML.
At trigger 'PRODUCTO_BODEGA_AU0' line: 9, col: 6
At procedure 'SPMOV_INVENTARIOS' line: 142, col: 9.
<Missing arg #1 - possibly status vector overflow>.

Si se ejecuta lo mismo de firebird 2.5 ejecuta asi
Código SQL [-]
BLOQUEAR_SALDO_BODEGA.
El saldo de este Producto no puede estar en negativo = ACAI FUTURO COM LIQ 269ML.

Parte del codigo donde se ejecuta el error obvio donde le pongo a negativo el stock

Código SQL [-]

       Begin
        UPDATE producto_bodega SET cantidad=(cantidad)-:cantidad
        WHERE key_producto_b=:key_producto_b;
            WHEN SqlCode -901 DO BEGIN
                               in autonomous transaction do
                                insert into error_update (ID_TRANSACCION,MENSAJE,ID_CLAVE_DOCUMENTO,VALOR)
                                values (:key_producto_b,:cod_transaccion||'PB',:key_cab_mov,:cantidad);
                               End
       End

Casimiro Notevi 16-02-2024 19:38:02

¿Eso es un trigger?

IVAND 16-02-2024 22:21:14

No no no , el trigger ejecuta una condicion q si la ejecuto dentro de un sp me bota ese error en firebird 3 , mientras q en 2.5 funciona bien

si ejecuto el sp desde el ibexpert sale este mensaje


Código PHP:

BLOQUEAR_SALDO_BODEGA.
El saldo de este Producto no puede estar en negativo ACAI FUTURO COM LIQ 269ML.
At trigger 'PRODUCTO_BODEGA_AU0' line9col6
At procedure 
'SPMOV_INVENTARIOS' line142col9.
<Missing arg #1 - possibly status vector overflow>. 

si lo ejecuto desde mi aplicativo sale este mensaje
Código SQL [-]

"Attempt to execute an unprepared dynamic SQL statement"

Casimiro Notevi 17-02-2024 19:04:26

La verdad es que no me queda muy claro la situación, ¿puedes subir algún ejemplo sencillo para que podamos probar?

IVAND 22-02-2024 02:28:35

Hola casimiro tendria que subir la base de datos y un programita en delphi que haga saltar la validación para que veas el error , (especificamente lo que hace es que desde delphi 2009 con los componentes ibx capturamos el mensaje de error que nos devuelve la base de datos y al querer mostrar en delphi nos da el error)

Casimiro Notevi 22-02-2024 11:15:15

Cita:

Empezado por IVAND (Mensaje 554551)
... con los componentes ibx capturamos el mensaje de error que nos devuelve la base de datos y al querer mostrar en delphi nos da el error)


Sigo sin entender, entonces ¿el error es al mostrar en delphi el mensaje devuelto?

IVAND 13-03-2024 14:42:40

Mil disculpas por no responder a tiempo

Si Casimiro , en delphi con los componentes ibx ya no muestra el mensaje de error de forma correcta , como lo mostraba cuando usaba firebird 2.5

mamcx 13-03-2024 15:53:22

Cita:

Empezado por IVAND (Mensaje 554517)
Código SQL [-]

"Attempt to execute an unprepared dynamic SQL statement"

Eso suena a que es este problema:

Código SQL [-]
 values (:key_producto_b,:cod_transaccion||'PB',:key_cab_mov,:cantidad);

Es erroneo concatenar un parametro con lo que sea. Cambia cod_transaccion para que tenga el texto completo.


La franja horaria es GMT +2. Ahora son las 00:04:43.

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