Como hago para actualizar una base de datos por medio de vistas utilizando datawindows. La base de datos esta en sql server 2000 y la version de powerbuilder es la 9.
2 respuestas
Respuesta de Antonio Garcia
1
1
Antonio Garcia, clipper todas sus versiones (manejo total) power builder todas...
Interesante planteamiento mi estimado colega. Con respecto a tu pregunta numero 1, tu problema se soluciona utilizando la función update(), que posee el datawindow, esta función devuelve un valor numérico, 1 si todo va bien, y -1 si hay un error, ademas el update puede esta supeditado a el objeto de transacción que esta ligado al datawindow por ejemplo el SQLCA, que es el que utiliza por omisión. Un ejemplo. Digamos que el datawindow ya recibió los cambios o elimino, o incluso añadió nuevos registros. Para acentar los cambios y demás movimientos en la información utilizaremos la función update() de la siguiente manera: BOOLEAN lb_commit lb_commit = (dw_1.update() = 1) IF lb_commit THEN COMMIT USING SQLCA; ELSE ROLLBACK USING SQLCA; END IF Lo que en el script anterior podemos observar, es simplemente una condición proveniente del update(), el cual define el acentar o no la actualización de la tabla que corresponde, commit para acentar y rollback para rechazarlo. Con respecto a tu segunda inquietud, primero dejame decirte que power builder es un lenguaje que se compone de 2 partes, la primera y la más simple es la utilización normal y genérica que tienen los demás lenguajes que son similares a pb. O sea eliges un objeto, y lo pegas en un contenedor de objetos, llamado forma o ventana, y así vas conformando tu pantalla, cada uno de estos objetos poseen propiedades y eventos, los cuales son utilizados para efectuar las acciones correspondientes a cada objeto. Esta es la parte más simple y si me permites casi podría decir que es la parte donde puedes utilizar tu sentido común o simplemente tu intuición de como funciona. Sin embargo power builder posee una segunda cara, la cual llama datawindow, el datawindow realmente esta compuesto de 2 partes, uno el datawindow control y el otro el datawindow object. Uno es un contenedor al igual que la forma, y contiene los mismos objetos que contendría una forma, con la ventaja de que en este caso windows solo ve un único objeto llamado datawindow y no un sin numero de ellos esparcidos en una forma. Por consiguiente, todo lo que se te ocurre que puedes hacer utilizando objetos individuales lo puedes hacer unicamente utilizando datawindows. El pensamiento inmediato será, "BUENO Y SI TODO LO PUEDO HACER CON UN DATAWINDOW ENTONCES PORQUE EXISTEN LOS OTROS OBJETOS.", mi respuesta personal, es "NI IDEA", realmente considero que el datawindow es muy completo y que realmente power soft, debió poner más atención a este objeto y fortalecerlo y eficientarlo aun más de lo que hoy es, el problema es que para poder manejar en un porcentaje adecuado dicho datawindow, necesitas de un curso especial, puesto que es como programar con un pseudo-lenguaje., personalmente yo no conocí el datawindow a fondo, hasta que tome un curso llamado MASTER IN DATAWINDOW, que proporciona el representante de power soft en mi país. Créeme que cuando logras controlar el datawindow, o más bien dicho, cuando llegas a entender cual es la esencia de este objeto, las cosas cambian totalmente de panorama. Y encuentras realmente la ventaja de utilizar power builder, insisto, sino fuera por este objeto power builder no valdría nada. Por ultimo, recomendarte un lugar especifico en la red, que te de nociones de datawindow, seria mentirte, si trabajas para una empresa en especial, podrías plantearles el hecho que te proporcionen la oportunidad de que por medio de ellos, te envíen a un curso de capacitación, relacionado con datawindow, por ejemplo el que tome yo, así no solo seras más eficiente, sino que acortaras tu tiempo de programación, y aumentaras la eficiencia de tus programas, realmente aprender a manejar el datawindow por medio de un manual, es como tratar de aprender a busear, sin tanque de oxigeno, y saliendo de un submarino, que se encuentra en el fondo del mar. seguramente terminaras por darte por vencido. Espero esto pueda ser de utilidad para resolver tus problemas
Muchas Gracias Por Tu Tiempo. En realidad el problema es que medianamente se manejar los datawindows y puedo actualizar datos a través de ellos, pero únicamente si son basados en tablas. Al crear un datawindow con vistas, los datos se muestran pero no se pueden actualizar. Si por ejemplo uno actualiza la vista mediante sentencias sql esta actualiza la tabla de la cual fue creada, claro esta si dicha vista contiene los campos necesarios. ¿Mi pregunta es como puede actualizar las vistas mediante datawindows? Gracias por la ayuda que me puedas brindar y quedare muy agradecido por tu valioso tiempo.
El problema esta más que claro, pues no puedes hacer una actualización de una tabla, utilizando una vista como base, sin embargo, puedes utilizar ventanas alternas sin necesidad de modificar directamente el datawindow. Por ejemplo En tu ventana podrías tener un botón, el cual sirva para actualizar, al presionarlo, deberá mostrar una ventana adicional, en la que solicite los datos que pueden ser modificados, esta ventana puede estar basada directamente en la tabla que utilizaras para la modificación. En la misma ventana incluye 2 botones, uno que ponga cancelar y otro actualizar, de esa manera podrás tener el control de la actividad que el usuario necesite hacer. Para actualizar el dato en la pantalla o ventana principal luego después de cerrar la ventana auxiliar, podrías utilizar la instrucción. RESELECT(<row>), esta función retrae los datos de la tabla pero unicamente la linea que indiques, por lo que no necesitars de retraer todo nuevamente. Toma en cuenta también la posibilidad de utilizar el evento DOUBLECLICK del datawindow, el cual igualmente dispara la ventana que antes te mencioné Para finalizar no te olvides de anular la posibilidad de modificación del datawindow maestro. Por ejemplo puede dejar el numero de tab oder en 0, para que los datos no puedan ser modificados. Y dependas así unicamente de la ventana o ventanas- Hay una única restricción. Y que para abrir una nueva ventana tendrás que hacerlo con el tipo RESPONSE, esto significa que hasta que cierres esa ventana la aplicación no hará nada más, y por el otro lado, power builder no maneja bien el tema de la concurrencia, por lo que luego de la 3era. Ventana tipo response abierta en escalada una detrás de otra el programa se cuelga. (Para que lo tomes en cuenta.) Espero esto pueda ser de utilidad para resolve tu problema
1 comentario
Hola Antonio, donde llevaste ese curso "MASTER IN DATAWINDOW", te agradecería me pases el dato. - Itsolutions MG EIRL
- Anónimoahora mismo
Respuesta de menfqui
1
1
menfqui, Cuento con experiencia en desarrollo de aplicaciones, tanto...
Lo que intentas hacer no es posible, las vistas son simplemente eso "Vistas", te sirven para hacer una consulta complicada o mostrar un reporte complicado, te simplifican la sentencias SQL cuando deseas realizar consultas complicadas al servidor. Por medio de los datawindows solo puedes mostrar lo que tiene tu vista más no poder actualizarlas, es decir las vistas solo te sirven como fuente de datos para mostrar algo. Web sites: http://www.dw-extreme.com http://www.rgagnon.com
Bueno como dices, se puede actualizar si es que contienen los campos necesarios, bueno de esa manera no lo he probado, pero ya lo probare gracias por tu contribución, Pero para actualizar la base de datos seria mejor que utilices procedimientos almacenados.
Hola Antonio, donde llevaste ese curso "MASTER IN DATAWINDOW", te agradecería me pases el dato. - Itsolutions MG EIRL