Mantenimiento de tabla con consulta SQL

He creado un datawindows donde los campos los cree mediante una consulta SQL. Al datawindows les agrego los datos, temporalmente, mediante la el sgt script:
Integer nuevo
nuevo=dw_1.insertrow(0)
dw_1.scrolltorow(nuevo)
dw_1.setitem( nuevo,"alunomb", sle_1.text)
dw_1.setitem( nuevo,"aluapel",sle_2.text)
dw_1.setitem( nuevo,"aluedad",integer(sle_3.text))
Ahora lo que deseo es que cuando el usuario termine de ingresar los registros al datawindows al momento de darle click al botón grabar, se grabe todos los registros ingresados temporalmente en el datawindows, también deseo saber como eliminar un registro.

2 Respuestas

Respuesta
1
1. para hacer update: dw_1.update()
Para estp podes revisar las update properties de la dw. Esto está en la opción Rows -> Update Properties del painter.
2. Para borrar una fila del dw:
dw_1.deleteRow(ll_nro_fila)
Después si haces update y la fila existía originalmente en la bd te la va a borrar de la BD.
3. No se bien que estas haciendo pero te comento que podrías hacer que el usr trabaje directamente sobre la dw en vez de usar los sle.
Muchas gracias, la respuesta que me diste funciona a la perfección, pero lo que realmente deseo es grabar los datos empleando consulta sql (insert into), sin emplear las propiedades del dw. Seguramente estarás pensando para que me complico la vida si con el update del dw lo puedo hacer, es que es una curiosidad que tengo.
Siempre es bueno investigar. También es bueno aprovechar las ventajas del lenguaje.
para hacer un insert "a mano":
directamente tenes que escribir la sentencia, PB las interpreta como parte del codigo:
string ls_var1, ls_var2
ls_var1 = sle_1.text
ls_var2 = sle_2.text
insert into TABLA
(campo1, campo2) values
(:ls_var1, :ls_var);
Ahora, si esto es lo que quieres, lo que no entiendo es porque haces el paso de la dw.
Te explicare lo que intento hacer:
Deseo crear un modulo de factura, donde el usuario pueda seleccionar los productos y cantidades. En visual basic para hacer esto tenia que crear una tabla temporal y llenarla según los requerimientos del cliente y cada vez que grabe los productos del cliente se elimine los datos en la tabla temporal; pero para hacer esto tenia que recorrer toda la tabla temporal con el fin de grabar todos los registros agregados y cada vez que estaba en la fila actual grababa ese registro, pasaba a la siguiente fila y gurdaba los datos de esa fila y así sucesivamente hasta llegar al ultimo registro de la tabla temporal. Pero ahora me di con la sorpresa que en PB no era necesario crear esa tabla temporal ya que podía agregarle datos temporales al dw y posteriormente grabarlos en la base de datos, cosa que hago con el código:
Evento click objeto cb_agregar
integer nuevo
nuevo=dw_1.insertrow(0)
dw_1.scrolltorow(nuevo)
dw_1.setitem( nuevo,"alunomb", sle_1.text)
dw_1.setitem( nuevo,"aluapel", sle_2.text)
dw_1.setitem( nuevo,"aluedad",integer(sle_3.text))
Y los guardo a la base de datos con el código:
Evento click objeto cb_grabar
dw_1.update()
Lo que intentaba hacer es algo parecido lo que hacia en vb, como recorrer de inicio a fin ese dw que posee datos temporales (es decir que los datos los haya agregado con cb_agregar), esto lo haría con el fin de recorrer cada fila del registro he ir grabando con el insert into.
Mi duda resulta acá:
¿Cómo recorrer todo ese dw que posee datos temporales?
¿Cómo eliminar un registro de ese dw con registros temporales?
Espero haber sido lo más explicito posible y espero me puedas ayudar, muchas gracias
Bueno lo que intente explicarte es que pb va a hacer los inserts correspondientes por vos en el momento que hagas dw_1. update().
No hace falta que recorras la dw vos.
Además te comento que podes obviar el uso de los sle que son tan usados en VB. Coloca un ctrl dw en la ventana y formatea el dw object (es el que tiene la sentencia select) que necesitas. Después el usuario puede completar directamente los campos de la dw en vez de escribir en un sle y que vos lo pases a la dw.
--
para borrar una fila: dw_1.deleteRow(ll_nro_fila)
--
Respuesta
1
Con mucho gusto:
Para grabar los datos de un data window puedes utilizar la función UPDATE(), la cual devuelve un valor tipo numérico, y asabes 1 si todo fue correctamente operado y -1 si no lo fue.
La función UPDATE() puede ser utilizada para grabar transaccionalmente, por ejemplo si dicha función devuelve un valor negativo, entonces puedes desechar toda la transacción utilizando ROLLBACK de lo contrario COMMIT.
Con respecto a tu segunda pregunta, para eliminar un registro del data window utilizas DELETEROW(<row>), esta función elimina el registro según su numero, sin embargo esto solo es efectuado en el datawindow, para que dicha acción también se refleje en la tabla, utilizas la misma función que para grabar UPDATE(), la cual ya sabes como función.
Por lo que habrás notado para que todas las operaciones que afectan datos en un datawindow se reflejen en la tabla, tienes que efectuar la función UPDATE().
Para finalizar, en caso que este actuando sobre algún campo del datawindow en forma de edición, esto quiere decir que o estas modificando un dato o bien integrando un nuevo, antes de ejecutar la función UPDATE, deberás utilizar la función ACCEPTTEXT(), la cual te protege de que un dato se quede en un buffer equivocado y no llegue a la tabla.
Por ultimo echale un vistazo en la ayuda interactiva, a cada una de las funciones que te he mencionado en esta respuesta seguramente te va a ampliar la información y en algunos casos te presenta algunos ejemplos.
Si me permites añadir algo más, la función SCROLLTOROW(<row>) forzá al datawindow object a posicionar la linea que estas indicando en su argumento dentro de los margenes de visualización de datos, lo que significa que la función obliga al data window a posicionar el apuntador sobre el registro y que ademas pueda verse en pantalla, sin embargo para mover el apuntador es mejor que utilices la función SETROW(<row>), en realidad una depende de la otra, por lo que antes de usar ScrollToRow() utiliza SetRow(), y siempre usalas juntas, a excepción de cuando utilices un datastore.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas