Autor Tema: Error: Función agregar_usuario() en toba_instancia  (Leído 318 veces)

0 Usuarios y 1 Visitante están viendo este tema.

mfalemany

  • Newbie
  • *
  • Mensajes: 25
    • Ver Perfil
    • Sitio web personal
    • Email
  • Institución: Facultad de Ciencias Agrarias - UNNE
  • Nombre y apellido: Marcelo Federico Alemany
  • Sistema: Guarani
  • Teléfono laboral: 0379-4427589 (int 140)
  • Utilizo algun sistéma del SIU: Sí
Error: Función agregar_usuario() en toba_instancia
« : junio 06, 2018, 05:16:11 pm »
Buenas tardes, tengo una operación en la que un usuario se auto-registra.
En el controlador de esa operación, se llama a la siguiente función:
Código: [Seleccionar]
...
toba::instancia()->agregar_usuario(
     $datos['nro_documento'],
     $datos['ayn'],
     $datos['clave'],
     array( 'email' => $datos['mail'] )
);
...

El problema es que la función lanza una excepción, cuyo mensaje del motor es el siguiente:
Citar
SQLSTATE[42P01]: Undefined table: 7 ERROR: no existe la relación «apex_usuario» LINE 1: INSERT INTO apex_usuario ( usuario, nombre, autentificacion,... ^

Evidentemente la conexión con la instancia se realiza correctamente, y la tabla apex_usuario existe, ya que el sistema permite loguearse correctamente a los usuarios que ya existen.
 En la traza de la ejecución, se  involucran las clases toba_instancia, toba_modelo_instancia y por último toba_db, con su método sentencia_ejecutar(), que recibe correctamente los parámetros enviados (usuario, clave, mail, etc).

Si en la linea previa a la llamada a toba::instancia()->agregar_usuario() agrego:
Código: [Seleccionar]
var_dump(toba::instancia()->get_db());
Puedo ver (entre todos los otros valores), los siguientes:
Citar
["profile":protected]=> string(9) "localhost"
["usuario":protected]=> string(8) "postgres"
["clave":protected]=> string(8) "postgres"
["base":protected]=> string(8) "toba_2_7"
["puerto":protected]=> string(4) "5432"

Pero si, dentro de la clase toba_modelo_instancia, antes de la ejecución de la consulta, agrego lo siguiente:
Código: [Seleccionar]
ei_arbol($this->get_db()->get_lista_tablas_bd()); //veo las tablas de la base
$this->get_db()->sentencia_ejecutar($id, $atributos);
Me retorna un listado de todas mis tablas de la base de negocio. Es decir, no se conecta a la base de la instancia.

En toba.conf están correctamente definidas las variables de entorno TOBA_DIR, TOBA_PROYECTO y TOBA_INSTANCIA.
En el archivo bases.ini también están correctamente definidos los parámetros de conexión a la base de negocios y a la instancia de toba.

Versión de Toba: 2.7.2
Versión de PostgreSQL: 9.4.5
Versióbn de PHP: 5.3.4

Alguna idea de porqué no se encuentra apex_usuario?
Gracias.
« Última Modificación: junio 06, 2018, 06:10:29 pm por mfalemany »
Federico Alemany
Facultad de Ciencias Agrarias
Universidad Nacional del Nordeste

mfalemany

  • Newbie
  • *
  • Mensajes: 25
    • Ver Perfil
    • Sitio web personal
    • Email
  • Institución: Facultad de Ciencias Agrarias - UNNE
  • Nombre y apellido: Marcelo Federico Alemany
  • Sistema: Guarani
  • Teléfono laboral: 0379-4427589 (int 140)
  • Utilizo algun sistéma del SIU: Sí
Re:Error: Función agregar_usuario() en toba_instancia
« Respuesta #1 : junio 07, 2018, 09:12:23 am »
Dando vueltas sobre este tema, encontré como solucionarlo. Aunque todavía no entiendo porque falla.

Esto NO FUNCIONA (da el error de no encontrar la tabla apex_usuario)
Código: [Seleccionar]
...
$persona = toba::consulta_php('co_personas')->get_personas($nro_documento);
toba::instancia()->agregar_usuario(
     $datos['nro_documento'],
     $datos['ayn'],
     $datos['clave'],
     array( 'email' => $datos['mail'] )
);
...

Mientras que esto SI FUNCIONA:
Código: [Seleccionar]
...
toba::instancia()->agregar_usuario(
     $datos['nro_documento'],
     $datos['ayn'],
     $datos['clave'],
     array( 'email' => $datos['mail'] )
);
...

Es decir, la llamada previa a una consulta PHP hacer que se rompa.
Lo esperable, es que la llamada a toba::instancia()->agregar_usuario() obtenga una nueva conexión con la instancia, y no que intente obtener la tabla apex_usuario de mi base de negocios (como aparentemente intenta hacerlo).

Queda planteado el problema.
Saludos.
Federico Alemany
Facultad de Ciencias Agrarias
Universidad Nacional del Nordeste

richard

  • Moderador Global
  • *****
  • Mensajes: 2629
    • Ver Perfil
  • Institución: SIU
  • Nombre y apellido: Ricardo Dalinger
  • Sistema: SIU-Toba
Re:Error: Función agregar_usuario() en toba_instancia
« Respuesta #2 : junio 15, 2018, 12:27:46 pm »
Hola Marcelo,

disculpa la demora, lo mire al pasar un dia tarde y me quedo colgado el post. Te hago un par de consultas para ver si puedo  identificar el problema

- La fuente de datos del proyecto esta apuntando a la misma base que la de Toba o son distintas?.
- Tenes una fuente de datos para la instancia de toba en el proyecto?
- Tenes alguna extension de comandos de consola?

Con respecto a tu ultima apreciacion, Toba reutilza las conexiones abiertas en la medida de lo posible (misma bd) ya que todo el setup es costoso desde el punto de vista de procesamiento.
Si tenes la base de negocio separada, tiene que abrir una nueva conexion si o si por lo que no deberias estar viendo este inconveniente.
Lo unico que se me ocurre (ya que este acceso es por el modelo) es que este recibiendo la conexion equivocada al momento de instanciar la instancia (valga la redundancia) pero para eso necesito un poco mas de info, a ver si puedo reproducir tu caso.

Saludos
Twitter es al incontinente verbal,  lo que los dulces al diabetico.

mfalemany

  • Newbie
  • *
  • Mensajes: 25
    • Ver Perfil
    • Sitio web personal
    • Email
  • Institución: Facultad de Ciencias Agrarias - UNNE
  • Nombre y apellido: Marcelo Federico Alemany
  • Sistema: Guarani
  • Teléfono laboral: 0379-4427589 (int 140)
  • Utilizo algun sistéma del SIU: Sí
Re:Error: Función agregar_usuario() en toba_instancia
« Respuesta #3 : junio 15, 2018, 01:27:47 pm »
Hola Richard, respondiendo a tus consultas:

Citar
La fuente de datos del proyecto esta apuntando a la misma base que la de Toba o son distintas?.
El proyecto tiene solo una fuente de datos definida, que es la base de negocio de la aplicación, y es una base distinta a la de la instancia de toba.

Citar
Tenes una fuente de datos para la instancia de toba en el proyecto?
No hay una fuente de datos definida en el proyecto que apunte a la instancia de toba

Citar
Tenes alguna extension de comandos de consola?
No, no tengo ninguna extensión.

Como mencionaba anteriormente,  si llamo a:
Código: [Seleccionar]
toba::instancia()->agregar_usuario($datos_usuario)
funciona perfectamente. El usuario, cuyos datos paso como parámetro, se agrega a la instancia de toba, en la tabla apex_usuario

En cambio, si una linea antes, agrego la llamada a la función
Código: [Seleccionar]
toba::consulta_php('co_personas')->get_personas($nro_documento);Ya no funciona. En este caso, me devuelve el mensaje
Citar
SQLSTATE[42P01]: Undefined table: 7 ERROR: no existe la relación «apex_usuario» LINE 1: INSERT INTO apex_usuario ( usuario, nombre, autentificacion,... ^

En la función toba::consulta_php('co_personas')->get_personas(), defino una variable $sql (con el select a la tabla) y luego:
Código: [Seleccionar]
return toba::db()->consultar($sql);Claro, que la única fuente de datos definida en el proyecto está indicada como "Fuente de Datos predet." en las propiedades del proyecto.

Saludos y gracias!
Federico Alemany
Facultad de Ciencias Agrarias
Universidad Nacional del Nordeste