Eliminar registro del un grid

182 views
Skip to first unread message

Enrique

unread,
Oct 25, 2020, 7:10:13 PM10/25/20
to Comunidad de Visual Foxpro en Español

Hola Grupo. Necesito eliminar registros de un grid y guardar los cambios en la tabla ventas, tengo la siguiente rutina en un botón combo "Eliminar":

set deleted ON
 mTiquet=THISFORM.mTiquet.Value    
   
  IF Tiquet = mTiquet then                   
    cMessageTitle = 'Atención...'
    cMessageText = 'Seguro desea Eliminar registro?'
    nDialogType = 4
                     
    nAnswer = MESSAGEBOX(cMessageText, nDialogType, cMessageTitle)
    DO CASE
        CASE nAnswer = 6                               
        MESSAGEBOX("Se Eliminará el Registro..",0+16,"Sistema Informa..",1000)
        registro=RECNO()           
        delete   
        =cursorsetprop("buffering",5)
        =tableupdate(.t.) 
           flush
                                       
    CASE nAnswer = 7
        MESSAGEBOX("Proceso Cancelado..",0+16,"Sistema Informa..",1000)
         return 0
        thisform.Refresh
    ENDCASE
   ELSE
  ENDIF                      
  thisform.grid2.refresh                               
  thisform.Grid2.Columns(1).SetFocus()

Mi problema es que no se guarda el registro en la tabla ventas.

Para localizar el registro en el grid, lo realizo de la siguiente forma:

select ventas.Tiquet,nombre,cant,venta,(venta/1.19),venta*cant,(ventas.descuento+ventas.des2),(total+des2),(total+des2)/1.19,fecha,usuario,descuento,des2,total FROM ventas ;
 where tiquet = mTiquet ;
  into cursor micursor READWRITE 

Posteriormente desde un botón combo elimino el registro seleccionado del grid  que lo elimina, pero finalmente sigue apareciendo al verlo en la tabla o a través de un informe

Muchas gracias quien me pueda ayudar.

Zarlu

unread,
Oct 25, 2020, 11:24:09 PM10/25/20
to Comunidad de Visual Foxpro en Español
Buenas noches Enrique!

Noto algunas cosas quizá fuera de orden.
En tu código al parecer borras en el cursor, aplicas buffering y actualizas la tabla, pero no veo borres en la tabla

Espero ayudarte con lo siguiente:

Set deleted on
Use latabla...
=Buffering....&& a latabla
Select .... into elcursor...
Delete elregistro For.... IN latabla&&nota el "IN" para no  usar "select latabla"
=TABLEUPDATE(0,.T.,"latabla")&&así para no usar "select latabla"
Delete elregistro For.... IN elcursor&&nota el "IN" para no  usar "select elcursor"
ThisForm.Grid1.Refresh

El último DELETE al cursor igual puede ser crear de nuevo elcursor:
Select .... into elcursor...

Disculpa la sintaxis abreviada e incompleta. Mi intención es sobre el orden de tu código

Suerte
zarlu
Chetumal, Quintana Roo, México

HernanCano

unread,
Oct 26, 2020, 2:58:54 AM10/26/20
to Comunidad de Visual Foxpro en Español
Plenamente de acuerdo con Zarlu:
Sólo se está borrando en el cursor, pero no en el DBF.
Y las instrucciones propuestas por Zarlu las veo correctas.

Luis suescún

unread,
Oct 26, 2020, 8:20:25 AM10/26/20
to publice...@googlegroups.com
para borrar no es con el select.

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/f108b8ae-ed16-47dc-9c86-b6aaf1e462abn%40googlegroups.com.

Luis suescún

unread,
Oct 26, 2020, 8:20:30 AM10/26/20
to publice...@googlegroups.com
le das un 
locate for tiquet=m.tiquet
if found()
    delete next 1
endif
y le das un refresh al grid


El dom., 25 oct. 2020 18:10, Enrique <enrique...@gmail.com> escribió:
--

Oscar Bonet

unread,
Oct 26, 2020, 9:56:54 AM10/26/20
to publice...@googlegroups.com
Yo lo haria asi:

al abrir el formulario, en el evento LOAD 
abrir MiTabla in 0
=CURSORSETPROP("Buffering", 3, "MiTabla")


luego en el evento eliminar

DELETE FROM MiTabla where campoX = MiCondicion

SELECT MiTabla
TABLEUPDATE(.t.)

Att Oscar 




De conformidad con el decreto 2242 de Noviembre de 2015, nuestra Compañía está implementando la Facturación Electrónica y según comunicado  100202211-410 del 29 de Junio de 2018 emitido por la DIAN, se nos fijó el 1 de diciembre de 2018 para la emisión de la factura electrónica.
En consecuencia, hemos destinado la cuenta de correo electrónico: 
e-fac...@cialta.com      para recepción y emisión de facturas electrónicas.

Habeas Data: La Compañía Internacional de Alimentos Agropecuarios CIALTA S.A.S. cumple con los requerimientos de la Superintendencia de Industria y Comercio de Colombia sobre el manejo de información de datos personales, lo cual implica tener políticas claras de tratamiento de Base de Datos que usted puede consultar: Politicas Habeas Data 

Si desea tener más información sobre el particular, puede escribirnos al correo habea...@cialta.com 

Enrique Ruiz Araneda

unread,
Oct 26, 2020, 11:17:33 AM10/26/20
to publice...@googlegroups.com
Hola Muchas gracias a todos por su tiempo y respuestas.  El problema que tengo ahora es que si selecciono un ticket (el cual tiene más de un registro), en el Grid elimina el registro seleccionado de forma correcta. Pero al ver el resultado, elimina siempre el primer registro del ticket. En la siguiente figura se muestra lo que necesito hacer.
Selecciono el registro a eliminar del ticket y luego presiono el botón combo Eliminar.
imagen1.jpg

En el botón combo Eliminar tengo ahora la siguiente rutina:

 set deleted ON
 mTiquet=THISFORM.mTiquet.Value    
   
IF Tiquet = mTiquet then    
    cMessageTitle = 'Atención...'
    cMessageText = 'Seguro desea Eliminar registro?'
    nDialogType = 4

nAnswer = MESSAGEBOX(cMessageText, nDialogType, cMessageTitle)
DO CASE
  CASE nAnswer = 6
   MESSAGEBOX("Se Eliminará el Producto..",0+16,"Sistema Informa..",1000)
    SELECT ventas 
     delete next 1
     =cursorsetprop("buffering",5)
     =tableupdate(0,.T.,"ventas")  

       flush
  CASE nAnswer = 7
      MESSAGEBOX("Proceso Cancelado..",0+16,"Sistema Informa..",1000)
      return 0
     thisform.Refresh
ENDCASE
   ELSE
ENDIF
thisform.grid2.refresh        
thisform.Grid2.Columns(1).SetFocus()

Muchas gracias por su ayuda a todos.



Has recibido este mensaje porque estás suscrito a un tema del grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/publicesvfoxpro/4e-rDrSP52E/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/CAKbqD8tw_qE9r-ARjNcBYWhuXiNBotHtPEfCs0XmsuYaA0EYLw%40mail.gmail.com.


--
               Enrique Ruiz Araneda
        Técnico Superior en Informática
Programador de Aplicaciones Computacionales

Zarlu

unread,
Oct 26, 2020, 11:35:51 AM10/26/20
to Comunidad de Visual Foxpro en Español
Buenos días Enrique!

Lo ideal es que  cada tabla tenga un campo id único para cada registro o un campo auto incremental para con ese campo hacer referencia al modificar o borrar.

Ya que no lo tienes deberás pasar al comando Delete más de un campo para asegurarte borras el deseado (en el caso de campos con más de un registros idéntico) , para tu caso quizás así:
Delete for Tiquet = mTiquet and producto=mProducto In ventas

Observo de nuevo la inconsistencia en el uso del Buffering. Primero es el buffering, luego del Delete y por ultimo el Tableupdate()
De nada sirve el buffering y el tableupdate() si ya borraste directo a la tabla
Te sugiero de nuevo que el Buffering lo apliques inmediatamente después de abrir la tabla.

(Me surge la duda si tu grid está alimentado por un select o por la tabla directamente)

zarlu
Chetumal, Quintana Roo, México




Enrique Ruiz Araneda

unread,
Oct 26, 2020, 12:17:43 PM10/26/20
to publice...@googlegroups.com
Muchas gracias Zarlu. En el formulario, a través de la casilla Tiquet en el evento Clik llamo al tiquet que aparece luego en el Grid. Con esta rutina:

select ventas.Tiquet,nombre.... FROM ventas ;

 where tiquet = mTiquet ;
       into cursor micursor READWRITE

Luego con un botón combo trato de eliminar un registro seleccionado, que es donde me estas ayudando a resolver este caso.
Probare lo que me indicas.
Muchas gracias.



Reply all
Reply to author
Forward
0 new messages