Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Uso de TFDScript (https://www.clubdelphi.com/foros/showthread.php?t=89956)

santiago14 09-03-2016 14:08:26

Uso de TFDScript
 
Buenas, estoy intentando hacer un pequeño Script para borrar unos datos en mi Firebird 2.5.
Estoy usando TFDScript y Delphi XE5.

Paso a continuación el código que tengo.
Código Delphi [-]
procedure TfrmVueltaAtrasUltimoBoletin.btnVueltaAtrasClick(Sender: TObject);
begin
  if IDYES = Application.MessageBox(PWideChar('¿Confirma vuelta atrás del último Boletín (BOD) registrado?'
    + #13#10 + 'Esta acción NO PODRÁ deshacerse.'),
    PWideChar(Self.Caption), MB_YESNO + MB_ICONQUESTION) then
  begin
    with DataModule1 do
    begin
      terminarTransaccion;
      try
        trxBoletin.StartTransaction;
        //BorrarUltimoBoletinRegistrado(scrptUltimoBoletin, GetCodBOD);
        scrptUltimoBoletin.SQLScriptFileName:='Scripts\VueltaAtras.sql';
        scrptUltimoBoletin.Params[0].AsInteger:=GetCodBOD;
        scrptUltimoBoletin.ValidateAll;
        scrptUltimoBoletin.ExecuteAll;
        trxBoletin.Commit;
        Application.MessageBox('Vuelta atrás terminada.',
          PWideChar(self.Caption), MB_OK + MB_ICONINFORMATION);
        Close;
      except
        on e:Exception do
        begin
          terminarTransaccion;
          mErrores(e, 'Imposible completar la operación solicitada.',
            self.Caption);
        end;
      end;
    end;
  end;
end;

Ahora muestro lo que tengo en el archivo .sql

Código SQL [-]
Delete from avisosxboletines_digitales a
Where a.cod_boletin_digital = :codigo;


Delete from avisosadminxboletines_digitales ax
where ax.cod_boletin_digital = :codigo;


Delete from boletines_digitales b
Where b.cod_boletin_digital = :codigo;

Update entorno_boletin_digital u set u.valor_ebd = CAST(u.valor_ebd AS integer) - 1
Where u.nombre_ebd = 'ULTIMO_NRO_EDICION';

El parámetro :codigo lo he definido a través de: TFDScript.Params

La cuestión es que esta secuencia no me tira ningún error, llega al Commit sin drama y me dice que la operación se hizo correctamente. Pero cuando voy a ver mi BBDD, los datos siguen ahí, no se borraron los registros que quiero.
He comprobado este script SQL haciéndolo directamente en Script Executive de IBExpert y funciona bien, no hay errores.
¿Podría decirme alguien que estoy haciendo mal?

Muchas gracias.

Lepe 09-03-2016 22:39:38

Está claro:
- GetCodBOD no devuelve el valor que esperas (pon un showMessage)
- el scrptUltimoBoletin no está asociado con la transacción trxBoletin

Me inclino por el primer error.

Saludos!!

santiago14 15-03-2016 00:04:55

Cita:

Empezado por Lepe (Mensaje 503178)
Está claro:
- GetCodBOD no devuelve el valor que esperas (pon un showMessage)
- el scrptUltimoBoletin no está asociado con la transacción trxBoletin

Me inclino por el primer error.

Saludos!!

Hola compañero, gracias por tu aporte.
Te cuento.
Revisé todo lo que proponías.

En lugar de GetCodBOD puse un valor numérico, 200215, que estoy seguro que está en los registros de la BBDD.
scrptUltimoBoletin Si estaba asociada con la transacción trxBoletin, y esta con el componente de Conexión, cntBoletin. Hice un Select y responde perfectamente, con un TFDQuery.

Ejecuté el programa y nada.
No puedo dar con el problema...

Gracias, Santiago.

santiago14 16-03-2016 18:03:11

:eek::o:D
Qué mas puedo decir... y escribir.
Encontré la falla.
Resulta que en el script había cuatro consultas: 3 Delete's y 1 Update.

En la BBDD (Firebird) tenía los permisos para hacer el Update sobre la tabla pero NO tenía permisos para Delete en las otras...
Poniendo esos permisos se acabó el problema.
El Script tiene un Evento: OnError, supongo que tocando ahí se podrá detectar el error que ocasiona una consulta del Script.
En este caso, no enviaba ningún error y seguía. Me dí cuenta porque lo único que se ejecutaba era el Update.

Bueno.... Gracias.

Casimiro Notevi 16-03-2016 19:29:26

Estas cosas son de las que es difícil poder ayudar si no podemos probarla en un entorno exactamente igual. Pero menos mal que lo has solucionado :)


La franja horaria es GMT +2. Ahora son las 08:34:34.

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