Anexar datos de un a tabla a otra accces

Buen día
Me podrías colaborar
Es lo siguiente tengo una tabla1 campos
num valor
25
30
40
50
60
Tabla2 con los mismos campos pero sin valores
NUM VALOR ( Esta es una tabla temporal para cargar el campo VALOR de la tabla1)
EJEMPLO Tabla2
num valor
25 3.000
30 4.000
Lo busco es que los valores de la tabla2 se carguen a VALOR de la tabla1 donde sean iguales a NUM
Luego se limpie la tabla 2 y quede sin valores y quedaría de la siguiente manera
Tabla1
num valor
25 3.000
30 4.000
40
50
60
Y se pueda ejecuar las veces qsea necesario
Espero ser claro y me puedas ayudar

1 Respuesta

Respuesta
1
Para hacer lo que pides debes hacer lo siguiente:
1.- En el formulario que quieras (y si no creas uno en blanco) añades un botón de comando. Sacas sus propiedades y te vas a la pestaña Eventos->Al hacer click. Verás que ahí hay un pequeño botón de puntos suspensivos. Si haces click sobre él te aparecerá una ventana. Le dices que quieres generar código.
2.- Se te abrirá el editor de VB con dos líneas por defecto (Private Sub... y End Sub). No debes tocar esas líneas. En medio de ellas escribes el siguiente código:
...
Private Sub...
'Creamos las variables y los recordset que necesitaremos
Dim rst1 as Recordset, rst2 as Recordset
Dim vNum as Integer, vValor as Integer
Dim miSql as string
Set rst2 = currentdb.openrecordset("Tabla2")
'Si la tabla2 no tuviera registros sale del proceso
If rst2.recordcount=0 then goto Salida
'Nos movemos al primer registro
rst2.Movefirst
'Comenzamos el proceso de recorrido de registros
Do until rst2.EOF
vNum = rst2.Fields("NUM").value
vValor = rst2.Fields("VALOR").value
'Creamos una sql sobre la tabla 1 que nos filtre por NUM
miSql="SELECT * FROM Tabla1 WHERE [NUM]=" & vNum
'Creamos el recordset sobre la consulta
Set rst1 = currentdb.openrecordset(miSql)
'Si no hay coincidencias analizamos el siguiente registro
If rst1.Recordcount=0 then goto Siguiente
'Si hay coincidencia actualizamos el VALOR
With rst1
.Edit
.Fields("VALOR").value = vValor
.Update
End with
'Creamos la etiqueta Siguiente
Siguiente:
rst1.Close
Set rst1 = nothing
rst2.movenext
Loop
'Eliminamos los registros de la Tabla2
rst2.movefirst
Do until rst2.EOF
rst.Delete
rst.movenext
Loop
'Lanzamos un mensaje de que todo ha ido bien
msgbox "Proceso finalizado correctamente",vbInformation, "OK"
Salida:
rst2.Close
Set rst2 = nothing
End Sub
...
Tienes el código comentado, para que sepas lo que hace. He utilizado los mismos nombres de tablas y campos que me exponías en la consulta. Si fueran diferentes deberías cambiarlos en el código.
Te lo he escrito de cabeza. Si te sale algún problema me lo comentas y lo arreglamos.
Se quedo en
'Creamos el recordset sobre la consulta
Set rst1 = CurrentDb.OpenRecordset(miSql)
Presenta el siguiente error
No coinciden los tipos de datos en la expresión de criterios. (Error 3464)
El campo [NUM] de tu tabla, ¿es de tipo numérico?
Please, chequéalo y me dices cosas.
Como lo podría hacer si los campos no son numéricos EJ Texto o fecha
Me puedes ayudar como seria en los dos casos
Si son números las igualdades van "a pelo". Por ejemplo:
miSql="SELECT * FROM Tabla1 WHERE [NUM]=" & vNum
Si son texto el valor que compara debe ir entre comillas simples. Eso se escribiría, por ejemplo, así:
miSql="SELECT * FROM Tabla1 WHERE [TEXTO]='" & vTexto & "'"
Si son fechas, el valor que compara debe ir entre almohadillas. Por ejemplo, así:
miSql="SELECT * FROM Tabla1 WHERE [FECHA]=#" & vFecha & "#"
Hay que ir con cuidado con las fechas, porque depende de qué circunstancias Access coge el sistema de fechas inglés. Para cambiar nuestra fecha "española" al inglés deberías hacer la conversión de la siguiente manera.
vFecha= "01/05/11" 'Esta sería la fecha española
VFecha=Format(vFecha,"mm/dd/yy") 'Ahora te cogería vFecha con formato de fecha inglesa.
En fin, que si no te funciona bien con la española hay que probar con la inglesa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas