FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
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. |
#2
|
||||
|
||||
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. |
#3
|
||||
|
||||
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. |
#4
|
||||
|
||||
A ver si el sqlmanager (que no lo he usado nunca) abre dos conexiones por algún motivo.
Prueba al revés, cierra el sqlmanager y ejecuta tu programa, debe salir solamente una línea. |
#5
|
||||
|
||||
¿Y como hago la prueba? Porque eso si que no se me ocurre.
|
#6
|
||||
|
||||
Un botón en el formulario principal de tu programa, ejecutas en select y muestras el resultado en un dbgrid, por ejemplo, o un shomessage( select count ... ))
|
#7
|
||||
|
||||
Pues tienes razón, creo. He modificado el programa de forma que después de la primera conexión se borre el trigger que graba en la tabla y efectivamente sólo hay una entrada en la misma. Ahora ya si que no entiendo nada. Seguiré haciendo pruebas.
|
#8
|
||||
|
||||
Puede ser que tengas razón, todo apunta en esa dirección y parece que efectivamente SQL Manager abre una conexión por cada consulta. Tendré que tocar el trigger para que cuando entre con SYSDBA, por ejemplo, no grabe ninguna entrada en la tabla de conexiones.
|
#9
|
||||
|
||||
Efectivamente el problema es el que señala Casimiro: SQL Manager abre una coexión para cada elemento que se trata de consultar y de ahí viene el error. He modificado el trigger de conexión dejándolo de esta manera:
Código:
CREATE TRIGGER CONECTADO ACTIVE ON CONNECT POSITION 0 AS BEGIN DELETE FROM Conexion WHERE Id_Servidor NOT IN (SELECT MON$ATTACHMENT_ID FROM MON$ATTACHMENTS); IF (CURRENT_USER IN (SELECT Nombre FROM Conexion)) THEN EXCEPTION Usuario_conectado; IF (CURRENT_USER <> 'SYSDBA') THEN INSERT INTO Conexion (Id_Servidor, Nombre, Hora) VALUES (CURRENT_CONNECTION, CURRENT_USER, CURRENT_TIMESTAMP); END |
|
|
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 |
|