Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2017
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Evitar que un usuario se conecte más de una vez

A partir del código que he encontrado en un blog estoy tratando de implementar esa funcionalidad en mi base de datos FB. Tengo esta tabla en la base de datos:
Código:
CREATE TABLE Conexion (Id_Servidor INTEGER NOT NULL, Nombre VARCHAR(15) NOT NULL, Hora TIMESTAMP,
CONSTRAINT UQ_Conexion UNIQUE (Nombre))
y del blog que decía antes he adaptado dos triggers de la base de datos:
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);

  INSERT INTO Conexion (Id_Servidor, Nombre, Hora) VALUES (CURRENT_CONNECTION, CURRENT_USER, CURRENT_TIMESTAMP);
END
Código:
CREATE TRIGGER DESCONECTADO
ACTIVE ON 
  DISCONNECT
POSITION 1
AS
BEGIN
  DELETE FROM Conexion WHERE Nombre = CURRENT_USER;
END
En teoría con el primero de ellos primero se borran todas las conexiones que no están activas (por ejemplo si se ha apagado el servidor a lo bruto) y luego se inserta un registro en la tabla que he puesto arriba. Dado que hay un índice único con el nombre del usaurio, si está conectado debe saltar un error. El segundo disparador debería borrar la conexión cuando se sale de la aplicación correctamente.

Sin embargo algo debo estar haciendo mal y no sé que es. Si lanzo aplicación me pide el usuario y clave de acceso y la aplicación se lanza bien. Salgo de la misma de forma correcta y me voy a EMS SQL Manager y abro la base de datos con sysdba / masterkey.

Y aquí viene el problema: Si trato de ver el contenido de cualquier tabla o simplemente abrir el panel para escribir un query me da un error que intuyo genera el primero de los dos triggers.
Cita:
Can't format message 13:197 -- message file C:\Windows\firebird.msg not found.
Violation of PRIMARY or UNIQUE KEY constraint "UQ_CONEXION" on table "CONEXION".
Problematic key value is ("NOMBRE" = 'SYSDBA').
At trigger 'CONECTADO' line: 5, col: 3.

SQL Code: -803
IB Error Number: 335544665
Si ya estoy conectado, porque estoy viendo el árbol de la base de datos, y trato de abrir una tabla ¿por qué me da ese error? ¿No se supone que ese trigger sólo se ejecuta al conectarse a la base de datos?
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 10:55:13.


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
Copyright 1996-2007 Club Delphi