Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como saber si se insertó un registro en una tabla (https://www.clubdelphi.com/foros/showthread.php?t=96804)

darkamerico 02-08-2024 16:29:35

Como saber si se insertó un registro en una tabla
 
Saludos amigos,
El caso es el siguiente: Existe una aplicación (No hecha en delphi) que maneja su BD en SQL Server, la tarea que me han encomendado es saber si en una tabla especifica se realizó un Insert. Obviamente tengo acceso a dicha BD, desde mi aplicacion "Monitor" y mantener un contador de las filas insertadas alli.

Atte,
Americo

delphi.com.ar 02-08-2024 16:40:14

Puedes saber que se ingresaron registros en una tabla por muchos medios, pero no puedes saber si el origen del dato es la aplicación.

Sin conocer el modelo de datos, puedes hacer algo de todo esto:
  • Comparar el valor de la secuecia autoincremental del la tabla (sys.identity_columns)
  • Agregar un trigger para generar datos en una tabla tuya que registre fecha y hora de la inserción de los datos.
  • Contar registros (fallaría si se borran datos)
  • Consultar el MAX de algún campo secuencia (si no está indexado es inóptimo)

Saludos.

darkamerico 02-08-2024 17:21:44

Cita:

Empezado por delphi.com.ar (Mensaje 556903)
Puedes saber que se ingresaron registros en una tabla por muchos medios, pero no puedes saber si el origen del dato es la aplicación.

Sin conocer el modelo de datos, puedes hacer algo de todo esto:
  • Comparar el valor de la secuecia autoincremental del la tabla (sys.identity_columns)
  • Agregar un trigger para generar datos en una tabla tuya que registre fecha y hora de la inserción de los datos.
  • Contar registros (fallaría si se borran datos)
  • Consultar el MAX de algún campo secuencia (si no está indexado es inóptimo)

Saludos.

Antes de nada agradecer la respuesta.
Estoy usando los componentes UniDAC, me preguntaba si quizás existe algún evento del dataset (TUniTable o TUniQuery) desde mi aplicación que apunta a esa tabla que se dispare de forma asíncrona cada vez que dicha tabla registra un nuevo registro.

Atte

delphi.com.ar 02-08-2024 18:16:21

Si se inserta desde otra aplicación, tu aplicación no va a recibir un evento de la base de datos.
Yo exploraría mediante un uso de un trigger y xp_cmdshell, para que al momento de crear un registro se ejecute una aplicación que notifique a la tuya, mediante un socket o similar. Desconozco SqlServer, pero algunos motores te permiten escribir tus propias librerías para cálculo donde puedes introducir tu mecanismo de notificación.

Saludos.

darkamerico 03-08-2024 17:02:14

Cita:

Empezado por delphi.com.ar (Mensaje 556906)
Si se inserta desde otra aplicación, tu aplicación no va a recibir un evento de la base de datos.
Yo exploraría mediante un uso de un trigger y xp_cmdshell, para que al momento de crear un registro se ejecute una aplicación que notifique a la tuya, mediante un socket o similar. Desconozco SqlServer, pero algunos motores te permiten escribir tus propias librerías para cálculo donde puedes introducir tu mecanismo de notificación.

Saludos.

ok amigo, veré que opciones puedo explorar, gracias

Neftali [Germán.Estévez] 05-08-2024 10:51:38

Cita:

Empezado por delphi.com.ar (Mensaje 556903)
  • Comparar el valor de la secuecia autoincremental del la tabla (sys.identity_columns)
  • Agregar un trigger para generar datos en una tabla tuya que registre fecha y hora de la inserción de los datos.
  • Contar registros (fallaría si se borran datos)
  • Consultar el MAX de algún campo secuencia (si no está indexado es inóptimo)


A lo comentado por [delphi.com.ar] yo añadiría las "Query Notifications" (link); Ya que estás con FireDAC (TFDEventAlerter (link)) y SQLServer, con esta configuración puedes usarlas (SQLServer las tiene y FireDAC las implementa).

Aquí tienes la lista de Base de Datos que las soportan y que puedes acceder a ellas utilizando FireDAC.


Cita:

Empezado por delphi.com.ar (Mensaje 556906)
Si se inserta desde otra aplicación, tu aplicación no va a recibir un evento de la base de datos.


En el caso de "Query Notifications" son contra la Base de Datos, por lo tanto es independiente de la aplicación con la que se hayan insertado/Modificado/Borrado los registros de la tabla. Tu aplicación recibe las notificaciones que le hayas programado,
Tienes la explicación completa de cómo hacerlo, con todo lo necesario y un proyecto con código fuente en esta entrada de mi blog:
https://neftali.clubdelphi.com/event...notifications/

IMPORTANTE: Lo explica en el artículo, que tienes que activar el servicio ENABLE_BROKER para la Base de Datos (si no lo tiene activo). Ahí tienes cómo consultarlo y cómo activarlo si es necesario.

darkamerico 07-08-2024 22:37:36

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 556913)
A lo comentado por [delphi.com.ar] yo añadiría las "Query Notifications" (link); Ya que estás con FireDAC (TFDEventAlerter (link)) y SQLServer, con esta configuración puedes usarlas (SQLServer las tiene y FireDAC las implementa).

Aquí tienes la lista de Base de Datos que las soportan y que puedes acceder a ellas utilizando FireDAC.





En el caso de "Query Notifications" son contra la Base de Datos, por lo tanto es independiente de la aplicación con la que se hayan insertado/Modificado/Borrado los registros de la tabla. Tu aplicación recibe las notificaciones que le hayas programado,
Tienes la explicación completa de cómo hacerlo, con todo lo necesario y un proyecto con código fuente en esta entrada de mi blog:
https://neftali.clubdelphi.com/event...notifications/

IMPORTANTE: Lo explica en el artículo, que tienes que activar el servicio ENABLE_BROKER para la Base de Datos (si no lo tiene activo). Ahí tienes cómo consultarlo y cómo activarlo si es necesario.

Gracias Nelfali, un fuerte abrazo.
Estoy en modo investigación.


Atte


La franja horaria es GMT +2. Ahora son las 07:54:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi