FoxPro/Visual FoxPro - Clausula CASE en SQL desde VFP.

 
Vista:
sin imagen de perfil

Clausula CASE en SQL desde VFP.

Publicado por El Conde (134 intervenciones) el 13/06/2013 06:51:42
Estimados miembros del foro, tengo esta consulta que funciona nitido en SQLServer 2008.

SELECT Productos.producto, Productos.referencia, Productos.cod_prod,
Productos.precio, "Itbis" = case
when itbis = 1 then 'SI'
else 'NO'
end, Proveedores.proveedor, Productos.cantidad
FROM
dbo.productos Productos
INNER JOIN dbo.proveedores Proveedores
ON Productos.cod_prov = Proveedores.cod_prov

Pero, la estoy invocando desde VFP y me da el siguiente mensaje de error:
"Syntax error: 'case' is not allowed in the view script or is in the wrong place"

Se lo que significa el mensaje: me dice que la clausula CASE no esta permitida o que esta en un lugar errado.

Muy bien, pero ya lo intente con IIF, pero no lo permite el motor de SQLServer 2008. Busque informacion y me salio que este comando funciona, pero parece que no desde VFP.

Asi la tengo en VFP:

SELECT Productos.producto, Productos.referencia,;
Productos.cod_prod, Productos.precio, "Itbis" =
case
when itbis = 1
then 'SI'
else 'NO'
end,
Proveedores.proveedor, Productos.cantidad;
FROM dbo.productos Productos;
INNER JOIN dbo.proveedores Proveedores;
ON Productos.cod_prov = Proveedores.cod_prov

Nota: he pues los (;) finales en todas partes y nada, he hecho varias combinaciones de estos.
Si alguien me puede dar una luz en esto, se lo agradezco al fondo.
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

Clausula CASE en SQL desde VFP.

Publicado por Saul (17 intervenciones) el 13/06/2013 07:14:19
Hola Conde.. intenta con esto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
lcSQLcommand   = ""
TEXT TO lcSQLcommand NOSHOW
	SELECT a.producto,
		   a.referencia,
		   a.cod_prod,
		   a.precio,
		   Case When a.itbis = 1 Then 'SI' ELSE 'NO' END As Itbis,
	 	   a.proveedor,
	 	   a.cantidad
	FROM  dbo.productos a
	LEFT JOIN dbo.proveedores b
	ON b.cod_prov = a.cod_prov
ENDTEXT
 
**Se Ejecuta el codigo SQL
 IF !EMPTY(lcSQLcommand)
    cmd = SQLEXEC(TuConexion,lcSQLcommand)
		IF cmd > 0 	 && Intenta confirmar los cambios
		    *WAIT WINDOW AT SROWS() / 2,(SCOLS() / 2) - 5 TIMEOUT 1 'Guardando en Base de Datos!!!'
		ELSE
			IF AERROR(laError)> 0
				Messagebox("No guardo ningún dato se ha producido un Error: "+laError[2])
			ENDIF
		ENDIF
ENDIF


Te puse la forma ideal para que uses el script SQL en con visual fox.

Pero lo ideal es que primero hagas la consulta en SQL SERVER y ya cuento te funcione la traes tal cual la tienes y la pegas dentro de TEXT..

Suerte

Saludos desde Guatemala

Saúl HA
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
sin imagen de perfil

Clausula CASE en SQL desde VFP.

Publicado por El Conde (134 intervenciones) el 13/06/2013 08:02:21
Gracias hermano Saul, por tu preciado tiempo. Lo voy a probar, cualquier cosa te dejo dicho.

Pero, olvide aclarar algo y, es que es preparando una Vista Remota que estoy desde el asistente, para tenerla siempre a mano, donde quiero insertar al SQL generado la clausula CASE. No se si esto cambie el panorama.
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
sin imagen de perfil

Clausula CASE en SQL desde VFP.

Publicado por Juan Manuel Cruz (512 intervenciones) el 13/06/2013 12:20:48
Debemos suponer entonces que lo estás haciendo de manera nativa en VFP y no a través de un SQL pass-through que es lo que propone Saul.

Usa la función VFP ICASE() para reemplazar ese CASE END en la sentencia.

ICASE te permite evaluar múltiples casos lógicos y devolver un resultado por cada uno, OTHERWISE incluido. MIra la ayuda VFP para más detalle.

Saludos y suerte.
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
sin imagen de perfil

Clausula CASE en SQL desde VFP.

Publicado por El Conde (134 intervenciones) el 13/06/2013 23:12:05
Gracias Juan Manuel, no habia visto esta funcion de VFP.

La voy a chequear a ver como me va.

Saludos cordiales.
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

Clausula CASE en SQL desde VFP.

Publicado por Mario (1 intervención) el 09/05/2019 18:55:44
ICASE() es de la version 9 de VFP
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 Edgar Zambrano
Val: 2
Ha aumentado su posición en 36 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Clausula CASE en SQL desde VFP.

Publicado por Edgar Zambrano (72 intervenciones) el 14/06/2013 17:14:14
yo utilizaria un stored procedure y desde vfp invoco ese procedimiento

seria algo asi:

stored procedure

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
create procedure ListadoProveedores
as
begin
SELECT Productos.producto, Productos.referencia,;
Productos.cod_prod, Productos.precio, "Itbis" =
case
when itbis = 1
then 'SI'
else 'NO'
end,
Proveedores.proveedor, Productos.cantidad;
FROM dbo.productos Productos;
INNER JOIN dbo.proveedores Proveedores;
ON Productos.cod_prov = Proveedores.cod_prov
end
go


y en vfp lo ejecutas asi
1
sqlexec(lnConexion, "execute ListadoProveedores", "curListadoProveedores")
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
sin imagen de perfil

Clausula CASE en SQL desde VFP.

Publicado por El Conde (134 intervenciones) el 15/06/2013 02:27:54
Gracias Edgar porque no me han funcionado ningunas de las anteriores. Probare esta tuya a ver.
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