Error al ejecutar GSEC

5 comentarios

Como seguramente sabes, el programa GSEC.EXE se utiliza para agregar usuarios, cambiar datos de los usuarios, eliminar usuarios y ver cuales son los usuarios admitidos.

Pero si tienes más de una instancia del Firebird instalada entonces a veces podrías ver una pantalla de error similar a la siguiente:

GSEC1

Captura 1. Si haces clic en la imagen la verás más grande

¿Qué significa ese error número 335545106?

Que no puede abrir la Base de Datos en la cual se guardan los nombres y las contraseñas de los usuarios.

En Firebird 2.x el nombre de esa Base de Datos es SECURITY2.FDB y la encontrarás en la misma carpeta donde instalaste al Firebird.

¿Cómo se soluciona ese error?

Si tienes más de una instancia del Firebird instalada entonces cada instancia usa su propio puerto (o así debería ser si se instaló correctamente). Por lo tanto la solución es indicarle que abra el archivo SECURITY2.FDB que corresponde a la instancia que estemos usando en ese momento.

GSEC2

Captura 2. Si haces clic en la imagen la verás más grande

Como puedes ver en la Captura 2. se indico la IP de la computadora y el puerto 3050. Como ese es el puerto que le corresponde a la instancia del Firebird que nos interesa, funcionó perfectamente.

Después de la opción -database se escribió la ruta completa entre comillas porque hay un espacio en blanco en el medio, y en esos casos el Windows exige que se usen comillas.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

Anuncios

Agregando filas adicionales

7 comentarios

Un lector del foro de este blog hizo un pedido interesante: mostrar una consulta de una forma especial.

CIUDADES

Captura 1. Si haces clic en la imagen la verás más grande

O sea que se tienen 3 tablas: PAISES, ESTADOS, CIUDADES, relacionadas mediante sus identificadores, tal y como debe ser.

Pero ¿cómo hacemos para mostrar las filas de la forma pedida?

Hay varias alternativas, en este artículo mostraremos una de ellas.

La idea es agregar a la tabla de CIUDADES, dos columnas:

  • Si mostraremos el nombre del País
  • Si mostraremos el nombre del Estado

Nuestras tablas por lo tanto tendrán las siguientes estructuras:

CIUDADES2

Captura 2. Si haces clic en la imagen la verás más grande

CIUDADES3

Captura 3. Si haces clic en la imagen la verás más grande

CIUDADES4.png

Captura 4. Si haces clic en la imagen la verás más grande

Los datos contenidos en esas tablas podemos ver a continuación:

CIUDADES6

Captura 5. Si haces clic en la imagen la verás más grande

CIUDADES7

Captura 6. Si haces clic en la imagen la verás más grande

CIUDADES8

Captura 7. Si haces clic en la imagen la verás más grande

Una consulta simple sería la siguiente:

Listado 1.

SELECT
   PAI_NOMBRE,
   EST_NOMBRE,
   CIU_NOMBRE
FROM
   CIUDADES
JOIN
   PAISES
      ON CIU_IDEPAI = PAI_IDENTI
JOIN
   ESTADOS
      ON CIU_IDEPAI = EST_IDEPAI AND
         CIU_IDEEST = EST_IDENTI
ORDER BY
   CIU_IDEPAI,
   CIU_IDEEST,
   CIU_IDENTI

CIUDADES5

Captura 8. Si haces clic en la imagen la verás más grande

Pero eso no es lo que queremos obtener, porque los nombres de los Países y de los Estados están repetidos, y lo que queremos es verlos una sola vez.

¿Y entonces, qué hacemos?

Si nos fijamos en la Captura 1. veremos que se muestran en total 18 filas aunque en la tabla de CIUDADES solamente hay 12 filas. Eso significa que se están mostrando 6 filas más. Por lo tanto, lo que debemos hacer es agregar esas 6 filas adicionales.

¿Y cómo lo conseguimos?

Mediante una construcción del Firebird que se llama stored procedure seleccionable.

Listado 2.

CREATE PROCEDURE SP_MOSTRAR_CIUDADES
   RETURNS(
      ftcNombrePais   TYPE OF COLUMN PAISES.PAI_NOMBRE,
      ftcNombreEstado TYPE OF COLUMN ESTADOS.EST_NOMBRE,
      ftcNombreCiudad TYPE OF COLUMN CIUDADES.CIU_NOMBRE)
AS
   DECLARE VARIABLE lcNombrePais    TYPE OF COLUMN PAISES.PAI_NOMBRE;
   DECLARE VARIABLE lcNombreEstado  TYPE OF COLUMN ESTADOS.EST_NOMBRE;
   DECLARE VARIABLE lcNombreCiudad  TYPE OF COLUMN CIUDADES.CIU_NOMBRE;
   DECLARE VARIABLE lcMostrarPais   TYPE OF COLUMN CIUDADES.CIU_MOSPAI;
   DECLARE VARIABLE lcMostrarEstado TYPE OF COLUMN CIUDADES.CIU_MOSEST;
BEGIN

   FOR SELECT
      PAI_NOMBRE,
      EST_NOMBRE,
      CIU_NOMBRE,
      CIU_MOSPAI,
      CIU_MOSEST
   FROM
      CIUDADES
   JOIN
      PAISES
         ON CIU_IDEPAI = PAI_IDENTI
   JOIN
      ESTADOS
         ON CIU_IDEPAI = EST_IDEPAI AND
            CIU_IDEEST = EST_IDENTI
   ORDER BY
      CIU_IDEPAI,
      CIU_IDEEST,
      CIU_IDENTI
   INTO
      :lcNombrePais,
      :lcNombreEstado,
      :lcNombreCiudad,
      :lcMostrarPais,
      :lcMostrarEstado
   DO BEGIN
      IF (lcMostrarPais = 'T') THEN BEGIN
         ftcNombrePais   = lcNombrePais;
         ftcNombreEstado = '';
         ftcNombreCiudad = '';
         SUSPEND;
      END
      IF (lcMostrarEstado = 'T') THEN BEGIN
         ftcNombrePais   = '';
         ftcNombreEstado = lcNombreEstado;
         ftcNombreCiudad = '';
         SUSPEND;
      END
      ftcNombrePais   = '';
      ftcNombreEstado = '';
      ftcNombreCiudad = lcNombreCiudad;
      SUSPEND;
   END

END;

Explicación:

Como necesitamos agregar 6 filas lo podemos conseguir fácilmente usando un stored procedure seleccionable.

Obtenemos y colocamos en variables locales los nombres de los Países, de los Estados, de las Ciudades, y si debemos mostrar el País, y si debemos mostrar el Estado.

Luego, colocamos en los parámetros de salida los valores que deseamos sean devueltos.

Como el stored procedure es seleccionable entonces debemos usar el comando SUSPEND cada vez que deseamos devolver los parámetros de salida.

Listado 3.

SELECT
   *
FROM
   SP_MOSTRAR_CIUDADES

Un stored procedure seleccionable puede ser tratado como si fuera una tabla. Al ejecutar el Listado 3. obtendremos el siguiente resultado.

CIUDADES9

Captura 9. Si haces clic en la imagen la verás más grande

Que es exactamente lo que deseábamos obtener.

Artículos relacionados:

Entendiendo a los stored procedures

Agregando filas adicionales (2)

El índice del blog Firebird21

El foro del blog Firebird21