Actualizar múltiples tablas utilizando Datawindow
Necesito saber mediante un ejemplo o documentación como actualizar múltiples tablas de una base de datos utilizando un Datawindow. Si es posible tres tablas relacionadas.
Respuesta de achafio
1
1
achafio, Bachiller Ingenieria de Sistemas e Informatica Conocimientos en...
Los datawindows solo pueden actualizar 1 tabla a la vez. Por más que tengas varias tablas relacionadas solo podrás actualizar una de ellas.
Ahora para hacer lo que deseas tendras que recorrer tu dw y usar un insert o update si fuera el caso. o directamente un insert.
Ahora para hacer lo que deseas tendras que recorrer tu dw y usar un insert o update si fuera el caso. o directamente un insert.
Eso también pienso sobre los dw. Pero mi pregunta surge porque a partir de este ejemplo http://www.sybase.com/detail?id=42014 pude observar como es posible actualizar más de una tabla relacionada a un datawindow cambiando el comportamiento de la función Update() del dw.
Me podrían dar algunas recomendaciones (o ejemplo) de como se haría en PB10.5 Lo he intentado y noto que hay cambios por ejemplo en:
dw_1.dwModify("DataWindow.Table.UpdateTable='employee' ")
me funciona de la siguiente forma:
dw_1.Modify("DataWindow.Table.UpdateTable='employee' ")
Saludos y gracias por la atención prestada.
Me podrían dar algunas recomendaciones (o ejemplo) de como se haría en PB10.5 Lo he intentado y noto que hay cambios por ejemplo en:
dw_1.dwModify("DataWindow.Table.UpdateTable='employee' ")
me funciona de la siguiente forma:
dw_1.Modify("DataWindow.Table.UpdateTable='employee' ")
Saludos y gracias por la atención prestada.
También en mis pruebas sobre este tema de actualizar más de una tabla utilizando datawindow me han surgido los siguientes dudas y problemitas, por ejemplo:
Si tengo dos entidades con relaciones de uno a muchos, por ejemplo entre Departamento(id_departamento, nombre, ubicación) y Empleado(id_empleado, nombre, cargo, id_departamento) y establezco las propiedades del datawindow para mostrar los campos de las dos tablas como son: Empleado_Nombre, Empleado_Cargo, Departamento_Nombre. (La ubicación del departamento podría detallarla en otro momento)
Tenemos en cuenta también que en el getor de base de datos, yo establezco los campos identificadores de cada tabla (id_departamento, id_empleado) como autonuméricos (Identity)
Gestiono la información (insert, update) a partir de ese datawindow, cambiándole la característica de poder actualizar más de una tabla
Todoe ello lo realizaría basado en el ejemplo del enlace anterior, cambiando el comportamiento de la función Update(true, false) del datawindow, en dependencia de la primera actualización, cambiaría de tabla de actualización y envío los campos que faltaron por actualizar.
Pienso que el comportamiento seria:
Actualizo mi tabla Departamento con la información del nombre del departamento (la ubicación puede ser null) y se genera el id autoinclementable automáticamente. A la hora de cambiar de tabla de actualización, Empleado, actualizo todos la información referente a los datos del empleado, se genera su id autoincrementable, pero...
Pregunta1: ¿Qué sucede con la llave foránea id_departamento de la tabla Empleado?
En la tabla Empleado, id_departamento no seria autoinclementable por definición. Entonces no se llegaría a completar el Update en la base de datos pues id_departamento en Empleado. id_departamento no puede ser NULL
Pregunta2: ¿Cómo implementaría este ejemplo utilizando datawindow y aprovechando este el comportamiento de la función Update?
Una alternativa posible seria como se realizaría en cualquier otro ambiente, como bien me dices a través de INSERT y aprovechando para los id SELECT MAX("nombre_campo_id")
¿Pero la vida sera tan dura?. Me imagino que seria posible hacerlo más fácil en Power Builder 10.5, como bien he podido observar utilizando datawindow con una simple tabla.
Espero esta vez, haya sido más explicito para resolver este problema o dudas. Gracias por la actención prestada y Saludos
Si tengo dos entidades con relaciones de uno a muchos, por ejemplo entre Departamento(id_departamento, nombre, ubicación) y Empleado(id_empleado, nombre, cargo, id_departamento) y establezco las propiedades del datawindow para mostrar los campos de las dos tablas como son: Empleado_Nombre, Empleado_Cargo, Departamento_Nombre. (La ubicación del departamento podría detallarla en otro momento)
Tenemos en cuenta también que en el getor de base de datos, yo establezco los campos identificadores de cada tabla (id_departamento, id_empleado) como autonuméricos (Identity)
Gestiono la información (insert, update) a partir de ese datawindow, cambiándole la característica de poder actualizar más de una tabla
Todoe ello lo realizaría basado en el ejemplo del enlace anterior, cambiando el comportamiento de la función Update(true, false) del datawindow, en dependencia de la primera actualización, cambiaría de tabla de actualización y envío los campos que faltaron por actualizar.
Pienso que el comportamiento seria:
Actualizo mi tabla Departamento con la información del nombre del departamento (la ubicación puede ser null) y se genera el id autoinclementable automáticamente. A la hora de cambiar de tabla de actualización, Empleado, actualizo todos la información referente a los datos del empleado, se genera su id autoincrementable, pero...
Pregunta1: ¿Qué sucede con la llave foránea id_departamento de la tabla Empleado?
En la tabla Empleado, id_departamento no seria autoinclementable por definición. Entonces no se llegaría a completar el Update en la base de datos pues id_departamento en Empleado. id_departamento no puede ser NULL
Pregunta2: ¿Cómo implementaría este ejemplo utilizando datawindow y aprovechando este el comportamiento de la función Update?
Una alternativa posible seria como se realizaría en cualquier otro ambiente, como bien me dices a través de INSERT y aprovechando para los id SELECT MAX("nombre_campo_id")
¿Pero la vida sera tan dura?. Me imagino que seria posible hacerlo más fácil en Power Builder 10.5, como bien he podido observar utilizando datawindow con una simple tabla.
Espero esta vez, haya sido más explicito para resolver este problema o dudas. Gracias por la actención prestada y Saludos
Amigo power builder es una herramienta de programación más no es netamente un gestor de base de datos, por ello es que pb no ha basado su tiempo en ver estos tipos de transacciones toda vez que ya existen gestores de bd.
Ahora con respecto a tu pregunta. Estuve revisando la página que me indicaste y si cambias de tablas podrás hacer lo que deseas (aun no lo he probado) con respecto a tu pregunta, para que puedas hacer un insert o update en un tabla con clave foránea simplemente estos datos debe existir si o si en la tabla principal, para que se pueda reflejar en tu tabla de vinculo.
Si te das cuenta esto ya se está poniendo más complejo con power, pero si lo haces utilizando el mismo gestor de bd entonces no se tornaría tan tedioso, claro está que hay más pasos, pero al final estarás seguro de lo que estas colocando.
Ahora con respecto a tu pregunta. Estuve revisando la página que me indicaste y si cambias de tablas podrás hacer lo que deseas (aun no lo he probado) con respecto a tu pregunta, para que puedas hacer un insert o update en un tabla con clave foránea simplemente estos datos debe existir si o si en la tabla principal, para que se pueda reflejar en tu tabla de vinculo.
Si te das cuenta esto ya se está poniendo más complejo con power, pero si lo haces utilizando el mismo gestor de bd entonces no se tornaría tan tedioso, claro está que hay más pasos, pero al final estarás seguro de lo que estas colocando.
Amigo Experto, bastante me ha aclarado sus respuestas, pero si es posible me podría dar más detalles sobre este último aspecto de utilizar el gestor de bases de datos para resolver mi problema y estar seguro de los datos que introduzco a través del datawindow. Estoy utilizando SQLSERVER 2005 como fuente de datos. ¿Podría darme un ejemplo o información para resolver este problema? Gracias y saludos una vez más.
En internet podrás encontrar mucha información con respecto a las sentencias insert, update del sql, lo que te recomiendo que primero recuperes en tu dw toda la lista que vas a insertar, luego realizas con un for (recorriendo tu dw) y vas capturando linea por linea, conforme vas capturando la primera linea vas realizando tu insert en tu tabla, ejm:
for k =1 to dw_1.rowcount()
ls_dato1 = dw_1.getitemstring(k,'campo1')
ls_dato2 = dw_1.getitemstring(k,'campo2')
ls_dato3 = dw_1.getitemstring(k,'campo3')
//insertando en la 1º tabla
insert into tabla1(campo1,campo2) values(:ls_dato1,:ls_dato2);
//insertando en la 2º tabla
insert into tabla2(campo1,campo2) values(:ls_dato2,:ls_dato3);
next
for k =1 to dw_1.rowcount()
ls_dato1 = dw_1.getitemstring(k,'campo1')
ls_dato2 = dw_1.getitemstring(k,'campo2')
ls_dato3 = dw_1.getitemstring(k,'campo3')
//insertando en la 1º tabla
insert into tabla1(campo1,campo2) values(:ls_dato1,:ls_dato2);
//insertando en la 2º tabla
insert into tabla2(campo1,campo2) values(:ls_dato2,:ls_dato3);
next
Bueno amigo, estoy conforme con las respuestas que me has brindado. Si he buscado y he utilizado esa segunda variante para actualizar más de una tabla utilizando datawindow, teniendo cuidado los datos que quiero insertar (principalmente con los id en cada tabla).
Saludos y seguiremos en contacto. Muchas gracias
Saludos y seguiremos en contacto. Muchas gracias
- Compartir respuesta
- Anónimo
ahora mismo