Actualizar más de una tabla

Leí una respuesta tuya a un problema parecido al mio.
Me encuentro con el problema de que tengo que actualizar dos tablas
en un DW, y bueno, es imposible. Me indicaron que use modify para
modificar la propiedad update de una tabla, pero no resultó.
La clave de la primera tabla(árbol) es:
id_campo+parcela+id_arbol
La clave de la segunda (mediciones)es:
id_campo+parcela+id_arbol+anio_medicion
No se si el hecho de que sean claves compuestas y casi iguales influyo
pero me daba un error rarísimo, como si quisiese grabar el campo de una
tabla en la otra por lo tanto lo tenia como desconocido.
Vencida por el modify, intento ahora actualizar la segunda tabla con
SQL, pero como esto tampoco lo tengo perfectamente claro, no lo conseguí.
No se cual es el problema pero el error es algo así:
Database C0038:SQLSTATE =37000 [Microsoft][Controlador ODBC Microsoft Access]
Error de sintaxis(falta operador)en la expresión de consulta '0 alt_tot=0'...
Quisiera aprender a hacerlo con SQL.
Aunque leí en una respuesta que se pueden enviar los campos a otro Dw y actualizarlos así.
¿Así qué ahora me gustaría saber como se hace esto? (O sea enviarlos a otro DW),
y en el caso de que sepas a que se puede deber el error que me sale con SQL,
¿Me podrías dar tu opinión acerca de que esta pasando?
Por si hace falta aclarar este es código(esta en un botón Aceptar):
boolean lb_commit
string ls_error
integer rc
string err
//actualiza arbol
rc = dw_1.update()
If (rc = 1) then
// actualiza mediciones
update mediciones
set id_campo = :id_campo,
parcela=:parcela,
id_arbol =:id_arbol,
anio=:anio,
id_empleado=:id_empleado,
dap=:dap,
alt_fuste=:alt_fuste
alt_tot=:alt_tot,
id_rectitud=:id_rectitud,
id_ramificacion=:id_ramificacion,
id_calidad=:id_calidad,
id_sanidad=:id_sanidad,
observaciones=:observaciones
where (id_campo=:id_campo)
and (parcela =:parcela)
and (id_arbol= :id_arbol )
using sqlca; ///en esta linea da el error
lb_commit = ((sqlca.sqlcode = 0) and (sqlca.sqlcode=0))
If lb_commit then
commit using sqlca;
else
ls_error=sqlca.sqlerrtext
rollback using sqlca;
messagebox("error", "ls_error")
end if
end if

1 respuesta

Respuesta
1
Haber si estoy en lo correcto
En el dw_1. Tienes las dos tablas incluidas, pero estas actualizando solo la tabla árbol, y la otra tabla lo quieres actualizar por código SQL, si es así entonces lo que debes hacer es lo siguiente:
//actualizando arbol
dw_1.Update()
commit;
//actualiza mediciones
Primero debes recuperar en variables los datos a actualizar. Por Ejm:
ls_idempleado = dw_1.Object.idEmpleado[dw_1.GetRow()]
Después de haber recuperado todas los datos.
Pasamos a actualizar la tabla
UPDATE mediciONES set id_empleado = :ls_idempleado,...
WHERE ....
USING SQLCA;
commit;
Te recomiendo que las variables que uses no sean igual al de la tabla a actualizar.
Con eso se solucionará tu problema, cualquier otra duda solo pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas