Problema de claves externas en un cuadro.

Buenas,
hace tiempo que no posteo.

La duda actual es porque no se como resolver este tema.

Tengo un ABM con Solapas, similar al Ejemplo de ABM de Personas.
La funcionalidad esta andando bien.
Pero en la visualizacion de una solapa que tiene el cuadro y debajo el form, en el form cargo los campos que son FK con ef_combo, pero al mostrarlos en el cuadro, veo el codigo.

Intente agregar la tabla a la relacion, pero sigo igual.
Cual es la mejor manera de mostrar eso ?

No se si lo correcto seria sobreescribir algun metodo generico de acceso a los datos de dicha tabla, en algun dt, por ejemplo.

Les dejo una imagen de como queda el cuadro y el form, donde en el form se observan los combos, pero en el cuadro esta el ID y obviamente necesito la descripcion.

Saludos


Hola Ricardo,

estimo que estas usando un DT para obtener los datos del cuadro, en definitiva el mismo al cual le ingresas datos por el form, la pregunta puntual es:

  • En dicho DT, ¿tenes la columna descripcion de la tabla externa agregada como columna externa?

Esa seria la forma mas sencilla de solucionarlo, cuando recuperas los datos del DT para mostrarlos en el cuadro, la descripcion te viene con un nombre de columna particular, la cual haces coincidir en el cuadro y listo.

  • Si tenes la columna agregada, fijate en la tercera solapa del DT, la que corresponde a columnas externas, cual es el metodo de carga y si esta tildado el check ‘sincro continua’… si falta alguna de las 2 cosas no vas a ver la descripcion sino el codigo.

Saludos

Hola Richard.
No, no usa el DT, cuando miro el log, veo que hace las consultas de la tabla de la siguiente manera;


SELECT
    t_medidas.id, 
    t_medidas.catastro_id, 
    t_medidas.medida_tipo_id, 
    t_medidas.medida, 
    t_medidas.unidad_id
FROM
    t_medidas as t_medidas
WHERE
    (t_medidas.catastro_id) IN (
        SELECT
            id
        FROM
            t_catastros as t_catastros
        WHERE
            t_catastros.id = '1' )

En ningun lado yo escribi ese select, ni nada parecido.
Entiendo que navega sola la tabla en base a la definicion que arme en el objeto relacion.
Intente agregando la tabla de referencia en la relacion, pero tampoco funciona.

Voy a intentar con la segunda opcion…

Saludos

Hola Ricardo,

consulta, ¿desde donde esta obteniendo sus datos el cuadro?.

  • Si lo estas recuperando con una SQL no te queda otra que agregar el join y la columna extra.
  • Si lo estas recuperando de una variable de sesion, algo similar a lo anterior, tenes que ir a buscar manualmente la descripcion.

No es necesario agregar la tabla a la relacion para obtener la descripcion, con agregar la columna como externa alcanza.

Saludos

Hola Richar, disculpa si no me explique bien desde un principio.

Todo esto arranca en un Cuadro de seleccion, luego de hacer la selecciona en la linea se va una pantalla con solapas (en realida ya sabes que son varias pantallas) , en una de ellas tengo el cuadro en cuestion.

La consulta la hace el toba automaticamente, a esa tabla y a otras mas, y es lo que veo en el log de consultas a la BD.
Cuando estoy en la solapa y navego los datos, por lo que entiendo no interactua casi con la BD porque esta todo cargado en memoria, al grabar solamente hago el dep(‘datos’)->Sincronizar() y eso hace todos los accesos a la base de datos.

En cuanto a datos que graba esta funcionando perfecto, pero no logro hacer que el cuadro se complete con las descripciones.

Basicamente es como si tuviera una estructura de tablas asi:
a)Cabecera de Notas
b)Detalle de Notas
c)Tipo de Detalle de Notas

por cada a) puedo tener varios b)
en cada b) hay un campo id que es FK a la tabla c)

La relacion en la operacion define la “relacion” entre estas 3 tablas.

El cuadro principal muestra los datos de la tabla a), al seleccionar voy a una pestaña que tiene un cuadro de la tabla b), dentro de las columnas de este cuadro, existen columnas que son ID y quiero mostrar la descripcion que estan en la tabla c)

La lectura de la tabla b) se hace en el evento de la seleccion del cuadro principal, probe de poner columnas externas pero no me hace nada, si miro la consulta a la tabla en el log de accesos a la BD es identica como si no tuviera columnas externas.

Voy a intentar agregar nuevamente columnas externas, e ir probando de cambiar algunos checkboxs.

Gracias

Yo lo hago en el siguiente orden:

  1. si la descripción es el primer cuadro (Como es la Tabla padre, lleva la descripción y si es de otra tabla la carga en el sql que carga el cuadro) y en el datos tabla no se requiere adjuntar el campo como externo, basta con mencionarlo en el cuadro

  2. si la descripción es en los cuadros de las solapas
    2.1 creo un campo externo en el datos tabla respectivo
    2.2 lo tildo como externo
    2.3 en la solapa carga externa, cargo el sql o la función respectiva relacionando la columna de la descripción (derecha), con el el campo FK respectivo.
    2.4. en el cuadro se escribe el campo externo con el mismo nombre que se creó

con esto automáticamente cada que se de alta o modificación aun registro, automáticamente se carga y muestra la descripción

Espero ser claro.

Hay algo que me esta faltando …
Hago todos los pasos, en la definicion de la columna externa estoy usando metodo de carga “Metodo PHP”, y selecciono “tabla” en Ubicacion del Metodo, selecciono la tabla que corresponda en “tabla”, e ingreso el metodo en “nombre del metodo” que devuelve el valor.

Saludos

Ahi lo encontre, lo que no se aclara por ningun lado es que las columnas del select del dt que esta en la clave foranea debe coincidir con la columna externa de la tabla padre.

Les paso una inquietud, si tengo varias tablas de “tipo_algo”, con 2 campos id, descripcion.
Y una tabla padre tiene varias columnas que son FK a varias tablas tipo, y quiero mostrar la descripcion, tengo que entonces en el cuador de la tala padre, definir varias columnas externas, “descripcion_tipo_algo”, “descripcion_tipo_otro”, etc.
y en cada uno de los metodos “get_descripciones” hacer explicitamente el “Select id, descripcion as descripcion_tipo_algo …”

Es asi ?

Saludos