Actualizar datos de tabla respecto a otra tabla

25 views
Skip to first unread message

Mario Villoria

unread,
Jul 27, 2019, 1:35:59 PM7/27/19
to Visual Foxpro Latinoamérica
Buen día grupo, tratare de exponer mi caso para ser lo mas especifico posible y poder obtener su valiosa ayuda.
Estoy diseñando un sistema para un laboratorio, en el momento no se como hacer lo siguiente: tengo una tabla llamada tconfiguracion con los campos "codigo" "orden" "estudio" "descripción", entre otros, en el campo código guardo con reccount() el numero de registro,en el campo orden guardo numeros del 1 al total de registros que coinciden con el campo "estudio" que es donde guardo el numero del estudio (tengo otra tabla llamada testudio donde guardo el código también con reccount() y la descripción del estudio (ejemplo:"1 orina completa", "2 glucosa", "3 trigliceridos", para resumir con un ejemplo la tabla tconfiguracion tiene la siguiente estructura:

tabla.png

tengo un formulario donde puedo cambiar el orden de la descripción del estudio, en la imagen el  estudio 18 pertenece a "orina completa" y el orden va del 1 al 12 con su respectiva descripción (puedo cambiar el orden),hasta los momentos todo bien, el problema radica en que cuando voy a guardar los resultados necesito tener la misma estructura que tiene el examen en la tabla configuración,por ejemplo, si creo otra tabla en donde ademas de los campos de la tabla tconfiguracion  agregue otros campos como el numero de orden de examen, fecha, nombre del paciente, etc, cuando guarde los resultados del examen de orina de por ejemplo dos pacientes significa que en esa tabla tendré  24 registros (12 de un paciente y 12 de otro), lo que no se hacer es como puedo actualizar la tabla que cree si modifico el orden del examen en la tabla tconfiguracion, o si elimino algun registro o modifico alguno, para ese caso en la tabla tconfiguracion tendria un esquema diferente al guardado en la otra tabla.

En fin lo que quiero hacer es que cuando vaya a guardar los resultados de un examen de un paciente se muestre la estructura que tengo en tconfiguracion, y que si luego modifico esa estructura se muestre tal cual al momento de ingresar o ver los resultados de ese examen.


Espero haber sido especifico y puedan ayudarme.


Carlos Miguel FARIAS

unread,
Jul 29, 2019, 7:02:21 AM7/29/19
to vfpl...@googlegroups.com
Si utilizas reccount, estaría asumiendo un acceso directo a los datos, lo que implica que no podrás borrar registros, ya que si eliminas registros, se te repetirán los reccount() pudiendo coincidir para dos o más instancias (estudios?) de lo que estés manejando.
Si eso lo tienes resuelto (o previsto), ya no te puedo ayudar (tengo que pensar 😁).. Una estructura con acceso directo solo funcionaría en Fox, no en otro SGBD.
Creo que tendrás que pensar en normalizar los datos, si no tendrás problema para cambiar o modificar estructuras.
Saludos: Miguel

--
Has recibido este mensaje porque estás suscrito al grupo "Visual Foxpro Latinoamérica" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a vfplatino+...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/vfplatino/a7b67016-98c0-45e4-ad82-bf3e320dafed%40googlegroups.com.

Mario Villoria

unread,
Jul 29, 2019, 10:34:56 AM7/29/19
to vfpl...@googlegroups.com
Buen dia Carlos, gracias por responder, pues sip, me resigne a trabajar solo con fox directo sin red ni nada por los momentos, tendré que revisar todo el código y cambiarlo si quiero tener un sistema general, en este caso es un proyecto personal sin fines de lucro y lo hago para obtener mas experiencia, tienes toda la razón, debo trabajar con los datos normalizados pero no conozco nada al respecto, solo me siento a programar según lo que pienso, jejeje.
Con respecto a la eliminación de registros no tengo problemas con esa tabla ya que lo hago con deleted-pack y enumero nuevamente los registros tanto del campo código como del campo orden.
He estado trabajando con Createcursor y guardando con insert into, de esa manera logre eliminar una tabla auxiliar que cree, tengo alguna idea para hacer lo que quiero pero aun no se como ejecutar esa idea..

Cesar Yamunaque

unread,
Jul 29, 2019, 4:05:10 PM7/29/19
to vfpl...@googlegroups.com
Si creas una clave única al momento de crear el registro digamos Codigodeusuario+SYS(3),
puedes accesar al registro sin importar el código de creación reccount()

Saludos

Mario Villoria

unread,
Jul 29, 2019, 4:50:47 PM7/29/19
to vfpl...@googlegroups.com
Buenas tardes Cesar, por mas que he intentado aun no consigo la solución (sigo trabajando en eso), lo que quiero es lo siguiente:
 Si voy a cargar resultados del examen numero 1, de la tabla tconfiguraciones tengo los siguientes registros
    Orden           Descripción                                  Resultado
        1        dato5 (puede ser Aspecto)                No característico
        2        nuevo (puede ser Color)                    Amarillo claro
        3        dato5 (puede ser PH)                               5,5
        4       datosg (puede ser Leucocitos)              Escasos
        5       pa proba (puede ser Densidad)                 7.0

Quiero guardar todo lo que esta en negritas en otra tabla,hasta ahí  todo bien, resulta que de la tabla tconfiguraciones yo puedo agregar, modificar, eliminar o cambiar de orden la descripción de cualquier examen, si por ejemplo agrego una descripción nueva en el orden numero 6 o cambio de orden la 2 con la 4, y necesite cargar los resultados de otro paciente me deberia salir la estructura de la tabla tconfiguraciones, por ejemplo, aplicando los cambios quedaría:
    Orden           Descripción                                                                 Resultado
        1        dato5 (puede ser Aspecto)                
        2        datosg (puede ser Leucocitos) Cambiado de orden        
        3        dato5 (puede ser PH)                               
        4       nuevo (puede ser Color)   Cambiado de orden                   
        5       pa proba (puede ser Densidad)                 
        6        descripcion nueva

Esta nueva estructura seria la que se me mostraría al cargar un nuevo resultado, y en el caso de buscar el registro cargado anteriormente seria:
    Orden           Descripción                                  Resultado
        1        dato5 (puede ser Aspecto)                No característico
        2        datosg (puede ser Leucocitos)              Escasos   Cambiado de orden conservando resultados
        3        dato5 (puede ser PH)                               5,5
        4       nuevo (puede ser Color)                    Amarillo claro Cambiado de orden conservando resultados
        5       pa proba (puede ser Densidad)                 7.0
        6        descripción nueva

En conclusión quiero como formato para cargar los resultados la tabla tconfiguracion respetando el orden como aparece, y siagregoo o elimino o cambio de orden se refleje en las nuevas cargas yen los registros ya cargados.

Espero haberme explicado bien y que lo que quiero hacer tenga fácil solución



--
Has recibido este mensaje porque estás suscrito al grupo "Visual Foxpro Latinoamérica" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a vfplatino+...@googlegroups.com.

Carlos Miguel FARIAS

unread,
Jul 30, 2019, 10:49:06 AM7/30/19
to vfpl...@googlegroups.com
Con referencia a normalización de bases de datos yo pase un trabajo que hice en la facultad hace unos cuantos años, que permite normalizar por reglas prácticas, sin necesidad de conceptos sofisticados. De hecho es algo que uso, pero como lo tengo internalizado es prácticamente mental.
En cuanto a lo que quieres hacer, podrías usar un diseño EAV (Entidad Atributo Valor) que maneja cualquier cosa con unas 5/6 tablas.
(Entidades, Tipos_Entidades, Atributos, Atributos_Entidad, Tipos_Atributos y Valores), las tablas tipos se pueden unificar.
Entidades = {id_entidad, nombre_entidad, clave_especificatipo_entidad, <otros_datos_de_uso_repetido>}
Tipos_Entidades = {tipo_entidad, nombre_tipo, reglas_validación, etc.}
Tipos_Atributos = {tipo_atributonombre_tipo, reglas_validación_general, etc.}  
Atributos = {id_atributonombre_atributotipo_atributo, <otros_datos_de_uso_repetido>}  
Atributos_Entidad = {id_entidad,   id_atributo, reglas_validación_entidad, valor_omision}
Valores = {id_entidad,   id_atributo, registrado, valor}

donde clave_primara, clave_única, clave_foránea
Las posibles tablas (lo que sea), se registran como una entidad, que será de algún tipo. Los datos de uso repetido son datos comunes a todas las entidades, por ejemplo, clave_específica es una clave externa (en un modelo relacional, sería la clave natural).
En atributos, son todas las posibles columnas que pueden existir en el modelo, si más de una tabla tiene un atributo, solo se carga una vez aquí, es como un diccionario de posibles datos.
Todos los atributos son de algún tipo (p.e. entero, string de 40, etc)
Atributos_Entidad relaciona cada Entidad con todos sus posibles atributos (cuando una tabla necesita un nuevo atributo, solo agregas una entrada aquí, esto puede hacer al vuelo, sin necesidad de bloqueo de tablas.
Valores tiene el valor que corresponde a una entidad para un atributo (columna determinado). No hace falta almacenar valores nulos o valores por omisión) ya que esos los toma de tabla anterior. Esta tabla, permite mantener los valores históricos de una columna, que se diferencia por registrado (un datetime). Valor es un campo memo, para poder almacenar cualquier cosa.
Para mejor desempeño, puedes tener una tabla por cada tipo de dato, para no tener que hacer un cast desde texto.

Este modelo no tendría buen desempeño para sistemas transaccionales que registren p.e. 10000 facturas diarias.
Pasar de este modelo a uno relacional es muy simple.
Saludos: Miguel


Mario Villoria

unread,
Jul 30, 2019, 10:26:40 PM7/30/19
to vfpl...@googlegroups.com
Gracias por responder Carlos, leí todo tu comentario y lamentablemente no lo entendí muy bien 😞, después de tanto pensar creo que se como solucionar, tiene algo que ver con lo que me comentaste, tener una tabla de ordenes con un campo para los números de orden, tener otra tabla con un campo de numero de orden y un campo código de estudio (en esta tabla se tendrá el mismo numero de orden como números de estudios existan) por ejemplo:
num_orden  num_estudio
         1                 2 (orina)
         1                 4 (hematologia)
         1                 6 (hematocritos)

de la misma manera tener otra tabla con un campo de numero de estudio y un campo con numero de "atributos" (en esta tabla se tendrá el mismo numero de estudio como números de atributos existan) por ejemplo:
num_orden        num_estudio            num_atributo
         1                      2                           1 (Aspecto)
         1                      2                           2 (color)
         1                      4                           1 (densidad)..........
Claro esta que esta tabla tendrá por cada numero de orden, todos los atributos de cada estudio, tomando en cuenta de que el mismo estudio puede realizarse a varios pacientes . De esta manera cuando realice algún cambio en la descripción de un atributo en la tabla matriz (tconfiguracion), busco por un indice compuesto por el num_estudio + num_atributo, esto filtrara ese atributo para todas las ordenes registradas y de esa manera modifico las ordenes cargadas.
Todo esta en teoría aun, me falta llevarlo a la practica, creo que me tocara cambiar algunas estructuras de las tablas y modificar un poco el codigo, pero todo sea por tener lo que se quiere...

Libre de virus. www.avast.com


Libre de virus. www.avast.com

Carlos Miguel FARIAS

unread,
Jul 31, 2019, 7:04:17 AM7/31/19
to vfpl...@googlegroups.com
Más o menos, pero no deberías repetir códigos (en tu ejemplo 1 está asignado a (aspecto y densidad)
Si no entendiste el modelo que te pasé, sugiero hagas un buen relevamiento de datos y normalices los datos.
El modelo que te propuse no necesita modificarse en el tiempo, toda entidad, atributo y sus respectivos tipos se agregan o se quitan como simple filas de una tabla, los valores posibles simplemente relacionan entidades y atributos.
Pero me da la sensación de que no tienes analizado el espectro completo de datos requeridos.
Saludos: Miguel

Mario Villoria

unread,
Jul 31, 2019, 9:43:42 AM7/31/19
to vfpl...@googlegroups.com
El 1 de aspecto esta referido al estudio 2 y el 1 de densidad al estudio 4, ambos de la orden 1, pudiéndose repetir de igual forma pero para otra orden u otras ordenes. Y es cierto, no tengo analizado como debe ser mi base de datos, es mi primer problema....

Carlos Miguel FARIAS

unread,
Aug 1, 2019, 6:41:58 AM8/1/19
to vfpl...@googlegroups.com
Si no tienes analizado en al menos un 90% los datos que vas a manejar, y no normalizas, puedes hacer cualquier cosa, que seguro no funcionará apropiadamente. Me he encontrado en sistemas hechos por terceros que tuve que sacar información, porque el programador original no sabía como.
Si no normalizas, sos candidato a no lograr un sistema que funcione sin permanentes dolores de cabeza (para ti, si es que conservas el trabajo)
Saludos: Miguel

Mario Villoria

unread,
Aug 1, 2019, 9:05:06 AM8/1/19
to vfpl...@googlegroups.com
buen dias carlos, yo no trabajo programando, solo lo hago por hobbie, pero si me gustatia hacerlo bien, los programas que he hecho han sido muy sencillos y pues no había tenido la necesidad de resolver un problema de fondo tan grande como el que tengo en este momento. Puedo decir que ya encontré la solucion pero me doy cuenta que requiero mucho código y en muchas ocasiones redundar en la búsqueda de registro. Me gustaría cambiar mi manera de programar para de esa manera hacer proyectos más complicados, como lo comenté anteriormente todo lo que he hecho ha sido solo y viendo tutoriales por internet, tengo lógica de programación pero no experiencia. Podrías decirme como es eso de normalizar o sugerirme alguna página.. Gracias de antemano


Jorge Murguia

unread,
Aug 1, 2019, 9:14:21 AM8/1/19
to vfpl...@googlegroups.com
Me llamo la atención tu comentario, así empecé yo, sin embargo sí viví 30 años aproximadamente desarrollando sistemas y fue muy satisfactorio. En mi opinión el éxito de un sistema depende de la estructura de tu base de datos y como catalogues tus tablas. 

Mario Villoria

unread,
Aug 1, 2019, 9:27:31 AM8/1/19
to vfpl...@googlegroups.com
asi es Carlos, gracias por el comentario, dejaré de ser "salvaje", saldré del monte y me mudare a la "ciudad" para programar como es debido, e visto muchas conversaciones en este grupo y cada vez que las leo siento que estoy en pañales y que no se nada (solo lo básico) y veo que ese "básico" ya es obsoleto, jejeje, lo que es peor, pero mas allá de desanimarme me motiva a querer hacerlo y que mas para comenzar que el proyecto del laboratorio en el que me embarqué, reordenar todo, simplificar código e ir mimpiando poco a poco todo lonque he hecho. Agradecería cualquier consejo

Carlos Miguel FARIAS

unread,
Aug 1, 2019, 9:55:56 AM8/1/19
to vfpl...@googlegroups.com
Hace más de 40 años que vengo programando, en 5000 años más termino de aprender todo 😀
Aca te paso un trabajo de investigación mio, del año 2003, en la primera parte, se explica normalización tradicional, en la segunda, desarrollo un conjunto de reglas prácticas para normalizar. (pag. 43).
Con estudiantes que trabajaron con ambas metodologías, me indicaron que lograban normalizar en menos de la mitad del tiempo.
Y en mesas de exámen, se dio un caso curioso, una estudiante, resolvió el ejercicio 100% correcto, pero, no supo contestar que era una clave primaria, foránea y otros conceptos básicos de tablas.
O sea que las reglas, si logras una buena descripción del problema, normalizas (al menos hasta 3FN) sin tener realmente idea de que estás haciendo. 😱.
Saludos: Miguel

Reglas Practicas Diseño Base Datos 2003.pdf
Reply all
Reply to author
Forward
0 new messages