Power Builder - dw update

   
Vista:

dw update

Publicado por Alejandro (72 intervenciones) el 21/04/2010 20:53:59
Amigos tengo un gran problema, haber les cuento...tengo un dw actualizable, ingreso valores en una columna valores de cada registro, pero cada vez que preciono enter no me actualiza altiro en el dw, que podria hacer??, intente crear un evento Key pero no se puede ya que no me acepta el Row. Que pordría hacer?.

Saludos amigos.
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:dw update

Publicado por Marcela (119 intervenciones) el 21/04/2010 22:39:05
1) Las columnas que actualizas estan marcadas como Updatables cuano vas a Row/Update Properties?

2)El evento cualquiera que sea que utilices para guardar tiene esta linea de codigo?

dw_comosellame.Update()

Quizas es muy basico lo que te pregunto, pero es para entenderte mejor y descartar posibles causas.
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:dw update

Publicado por Alejandro (72 intervenciones) el 22/04/2010 02:18:58
Marcela,

gracias por responder, te explico mi caso. Tengo un objeto DW con una tabla t_ventas en la cual tengo como campos ID_serie, Nombre_Prod, Valor, Subtotal y total. Los registro quedan de la siguiente forma

ID_Serie / Nombre_P / Valor/ Subtotal/ Total
0001 / Producto 1 / 1.000 / ? / ?
0002 / Producto 2 / 2.000 / ? / ?
0003 / Producto 3 / 3.000 / ? / ?

En las opciones de ROW/UPDATE PROPIEDADES tengo seleccionada la tabla a ocupar junto con las columnas Subtotal y Total, y como primary Key ID_Serie.

También tengo activado el TAB ORDER de mi datawindons.

La idea es ingresar un valor en Subtotal y al momento de precionar ENTER o TAB que me muestre la suma del Valor y Subtotal en TOTAL. y el luego en el registro siguiente hacer lo mismo.

El problema es que cuando preciono el BOTÓN que contiene el script
DW_1.UPDATE(); solo se actualiza el primer registro, y con los otro no pasa nada, me da la impresión que se queda pegado en el primer recorrido.

Muestro el código que tengo en mi objeto DW a continuación:

LONG ll_serie, ll_corte, ll_total


IF this.RowCount() > 0 Then

ll_serie = LONG(dw_1.getitemNumber(row,3))
ll_corte_boleto = LONG(dw_1.getitemNumber(row,4))

ll_total = ll_serie + ll_corte_boleto

dw_1.setitem(row,5,ll_total)

END IF
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
Imágen de perfil de Antonio

RE:dw update

Publicado por Antonio (1114 intervenciones) el 22/04/2010 03:10:32
Hola Alejandro:

Por lo que pones de tu codigo tienes dos opciones:

1.- tu pones esto:

ll_serie = LONG(dw_1.getitemNumber(row,3))
ll_corte_boleto = LONG(dw_1.getitemNumber(row,4))

ll_total = ll_serie + ll_corte_boleto

dw_1.setitem(row,5,ll_total)

resulta que ya no es necesario poner la funcion Long(), ya que al decirle a PB dw_1.getitemnumber() ya tomas el valor de tipo numerico por consiguiente quita el long() y dejalo asi: ll_serie = dw_1.getitemNumber(row,3) lo mismo para el otro valor que tomas.

2.- si no te resulta utiliza un campo computado para que sume las columnas.

Si despues de esto no te funciona, revisa si tus campo son de tipo string para convertirlo a long, pero los string deben ser caracteres numericos de lo contrario el long() te retorna cero, por ejemplo no es lo mismo esto ll_serie = Long ( '1234') a esto ll_serie = Long ( 'A123B')

Espero te ayude amigo...

Saludos desde México
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:dw update

Publicado por Marcela (119 intervenciones) el 22/04/2010 03:38:44
Cierto, nunca use Long para hacer esto y normalmente recurro a campos computados

Crear un computado por ej suma_cal que es la suma de estas dos columnas y en el itemchanged simplemente:
long ll_suma

ll_suma=this.getimnumber(this.getrow(), "suma_cal")
This.setitem(this.getrow(), 5, ll_suma)

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:dw update

Publicado por Marcela (119 intervenciones) el 22/04/2010 03:32:31
Y donde tenes ese codigo?

Asi, a primera vista deberia estar en el evento itemchanged, y creo que en ese caso no hace falta el If Rowcount()...

En teoria si en el evento ITEMCHANGED de tu dw tenes algo asi:

LONG ll_serie, ll_corte, ll_total

ll_serie = LONG(this.GetitemNumber(this.Getrow(),3))
ll_corte_boleto = LONG(this.GetitemNumber(this.Getrow(),4))

ll_total = ll_serie + ll_corte_boleto

This.setitem(row,5,ll_total)

No lo probé pero debería andar.

Otra cosa, este evento se da cada vez que modificas cualquier campo, asi que "mas optimo" podria ser agregarle unas lineas que detectan de que campo se trata y hacer algo en consecuencia:

LONG ll_serie, ll_corte, ll_total
string ls_object

ls_object=string(dwo.name)

If ls_object="valor" or ls_object="subtotal" then

ll_serie = LONG(this.GetitemNumber(this.Getrow(),3))
ll_corte_boleto = LONG(this.GetitemNumber(this.Getrow(),4))

ll_total = ll_serie + ll_corte_boleto

This.setitem(row,5,ll_total)
End If

Como te dije, no lo probé, pero fijate si te sirve.
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:dw update

Publicado por Alejandro (72 intervenciones) el 22/04/2010 14:35:08
Amigos solucione el problema, con la ayuda de algunas modificaciones al código y en la configuración de las propiedades del DW se ha logrado Update() de del DW en la base de datos. Les cuento lo que modifique, he selecciona la opción del Tab Order del DW donde le asigne 1 (Corte_Boleto) y 2 (Subtotal), de esta forma logro que en el momento de ejecución por medio del Tab o Enter avance y actualice al mismo tiempo.

Antonio:

Gracias por responder, no me soluciono el problema principal, pero tu respuesta si me ayudo a reducir mi código, y darme cuenta que estaba haciendo un uso demás del LONG

Marcela:

Agradezco tu ayuda, he arreglado el código que tenia. Creo que entra dentro de las solucinones que le di a mi problema. Muchas gracias!.

Saludos desde Chile.
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