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)
-   -   Trazas (https://www.clubdelphi.com/foros/showthread.php?t=95753)

Dean87 12-07-2022 17:16:27

Trazas
 
Saludos, estoy intentando generar las trazas de acceso a una BD desde un sistema de gestión y no se me ocurre cómo. Usando FireDac en los eventos afterpost no encuentro forma de obtener el fdquery que generó el evento y así poder crear un único manejador del evento que me guarde la tabla en la que se escribió o actualizó. Solo necesito saber cómo guardar que tabla se editó o modificó ...

chenech 12-07-2022 18:25:55

Usar trigger
 
Hola, que base de datos usas? si tienes trigger podrias usar estos y es transparente a la aplicación.
Un saludo.

Casimiro Notevi 12-07-2022 18:31:33

Cita:

Empezado por Dean87 (Mensaje 547465)
Saludos

Saludos y bienvenido a clubdelphi :)
Te aconsejo que leas nuestra guía de estilo, gracias. Son una corta lista de consejos para que podamos ayudarnos mejor entre todos.
Por ejemplo, poner títulos descriptivos a tus dudas, ya que "Trazas" no dice nada.
Dar información amplia y detallada, ni siquiera has dicho qué base de datos estás usando.
Y también puedes hacer uso del buscador, ese tema se ha tratado muchas veces aquí, por lo que seguro que podrás encontrar información al respecto.
Y si tienes cualquier duda, sigue preguntando por aquí.
Saludos ^\||/

Dean87 12-07-2022 22:24:00

Trazas FDquery
 
Cita:

Empezado por chenech (Mensaje 547466)
Hola, que base de datos usas? si tienes trigger podrias usar estos y es transparente a la aplicación.
Un saludo.


Saludos, uso SQL Server 2008 R2, pero preferiría un método alternativo a los triggers. Por ejemplo sería bueno poder capturar en el evento afterpost que FDquery generó el mismo, pero no parece posible.


Casimiro, leeré la guía de estilos. He utilizado el buscador y no aparece nada parecido a lo que busco ni con el buscador interno, ni con Google.

Casimiro Notevi 13-07-2022 09:29:26

Cita:

Empezado por Dean87 (Mensaje 547465)
... acceso a una BD ....

¿Sólamente quieres saber quién accede?

movorack 13-07-2022 16:39:40

Hola Dean87,

EL afterPost de Firedac es un evento TDatasetNotify en el cual envían el Dataset que dispara el evento.

Si quisieras hacer un solo evento donde manejar las trazas, podrías hacer que reciba como parámetro el Dataset que te envían en el afterpost.

Código Delphi [-]
procedure TForm1.ADQuery1AfterPost(DataSet: TDataSet);
begin
  GuardarTrazas(DataSet);
end;

procedure TForm1.GuardarTrazas(DataSet: TDataSet);
begin
  // Acá puedes manejar el TFdQuery(DataSet) y guardar tus trazas
end;

Dean87 14-07-2022 05:19:31

Cita:

Empezado por Casimiro Notevi (Mensaje 547472)
¿Sólamente quieres saber quién accede?

Usuario interno de mi aplicación, acción, tabla y fecha.
Lo que necesito es una sola función que maneje todos los afterpost y after delete, guardando lo solictado arriba en la tabla de trazas.

movorack saludos, tu solución funcionara si el DataSet guardara hacia que tabla se pretende hacer el post.

Conozco que puedo usar el dataset para recuperar los datos que se guardaron lo cual es útil para conocer que registró se modificó.

Al final estoy haciendo algo así en cada FDQuery BeforePost. (Debería guardar en estado en BeforePost y guardar la traza en AfterPost, pero estoy ahorrando tiempo es un trabajo urgente para la universidad)

Código Delphi [-]
if  FD_Nom_Nivel.State = dsInsert  then
Tseguridad.CrearTraza(Encontrar_IDUsuario(form1.IUsuario), 'Insertar', 'Nom_Nivel_Ed')  ;

if  FD_Nom_Nivel.State = dsEdit  then
Tseguridad.CrearTraza(Encontrar_IDUsuario(form1.IUsuario), 'Modificar', 'Nom_Nivel_Ed')  ;

movorack 14-07-2022 05:39:09

:/ Esto es lo que sucede cuando no dan la información completa al crear el post.

Dale una mirada a las funciones de análisis de sentencias en DBCommon.

https://stackoverflow.com/questions/...for-sql-server


La franja horaria es GMT +2. Ahora son las 13:47:15.

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