** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Copiar registros de una tabla a otra
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoCopiar registros de una tabla a otra

 Responder Responder
Autor
Mensaje
Angelica Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 04/Julio/2016
Localización: México
Estado: Sin conexión
Puntos: 5
Enlace directo a este mensaje Tema: Copiar registros de una tabla a otra
    Enviado: 04/Julio/2016 a las 02:21
HOLA A TODOS... LES ESCRIBO PARA VER SI ME PUDIERAN HACER EL FAVOR DE AYUDARME.

Tengo una tabla que se llama OPERADORES que tiene los campos: NOMBRE, EDAD, LUGAR DE TRABAJO, SEXO, NIVELGLUCOSA, NIVELCOLESTEROL, NIVELTRIGLICERIDOS, etc. Esta tabla concentra todos los datos de las personas que se le realizan examenes medicos.

Otra tabla se llama HISTORIAL donde a partir del NOMBRE, con ayuda de un formulario, introduzco valores de los examenes de NIVELGLUCOSA, NIVELCOLESTEROL, NIVELTRIGLICERIDOS. etc. Esta tabla, como su nombre lo dice, almacena los datos de examenes que se le hace a determinada persona (pueden ser varios a la misma persona).

Mi duda es, como hacer que, cuando yo meto valores en mi formulario de HISTORIAL, por ejemplo NIVELGLUCOSA = 95, este mismo valor (95) también se copie a la tabla OPERADORES en el campo NIVELGLUCOSA, asociado con el nombre de la persona que le hice el examen medico en ese momento. Así cada que yo hago un examen de NIVELGLUCOSA a determinada persona, siempre la tabla OPERADORES muestre el valor mas reciente.

He estado viendo en tutoriales, y esto es lo mas que pude hacer en VBA:

Dim BBDD As Database
Dim HISTORIAL As RecordSet
Dim OPERADORES As RecordSet
Dim VId As Integer
VId=NOMBRE
Set BBDD=CurrentDb
Set HISTORIAL=BBDD.OpenRecordset (" SELECT * FROM HISTORIAL WHERE NOMBRE = " & VNOMBRE )
If Not HISTORIAL.EOF Then
Set OPERADORES=BBDD.OpenRecorset ("OPERADORES")
OPERADORES.AddNew
OPERADORES!NOMBRE=HISTORIAL!NOMBRE
HISTORIAL!NIVELGLUCOSA=HISTORIAL!campo1
OPERADORES.Update
OPERADORESClose
End If
HISTORIAL. Close
BBDD. Close


Mi base de datos ya está casi terminada, solo me falta ese gran detalle.
Les agardecería mucho su valiosa ayuda.
Angélica Miriam <3
Angy
Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 04/Julio/2016 a las 03:32
En una base de datos relacional, repetir campos no es la opcion correcta.

Si se genera un registro cada vez que se hace un muestreo ( y a ese registro se le puede relacionar con la tabla 'operadores'), el ultimo valor de cualquiera de las muestras de cualquiera de los operadores, se obtiene con la funcion DLookup (si es para un unico operador) o con una consulta si es para multiples operadores o diferentes tipos de examen.

Es la forma correcta de trabajar con los datos en una base de datos relacional.

Si de todas formas sigues en la procura de almacenar el ultimo dato en la tabla operadores, lo adecuado seria actualizar el valor, no duplicar un registro que 'deberia' ser unico.

El valor se puede actualizar con una consulta (de actualizacion), por lo que el metodo actual (que considero inadecuado por repetir registros) y que utiliza un recordset, puede evitarse.
Arriba
Angelica Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 04/Julio/2016
Localización: México
Estado: Sin conexión
Puntos: 5
Enlace directo a este mensaje Enviado: 04/Julio/2016 a las 04:16
Bueno, en la tabla OPERADORES no se se va a duplicar un registro. Si Juan Perez se le hicieron tres examenes de GLUCOSA en un año, mi tabla HISTORIAL colecciona esos tres examenes (no importando si duplica nombres, ya que ese es el objetivo), pero en la tabla OPERADORES, a Juan Perez solo le aparece el ultimo dato de GLUCOSA (el mas actual).

No se si me pude explicar con lo que estoy haciendo.

Podrias decirme como hacer esa consulta de actualización que mencionas? La verdad apenas me estoy adentrando en el mundo de Access :(
Angy
Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 04/Julio/2016 a las 04:48
Veras Angelica, tu has posteado esto (es solo una parte, las declaraciones  las omito):

OPERADORES.AddNew
OPERADORES!NOMBRE=HISTORIAL!NOMBRE
HISTORIAL!NIVELGLUCOSA=HISTORIAL!campo1
OPERADORES.Update
OPERADORES.Close

OPERADORES.AddNew ===> AddNew implica  la creación de un registro y en a tabla operadores (no en el histórico)

El resto asigna valores, con la línea UPDATE los asentamos e la tabla y después con el CLOSE se cierra.

Aceptaria que en lugar de 'ADDNEW' se utilizase EDIT, entonces si se modificarían los valores

Pero insisto que eso tiene algunos inconvenientes: mañana se necesita un nuevo tipo de análisis (los médicos cada día inventan mas métodos de control o de torturar a los pacientes) y como la añadirás ¿modificando la tabla? ....

Si en la tabla histórico se anota la fecha, el paciente, el tipo de control y el valor de la toma, conocer un valor concreto (el ultimo de un paciente y de un tipo de control) con un DLookup lo logras.

Que se desean todos los controles de un paciente (y el ultimo de cada tipo): una consulta de agrupación (se agruparía por paciente, se filtraria por e el paciente que quisiéramos, se agruparia por tipo de control y en el campo de fecha se seleccionaría la mas alta), devolvería los valores últimos de cada tipo de control de ese paciente.

Si se hace una consulta de selección, se filtra por paciente y se ordena por tipo de control y fecha .. tenemos el historico de toda 'la doliente vida del paciente'.

Y ello solo con la tabla 'Historico' que es la única que recibiría las anotaciones de los controles.



Arriba
Angelica Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 04/Julio/2016
Localización: México
Estado: Sin conexión
Puntos: 5
Enlace directo a este mensaje Enviado: 04/Julio/2016 a las 05:31
¿Cómo le haría con el "DLookup" que mencionas?, la verdad desconozco de programación. Disculpa si pregunto mucho, pero no se como hacer eso que mencionas.
Angy
Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 04/Julio/2016 a las 09:36
DLookup es una funcion de dominio que tiene como mison devolver el valor de un campo de un registro concreto de una tabla o consulta, es una 'version compacta' de: abrir un recordset, seleccionar un registro, de el un campo para y finalmente devolver el contenido.

Si aun estas en los 'primeros pasos', te facilitaria mucho la construccion de la sentencia el utilizar una consulta de seleccion (de las que se crean con el asistente de Access).

Este es el punto en que ya se deberia conocer 'lo basico' de esa funcion de dominio para entender como funciona y nos ayudaria a entender como obtener los datos necesarios, en la ayuda de Access esta todo sobre ella, leelo y comenta tus dudas para poder continuar.

Si se entiende la 'filosofia' que los diseñadores de Access utilizan, el aprendizaje de esa funcion sera valido para aplicarselo al resto de ellas (DMax, DMin, DLast .....) que comparten la sintaxis basica.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable