Modify
Creo que estoy cayendo con lo que me escribiste. Hice todo dentro de un solo DW. Estuve probando, me salen todavía algunos errores, pero me distraje con otra parte del programa. Como ya conoces más o menos del tema(ojala te acuerdes el tema de campos, parcelas y árboles), te sigo contando. Tengo dos tablas muy importantes: Árbol y
Mediciones.
La tabla árbol :Id_campo, Parcela, Id_arbol, distanciamiento, especie etc .
Donde: Id_campo+ Parcela+ Id_arbol forman una clave compuesta que me va a identificar unívocamente a cada arbol. Debe ser compuesta pues los nombres de parcelas pueden repetirse en cada campo, y los arboles van de 1 a 25 en cada parcela.
La tabla Mediciones: Id_campo, Parcela, Id_arbol, Anio_medicion, diámetro, alt_fuste etc.
Donde: : Id_campo+ Parcela+ Id_arbol+Anio_medicion forman clave compuesta. Así las identifico pues cada año se toman mediciones de lo árboles muestreados.
Ahora bien: Cuando se miden arboles por primera vez, en ese momento se incorporan nuevos árboles a la base de datos. Esto quiere decir que debo hacer la actualización de dos tablas a la vez, o sea de la tabla Árbol y de la tabla Mediciones. Me encuentro entonces con el problema de actualizar dos tablas en un DW. Así que he buscado en la ayuda la sintaxis de Modify, siguiendo un ejemplo que esta allí.
Al crear el DW puse a árbol como updatable. Escribí el código que creo correspondiente, hice unas pruebas y me salio este error:
SQLSTATE = S0022
[Microsoft][Controlador ODBC Microsoft Access] La instrucción INSERT INTO contiene el siguiente nombre de campo desconocido: 'distanciamiento'. Asegúrese de que ha escrito correctamente el nombre y vuelva a intentar la operación.
Distanciameiento es de la tabla Árbol! ¿Qué paso? Te resumo un poco el código, solo quito algunos campos para que no sea tan extenso:
integer rc
string err
//actualiza arbol
rc=dw_1.update(true, false)
If rc= 1 then
//deshabilita actualizacion de las columnas de arbol
dw_1.Modify("arbol_id_campo.update =no")
dw_1.Modify("arbol_parcela.update=no")
dw_1.Modify("arbol_id_arbol.update=no")
dw_1.Modify("arbol_id_campo.key =no")
dw_1.Modify("arbol_parcela.key=no")
dw_1.Modify("arbol_id_arbol.key=no")
dw_1.Modify("arbol_distanciamiento=no") // y asi con mas campos de arbol
//Hace updatable mediciones
dw_1.Modify("Datawindow.Table.UpdateTable=~"mediciones~"")
//Habilita la actualizacon de las columnas deseadas de mediciones
dw_1.Modify("mediciones_id_campo.UPDATE=yes")
dw_1.Modify("mediciones_parcela.UPDATE=yes")
dw_1.Modify("mediciones_id_arbol.UPDATE=yes")
dw_1.Modify("mediciones_anio.UPDATE=yes")
dw_1.Modify("mediciones_id_campo.key=yes")
dw_1.Modify("mediciones_parcela.key=yes")
dw_1.Modify("mediciones_id_arbol.key=yes")
dw_1.Modify("mediciones_anio.key=yes")
dw_1.Modify("mediciones_id_empleado.update=yes")// y asi con mas campos de mediciones
//Actualiza la tabla mediciones
rc=dw_1.update()
If rc=1 then
commit using sqlca;
Messagebox("Estado", +"Grabación correcta")
else
rollback using sqlca;
Messagebox("Estado", +"Falla en la actualización de la tala mediciones.")
end if
else
rollback using sqlca;
Messagebox("Estado", +"Falla en actualización de la tabla arbol.")
end if
¿Qué te parece?. ¿Podes ver el error?
De nuevo gracias por la paciencia. Mis consultas son interminables!
Marcela
Mediciones.
La tabla árbol :Id_campo, Parcela, Id_arbol, distanciamiento, especie etc .
Donde: Id_campo+ Parcela+ Id_arbol forman una clave compuesta que me va a identificar unívocamente a cada arbol. Debe ser compuesta pues los nombres de parcelas pueden repetirse en cada campo, y los arboles van de 1 a 25 en cada parcela.
La tabla Mediciones: Id_campo, Parcela, Id_arbol, Anio_medicion, diámetro, alt_fuste etc.
Donde: : Id_campo+ Parcela+ Id_arbol+Anio_medicion forman clave compuesta. Así las identifico pues cada año se toman mediciones de lo árboles muestreados.
Ahora bien: Cuando se miden arboles por primera vez, en ese momento se incorporan nuevos árboles a la base de datos. Esto quiere decir que debo hacer la actualización de dos tablas a la vez, o sea de la tabla Árbol y de la tabla Mediciones. Me encuentro entonces con el problema de actualizar dos tablas en un DW. Así que he buscado en la ayuda la sintaxis de Modify, siguiendo un ejemplo que esta allí.
Al crear el DW puse a árbol como updatable. Escribí el código que creo correspondiente, hice unas pruebas y me salio este error:
SQLSTATE = S0022
[Microsoft][Controlador ODBC Microsoft Access] La instrucción INSERT INTO contiene el siguiente nombre de campo desconocido: 'distanciamiento'. Asegúrese de que ha escrito correctamente el nombre y vuelva a intentar la operación.
Distanciameiento es de la tabla Árbol! ¿Qué paso? Te resumo un poco el código, solo quito algunos campos para que no sea tan extenso:
integer rc
string err
//actualiza arbol
rc=dw_1.update(true, false)
If rc= 1 then
//deshabilita actualizacion de las columnas de arbol
dw_1.Modify("arbol_id_campo.update =no")
dw_1.Modify("arbol_parcela.update=no")
dw_1.Modify("arbol_id_arbol.update=no")
dw_1.Modify("arbol_id_campo.key =no")
dw_1.Modify("arbol_parcela.key=no")
dw_1.Modify("arbol_id_arbol.key=no")
dw_1.Modify("arbol_distanciamiento=no") // y asi con mas campos de arbol
//Hace updatable mediciones
dw_1.Modify("Datawindow.Table.UpdateTable=~"mediciones~"")
//Habilita la actualizacon de las columnas deseadas de mediciones
dw_1.Modify("mediciones_id_campo.UPDATE=yes")
dw_1.Modify("mediciones_parcela.UPDATE=yes")
dw_1.Modify("mediciones_id_arbol.UPDATE=yes")
dw_1.Modify("mediciones_anio.UPDATE=yes")
dw_1.Modify("mediciones_id_campo.key=yes")
dw_1.Modify("mediciones_parcela.key=yes")
dw_1.Modify("mediciones_id_arbol.key=yes")
dw_1.Modify("mediciones_anio.key=yes")
dw_1.Modify("mediciones_id_empleado.update=yes")// y asi con mas campos de mediciones
//Actualiza la tabla mediciones
rc=dw_1.update()
If rc=1 then
commit using sqlca;
Messagebox("Estado", +"Grabación correcta")
else
rollback using sqlca;
Messagebox("Estado", +"Falla en la actualización de la tala mediciones.")
end if
else
rollback using sqlca;
Messagebox("Estado", +"Falla en actualización de la tabla arbol.")
end if
¿Qué te parece?. ¿Podes ver el error?
De nuevo gracias por la paciencia. Mis consultas son interminables!
Marcela
1 Respuesta
Respuesta de Antonio Garcia
1