Power Builder - Actualizacion de solo una fila de un dw

 
Vista:

Actualizacion de solo una fila de un dw

Publicado por Alex (23 intervenciones) el 10/05/2003 05:32:29
Hola, tengo un dw con 500 registros, el cual cuando le agrego otro registro y le hago dw_1.update, me hace update de todo el dw con la consiguiente demora, hay alguna forma de que se de cuenta de que solo me haga update del registro que ingrese?, lo mismo si quiero actualizar los datos de un registro existente, que solo me haga el update de ese registro.

Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Actualizacion de solo una fila de un dw

Publicado por Ricardo (1957 intervenciones) el 10/05/2003 15:27:23
Hola que tal:

La demora la realiza porque siempre verifica el estado de los registros, si fueron modificados, borrados o nuevos, es por ello que realiza un barrido del DW. Pero esta demora es de milisegundos, es decir, ni siquiera se nota. Talvez estas utilizando algun otro evento al momento de actualizar.

Otra cosa que puedes hacer es utilizar el evento modified para ir actualizando conforme se modifica el registro, asi lo haces de forma manual y solo actualizas un registro a la vez.

Bueno espero te sirva, a ver que otra sugerencia te dan.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Actualizacion de solo una fila de un dw

Publicado por eduardo.v (208 intervenciones) el 10/05/2003 20:23:18
Ricardo tiene razon. la actualizacion de los registros es rapida y en tu caso con solo 500 registros debe ser imperceptible. Habria que ver que tan lenta es esa actualizacion porque podria ser que tus conecciones de red sean deficientes,tu PC cliente tenga poca memoria, tu PC servidor sea poco potente o quiza este tenga algun bicho o poco espacio en el disco duro. Si tu base de datos utiliza archivos log quiza estos ya sean demasiado grandes. Revisa eso.
Pero si quieres actualizar registro por registro puedes hacerlo con una instruccion Update en un SQL incrustado. creas una funcion, boton, o evento y actualizas un registro o grupo de registros en especial. ejemplo:

//ls_codigo es la condicion del registro
ls_codigo=dw_1.getitemstring(dw_1.getrow(),"siv_codigo")
//ls_nuevadescrip es el dato a actualizar
ls_nuevadescrip=dw_1.getitemstring(dw_1.getrow(),"siv_descrip")

UPDATE siv_estado
SET est_descrip = :ls_nuevadescrip
WHERE siv_estado.est_codigo = :ls_codigo ;
COMMIT;

Espero que te sirva
Saludos desde Peru

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Actualizacion de solo una fila de un dw

Publicado por Milson Cardona (613 intervenciones) el 10/05/2003 20:54:11
Un saludo especial desde COLOMBIA

sin ánimo de polemizar lo que Ricardo y Eduardo dicen es para analizarlo.... porque eso de "con solo 500 registros debe ser imperceptible" es muy relativo, todo depende del número de tablas que se estan actualizando al tiempo, también el número de registros de dichas tablas, el número y tipo de campos involucrados entre otros factores..... y claro no desconozco que es importantisimo la velocidad de la red y la robustes de los equipos, pero no es ló único que influye...... CLARO a menos que se este pensando en actualizar una tabla maestro.......

pero en el caso (como es el mió y no existen problemas de red y equipos) de que tenga que actualizar 700 registros involucrando 2 tablas de 2 y 4 millones de registros respectivamente, no solo hay que hablar de RED y de EQUIPOS, porque al motor de DB también se debe consumir su tiempo para este trabajo tan pesado ..... no son 5 ni 10 minutos pero unos 20 a 30 seg si se gasta y eso es tiempo considerable hablando de sistemas de información.

como dije, este comentario es sin ánimo de polemizar sino mas bien de analizar todos los posibles factores que influyen en el problema de nuestro amigo..... además de que no sabemos que DB utiliza, que tan grandes son las tablas, cuanto es el tiempo que se esta consumiendo etc, etc, etc.....

Bueno, espero sus comentarios para replantear mis conceptos y mis puntos de vista si es el caso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Actualizacion de solo una fila de un dw

Publicado por eduardo.v (208 intervenciones) el 10/05/2003 21:21:29
Amigo Milson
Bueno tienes razon al decir que definitivamente la velocidad tiene que mermar en casos de tablas de millones de registros y que depende mucho de su estructura. Pero en el caso de nuestro amigo (por lo menos desde mi punto de vista) deduje que se trata de la actualizacion de solo una tabla (dw_1.update()) y al no dar mas referencias del caso supuse que se trata de una operacion simple de actualizacion, es por eso que me parecia raro que considerara que habia una demora en la actualizacion y es por ese motivo que le recomende revisar otros factores que no tengan que ver con su codigo. Pero bueno, habria que ver que tan lenta es esa actualizacion porque como tu dices puede ser algo normal. Puede ser tambien que este utilizando un datawindows con demasiadas tablas o quiza este incluyendo funciones que incluyan select dentro del datawindows o quiza este haciendo alguna rutina extra antes o despues de la actualizacion, en fin. Eso solo nos lo puede decir nuestro amigo Alex. Esperamos su respuesta. Y no te preocupes amigo Milson no creo que haya polemicas por tu comentario porque mientras mas escarbemos mas cosas nuevas encontraremos.
Suerte y...
Saludos desde Peru
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Actualizacion de solo una fila de un dw

Publicado por Milson Cardona (613 intervenciones) el 10/05/2003 20:23:57
Un saludo especial desde COLOMBIA

Hola Alex... bueno porque no pruebas con las distintas configuraciones de actualización del DW que te proporciona....

NOTA: aunque las propiedades estan disponibles para las otras versiones esta es la forma en que las encuentras en PB 8.0

-- abres el DW object
-- click en la opción ROWS del menú principal
-- click en la opción UPDATE PROPERTIES en el menu desplegable
-- en la opción WHERE CLAUSE FOR UPDATE / DELETE puedes checar la opción KEY AND MODIFIED COLUMNS (solo actualiza las columnas modificadas y la clave primaria )
-- en la opción KEY MODIFICATION puedes checar la opción USE UPDATE (esta solo actualiza los registros... mientras la otra opción DELETE THEN INSERT borra y crea los registros nuevamente)

NOTA: debo advertirte que la configuración mas segura para actualización de los datawindow son las 2 primeras opciones
(KEY COLUMNS ) y (USE DELETE THEN INSERT), y por ese mismo motivo son las más demoradas....

si eliges otra configuración diferente es probable que de cuando en cuando te salga errorsillos como por ejemplo (NO SE PUDO ACTUALIZAR PORQUE LAS FILAS CAMBIARON ENTRE EL RETRIEVE Y EL INSERT lógicamente en ENGLISH ) este es el más común...

la idea es que pruebas diferentes configuraciones y te acomedes con la que te brinde más confiabilidad y velocidad de almacenamiento..... OJO cuando digo confiabilidad no estoy diciendo que se te pierdan datos, sino que se te produzcan algunos errores de los que te mencioné anteriormente.

espero que sea de utilidad este comentario.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Actualizacion de solo una fila de un dw

Publicado por Alex (23 intervenciones) el 12/05/2003 14:30:52
Hola, muchas gracias a todos por contestar.
Quiero aclararles unas cosas antes que nada, la tabla en la cual hago insert o update tiene solamente 700 registros, el tema puede ser si graba en un log, tambien medimos el tiempo antes de la sentencia update y despues que termina de ejecutarse, y ahi nos dio que demoraba. La tabla de log se graba en el evento del dw sqlpreview, puede ser por eso que demora entonces, me imagine que era el problema en el update o algo asi.

if ib_LogSql then
if request=previewfunctionupdate! then
if f_logsql( gs_user, sqlsyntax, ld_task, propietario) then
return(0)
else
return(0)
end if
end if
end if

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar