FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Asumiendo que ya verificó que CURRENT_CONNECTION haya enviado a la tabla Conexion un ID correcto, ensayar lo siguiente a ver que sucede... crear un nuevo trigger de base de datos, así:
Pues en teoria veo correcto lo que estás haciendo, sin embargo te propongo esto, por ensayar, a lo mejor de una nueva idea al respecto.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
#2
|
||||
|
||||
Cita:
Al margen de que tu idea con trigger de desconexión me parece correcta lo que me sorprende es, como comentaba en primer mensaje, que el error que señalaba se da cuando intento ver el contenido de una tabla. Es decir: ese mensaje de error no tiene lugar cuando me conecto a la base de datos y sí cuando con SQL Manager quiero ver el contenido de una tabla (evidentemente con el programa también) o escribir un query; es sólo entonces, cuando seleccióno la pestaña Data en SQL Manager o abro el panel de los querys, que aparece ese mensaje de error. Es como si tratara de volver a conectarse a la base dedatos. Por otra parte: ¿cómo verifico que se haya enviado un ID correcto si no puedo ver el contenido de las tablas? |
#3
|
||||
|
||||
Me estoy dando cuenta de una cosa pero no sé por dónde coger el problema. Estoy haciendo pruebas con EMS SQL Manager; he eliminado los triggers que he descrito antes para poder ver el contenido de las tablas y evidentemente ahora no da error. Sin embargo me ha llamdo la atención una cosa.
Me conecto a la BB.DD. y ejecuto este query que, más o menos, va dentro del primer trigger:
y curiosamente me devuelve dos filas: Y si abro cualquier tabla de la BB.DD. y ejecuto el mismo query se añade un tercera fila: por lo tanto, y dado que esa tabla MON$ATTACHMENTS añade una fila cada vez que se abre una tabla o query, el campo MON$ATTACHMENT_ID no puede ser el que se use para controlar cuantas veces se conecta un usuario. Y el problema que veo es que no hay ninguna columna de esa tabla que pueda usarse para controlar ese acceso único para cada usuario porque la segunda columna MON$SERVER_PID tiene siempre ese mismo valor, que imagino variará cuando se vuelva a encender el PC; acaso una combinación de MON$ATTACHMENT_ID y MON$STATE pudiera ser válida. Última edición por Casimiro Notevi fecha: 24-04-2017 a las 10:42:29. |
#4
|
||||
|
||||
Que yo recuerde, cada registro es una conexión.
Puedes mirar, si quieres, el campo MON$USER también, así sabes cuántas conexiones de cada uno hay. |
#5
|
||||
|
||||
Efectivamente cada registro es una conexión, pero por lo que he deducido no es una conexión a la base de datos si no a cada uno de sus elemntos. Así si abro una tabla tengo lo que se ve en la primera imagen, con dos líneas. Dado que el trigger graba en la tabla de conexiones una entrada con el valor de MON$ATTACHMENT_ID y otra con el de MON$USER y la clave única está sobre este último campo en cuanto trato de acceder a una tabla se produce una violación de índices ya que intenta insertar una nueva fila en la tabla.
He probado a modificar dicha tabla Conexion haciendo que el índice sea sobre los dos primeros campos (Id_servidor y nombre) pero entonces no me impide dos conexiones para el mismo usuario. Tal vez lo que haya que hacer es eliminar ese índice y comprobar en el trigger que el usuario no está ya conectado. Estoy dándole vueltas y hecaindo pruebas. Ya os diré como me ha ido, pero se acepta cualquier idea. |
#6
|
||||
|
||||
Cita:
Si tienes más de un registro es porque tienes más de una conexión abierta, seguramente el propio delphi/bcb con la base de datos conectada. |
#7
|
||||
|
||||
Cita:
pero si sólo se está ejecutando SQL Manager y todo lo demás (BCB y la aplicación) cerrado sale esto: Por eso deduzco que por cada elemento que se abre se inserta una línea en la tabla. También es cierto que con la aplicación, al menos, para cada usuario debería haber una única línea y por eso me llama la atención que con el usuario SYSDBA desde SQL Manager haya dos: una que supongo que es la conexión a la BB.DD. (MON$STATE = 0) y la otra la del query (MON$STATE = 1). Además, como puedes ver, la primera entrada del susuario SYSDBA no cambia el valor MON$ATTACHMENT_ID; por eso deduzco que se trata de la conexión a la BB.DD. Buscando por internet he ido a dar con un blog de un programador que en un artículo explica las tablas de monitorización, pero no me ha aclarado gran cosa. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Como hacer una BD que se conecte a SqlServer2005 | ivantj24 | Conexión con bases de datos | 17 | 02-03-2011 22:19:02 |
Evitar que el usuario escriba tildes con javascript | cahosoft | HTML, Javascript y otros | 10 | 19-10-2006 21:27:25 |
INIDataSet ¿Existe un data set que se conecte a archivos .ini? | Al González | Conexión con bases de datos | 6 | 11-05-2004 18:32:50 |
Como evitar que el usuario cierre la form! | Waldo | API de Windows | 2 | 20-11-2003 18:46:47 |
Evitar que un usuario modifique la fecha y la hora | @-Soft | Windows | 4 | 09-05-2003 01:30:17 |
|