Actualizar con SQL

gaby
24 de Octubre del 2002
Estoy intentando actualizar una tabla con datos provenientes de otra que tiene la misma estructura, pero el número de campos de ambas tablas es bastante grande, por ello quiero actualizarlos todos a la vez, es decir, sin tener que poner Update Tabla1 Set campo1= Tabla2.campo1, campo2=Tabla2.campo2,....

¿Alguien me podría indicar la sintaxis correcta para realizar esta actualización?.

¡Muchas Gracias!

webJose
24 de Octubre del 2002
Imagino que por "campos" se refiere a filas, o registros.

Ahora bien Gaby, que es lo que quiere exactamente? Porque por el uso de Update que usted menciona, pareciera que tabla2 es una version actualizada de tabla1. Si esto es asi, entonces el SQL seria algo como:

Update Tabla1 Inner Join Tabla2 on Tabla1.<clave primaria>=Tabla2.<clave primaria> Set <nombre de campo1>=....

Ahora, si la aburre escribir el SQL a mano para correrlo en VB, pues eso es totalmente innecesario. Solamente construya el SQL en una variable String con la ayuda de un recordset:

dim strSQL as string
dim rs as recordset
dim lCont as long

strSQL="Update Tabla.... set "
'abrir tabla1 en rs aquí, luego:
for lCont=0 to rs.fields.count-1
strsql=strsql & " Tabla1." & rs.fields(lCont).name & "=Tabla2." & rs.fields(lCont).name
next lCont

Listo. Eso generara el SQL con todos los campos de la tabla.

CASO 2: Si tabla2 no es una version actualizada de tabla1, sino mas bien un reemplazo, entonces yo utilizaria una instruccion delete:

Delete * From Tabla1

Luego copiaria todos los registros de Tabla2 a tabla1 y listo. Como? No utilizo tanto SQL como para saber si hay forma de clonar los datos todos a la vez, asi que yo usaria un do while not(rs.eof) .... loop para volver a llenar tabla1.

esperanza
24 de Octubre del 2002
Hola, cuando yo quiero actualizar una tabla, lo primero que hago es cargar una temporal con los datos actualizados (en tu caso parece que la tienes), luego borro de la tabla el registro que quería actualizar y finalmente inserto el registro desde la temporal.

Ej:

base.Execute "DELETE * FROM [Tabla] WHERE campo1 = " & numero_buscar
base.Execute "INSERT INTO [Tabla] SELECT * FROM [Tabla temp] "