FoxyDB como borro registros de cursores editables pero que no se borren de la Base de Datos

108 views
Skip to first unread message

Ricardo Soldini

unread,
Feb 8, 2021, 12:08:34 PM2/8/21
to Comunidad de Visual Foxpro en Español
Que tal Amigos
tengo la siguiente duda
En un form que hace de punto de Ventas 
tengo cursores vacíos para tablas
 cta_enc 
 cta_det 
pagos_ingresados
boleta_enc
boleta_det

toda la administración de datos los hago con un cursor en memoria creado especialmente para contener todo lo que se requiere para realizar la venta y controlar los items vendidos y su posterior rebaja de stock, etc.
cuando el usuario realiza el pago genero las validaciones respectivas y guardo en secuencia Ctra_enc, cta_det, pagos_ingresados, boletas_enc, boleta_det y al hacer el odb.Update() actualizo los Id_que corresponden de acuerdo a las relaciones pertinentes.
si odb.commit() sale bien 
limpio todos los cursores con delete from cta_enc . cta_det, pagos_ingresados, coleta_enc, boleta_det. y dejo el control en el primer textbox del form para recibir otra venta y hacer todo el ciclo de nuevo
ACA tengo la siguiente duda, como me aseguro que cuando voy a hacer el segundo odb.uptdate() y su correspondiente odb.commit() no se borren de la Base en SQL los registros que borre de los cursores 

Y ACA ESTA mi duda 

Antonio Meza

unread,
Feb 8, 2021, 12:59:47 PM2/8/21
to Comunidad de Visual Foxpro en Español
Hola!!

En mi caso lo que hago simplemente traer los cursores vacíos nuevamente, es decir enviar cada consulta con un Where id = -1, y aplicar de nuevo CusorEdit(). 

saludos
Antonio Meza

Ricardo Soldini

unread,
Feb 8, 2021, 1:05:53 PM2/8/21
to Comunidad de Visual Foxpro en Español
Ha Ok lo probare gracias Antonio 

Edison Ramirez

unread,
Feb 8, 2021, 1:12:02 PM2/8/21
to publice...@googlegroups.com
Delete


From: publice...@googlegroups.com <publice...@googlegroups.com> on behalf of Antonio Meza <solv...@gmail.com>
Sent: Monday, February 8, 2021 12:59:47 PM
To: Comunidad de Visual Foxpro en Español <publice...@googlegroups.com>
Subject: [vfp] Re: FoxyDB como borro registros de cursores editables pero que no se borren de la Base de Datos
 
--
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/0342cbcf-11ea-4da5-af59-8c72fa219e81n%40googlegroups.com.

Claudio Fernandez

unread,
Feb 14, 2021, 10:34:48 AM2/14/21
to Comunidad de Visual Foxpro en Español
Hola Ricardo :
               En lo personal utilizo el comando SQLEXEC de VFP. Primeramente debo realizar la conexion a la base de datos a traves de SQLSTRINGCONNECT()  y guardarla en una variable o una propiedad del formulario yo normalmente utilizo Thisform.conexion ejemplo :

Todo esto en el metodo LOAD

Connect_String = [Driver={SQL Server};Server=&_NOMBRE_SERVIDOR_SQL;UID=&NOMBRE_USUARIO_SQL;PWD=&CLAVE_ACCESO_SQL;Database=&NOMBRE_BASE_DATOS_SQL;]
thisform.conexion = SQLSTRINGCONNECT(Connect_String)

IF thisform.conexion < 0
    thisform.numero_panel = 0
    = MESSAGEBOX('No se pudo conectar al Servidor SQL', 16, 'Error de conexión SQL')
    thisform.encabezado.boton_Volver.Click()
    RETURN .f.
    thisform.release()
    Return
ELSE
    *= MESSAGEBOX('Conexión Satisfactoria', 48, 'Conexión a SQL Server')
ENDIF

= SQLSETPROP(thisform.conexion, 'asynchronous', .F.)
= SQLSETPROP(thisform.conexion, 'DispWarnings', .t.)
= SQLSETPROP(thisform.conexion, 'BatchMode', .t.)

Una vez que tienes la conexion abierta
Si deseas eliminar uno o mas registros debes colocar una sentencia como la siguiente
    cadena = [DELETE FROM mitabla WHERE empresa = '] + _EMPRESA + [' AND numero_operacion = '] + n_nro_operacion + [' ]
    **************************Comandos SQLEXEC() ****************************
    =SQLPREPARE(thisform.conexion, cadena, "resultado")
    n_resp = SQLEXEC(thisform.conexion)
    *************************************************************************
    IF n_resp < 0
            AERROR(laError)
            MESSAGEBOX('ERROR AL REALIZAR LA OPERACION'+ CHR(13) + CHR(13) + ALLTRIM(LAERROR[3]),64,'OPeracion Anulada')
            cadena = [ROLLBACK]
            **************************Comandos SQLEXEC() ****************************
            =SQLPREPARE(thisform.conexion, cadena, "resultado")
            =SQLEXEC(thisform.conexion)
            *************************************************************************
            RETURN
    ENDIF  
                  
   No se si te paso. A mi me sucedio cuando comence a utilizar Bases de Datos Relacionales. En VFP (DBF) el comando DELETE (a secas) borra el registro donde te encuentras parado. En una base de datos relacional debes FILTRAR los registros a borrar con el WHERE como esta escrito arriba. Si colocas el comando sin el WHERE te borra la tabla completa.
Este ejemplo esta utilizado para SQL SERVER pero si te conectas a una base MySQL funciona exactamente igual.
Espero haber sido de ayuda.
Saludos Cordiales

Alex Fernando Reyes Erazo

unread,
Feb 14, 2021, 11:06:27 AM2/14/21
to publice...@googlegroups.com
Simplemente cierralos, los cursores son temporales Use in (Select ("cursor")) 

Reply all
Reply to author
Forward
0 new messages