Problema con rutina de Validación mediante un Cursor

192 views
Skip to first unread message

integral

unread,
Jun 20, 2024, 11:45:29 AMJun 20
to Comunidad de Visual Foxpro en Español

Que tal Amigos

Muy Buenos Días

Tengo problemas con la  rutina de validación.

La idea que deseo implementar es la siguiente :

1) Extraer en un Cursor desde Sql Server todos los registros con la condición sea igual a FIADO. Hasta aquí OK
2) Si existen registros mostrar el formulario de Consulta de Búsquedas. ( Muestra el formulario con los Registros, Ok)
3) Si no existen Registros debería mostrar el mensaje de Alerta creado. Aquí falla y vuelve a mostrar el Formulario de Consulta,
   pero sin registros en el Grid contenido en el Formulario.

También probé de esta manera y también no realiza la validación de forma correcta.

SELECT Cur_Busca_Registros
nReg = RECCOUNT()  

Aquí copio la rutina del código que estoy utilizando.

LOCAL nReg As Number
nReg = 0

_cStatus_01 = "FIADO"                                                        

SQLEXEC(cn, 'SELECT * FROM dbo.Consumo WHERE status_con = ?_cStatus_01 ORDER BY Registro', 'Cur_Busca_Registros')
SELECT Cur_Busca_Registros
nReg = _TALLY                               && RECCOUNT()  

WAIT WINDOW "Cantidad de Registros Encontrados : " + TRANSFORM(nReg) TIMEOUT 1

IF nReg > 0                      
   Do FORM "C:\MIGRACONSU\ERP_CONSUMO\FORMS\BUSCAR_CONSUMOS.SCX" WITH Thisform  
ENDIF

IF nReg = 0
   WAIT WINDOW "No Existen Registros de Consumos..." NOWAIT
   Messagebox("No Registra Ningún Consumo realizado..." + CHR(13) + ;
                          "Presione La Tecla [ ENTER] para Salir.", 0+64,"Aviso del Sistema")
   RETURN .F.
ENDIF  

Agradezco sus comentarios y sugerencias.

Saludos,

Integral

Cristian Novoa

unread,
Jun 20, 2024, 12:41:34 PMJun 20
to Comunidad de Visual Foxpro en Español
_TALLY no se usa en ese contexto. Ten cuidado con _TALLY. Usa RECCOUNT() en ese problema.

mpulla

unread,
Jun 20, 2024, 1:18:40 PMJun 20
to Comunidad de Visual Foxpro en Español
Hola Integral.

Como ya te comentaron _tally no se usa en ese contexto.

SQLEXEC tiene un cuarto parametro, que es un array donde guarda información del los registros procesados por el servidor 

SQLEXEC(cn, 'SELECT * FROM dbo.Consumo WHERE status_con = ?_cStatus_01 ORDER BY Registro', 'Cur_Busca_Registros', aInfo)

MESSAGEBOX(" No. Registros procesados:" + TRANSFORM(aInfo(2)))

Lee la ayuda, tiene otras consideraciones, como si trabajabas de forma asincrónica.

Saludos.
Mauricio 

Cristian Novoa

unread,
Jun 20, 2024, 1:52:57 PMJun 20
to Comunidad de Visual Foxpro en Español
Integral, "enmascara SQLEXEC". Te adjunto la función que uso para toda comunicación con SQL Server.

Además, te aconsejo dejar todo SQL en procedimientos almacenados, dejando en fox solo los llamados a estos.
_SQLEXEC.rar
Message has been deleted

integral

unread,
Jun 20, 2024, 4:08:59 PMJun 20
to Comunidad de Visual Foxpro en Español
Que tal Amigo Christian Novoa

Me enviaron el siguiente Store Procedure. Consulta que debo modificar para que me filtre los registros del año en curso ( 2024)

Aquí el ejemplo en SQL Server:

SQL
CREATE PROCEDURE comercial.ventas_por_anio
    @anio INT,
    @nr INT OUTPUT
AS
BEGIN
    SELECT Id_Venta, Id_Cliente, Nro_Doc, Fecha_Venta
    FROM comercial.Venta
    WHERE YEAR(fecha_venta) = @anio;

    SELECT @nr = @@ROWCOUNT;
END;
GO

DECLARE @nreg INT;
DECLARE @aniofiltro INT;
SET @aniofiltro = 2023;
EXECUTE comercial.ventas_por_anio @aniofiltro, @nreg OUTPUT;
SELECT @nreg;

Desde Visual FoxPro (VFP):

_anio = YEAR(DATE())    && 2024
_nr = 0
=SQLEXEC(ncon, "EXECUTE comercial.ventas_por_anio ?_anio, ?@_nr", "micursor")
?_nr

Agradezco vuestra ayuda.

Saludos,

Integral

Cristian Novoa

unread,
Jun 20, 2024, 5:08:57 PMJun 20
to Comunidad de Visual Foxpro en Español
SELECT Id_Venta, Id_Cliente, Nro_Doc, Fecha_Venta
    FROM comercial.Venta
    WHERE YEAR(fecha_venta) = YEAR(getdate());

getdate() te retorna la fecha del servidor

Christian López Gómez

unread,
Jun 21, 2024, 5:46:37 PMJun 21
to publice...@googlegroups.com
Pon la variable 
_cStatus_01

Como privado y prueba 

Enviado con Gmail Mobile


--
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/c1fe4cfb-1a4f-4967-b970-9f1957eeb942n%40googlegroups.com.

integral

unread,
Jun 24, 2024, 1:58:58 PMJun 24
to Comunidad de Visual Foxpro en Español
Que tal Amigos

Muy Buenas Tardes

Resolví el problema con el siguiente código :                                                       

SQLEXEC(cn, 'SELECT Count() FROM dbo.Consumo WHERE status_con = ?_cStatus_01', 'Cursor_Busca_Registros')

Hasta la próxima

Saludos,

Integral
Reply all
Reply to author
Forward
0 new messages