Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   FoxPro con ODBC -Query- (https://www.clubdelphi.com/foros/showthread.php?t=74750)

HectorMM 08-07-2011 15:37:18

FoxPro con ODBC -Query-
 
Estoy realizando una consuta de FoxPro a través de Microsoft Query, pero cuando agrego la sentencia IF o CASE de FoxPro me da un error que dice: COMMAND CONTAINS UNRECOGNIZED PHRASE KEYWORD. También, utilizo el la sentencia CASE de SQL y de igual forma me da error.

El código es el siguiente -UTILIZANDO COMANDO FOXPRO *DO CASE*:

SELECT detalle_partidas.id_cuenta, partidas.concepto, detalle_partidas.concepto, partidas.fecha_partida, (detalle_partidas.cargo-detalle_partidas.abono) AS 'NETO', detalle_partidas.id_partida, partidas.numero_partida, partidas.tipo_partida, tipos_partidas.descripcion, cuentas.cargar_como, (substr(dtoc(partidas.fecha_partida),1,2)+'/'+substr(dtoc(partidas.fecha_partida),7,4)) AS 'MES-AÑO'

DO CASE
CASE cuentas.cargar_como =$1 THEN 'ACTIVO'
CASE cuentas.cargar_como =$2 THEN 'PASIVO'
ENDCASE

FROM cuentas cuentas, detalle_partidas detalle_partidas, partidas partidas, tipos_partidas tipos_partidas
WHERE partidas.id_partida = detalle_partidas.id_partida AND tipos_partidas.tipo_partida = partidas.tipo_partida AND cuentas.id_cuenta = detalle_partidas.id_cuenta AND ((partidas.fecha_partida Between {d '2011-01-01'} And {d '2011-12-31'}))
ORDER BY partidas.fecha_partida


El código es el siguiente -UTILIZANDO COMANDO SQL *CASE*:

SELECT detalle_partidas.id_cuenta, partidas.concepto, detalle_partidas.concepto, partidas.fecha_partida, (detalle_partidas.cargo-detalle_partidas.abono) AS 'NETO', detalle_partidas.id_partida, partidas.numero_partida, partidas.tipo_partida, tipos_partidas.descripcion, cuentas.cargar_como, (substr(dtoc(partidas.fecha_partida),1,2)+'/'+substr(dtoc(partidas.fecha_partida),7,4)) AS 'MES-AÑO'

'CLASIFICACIÓN' = CASE
WHEN cuentas.cargar_como =$1 THEN 'ACTIVO'
WHEN cuentas.cargar_como =$2 THEN 'PASIVO'
END CASE

FROM cuentas cuentas, detalle_partidas detalle_partidas, partidas partidas, tipos_partidas tipos_partidas
WHERE partidas.id_partida = detalle_partidas.id_partida AND tipos_partidas.tipo_partida = partidas.tipo_partida AND cuentas.id_cuenta = detalle_partidas.id_cuenta AND ((partidas.fecha_partida Between {d '2011-01-01'} And {d '2011-12-31'}))
ORDER BY partidas.fecha_partida



Muchas gracias por la ayuda.

oscarac 08-07-2011 15:52:21

Foxpro.... q recuerdos....

prueba de esta manera

Código SQL [-]
SELECT detalle_partidas.id_cuenta, partidas.concepto, detalle_partidas.concepto, partidas.fecha_partida,
 (detalle_partidas.cargo-detalle_partidas.abono) AS 'NETO', detalle_partidas.id_partida, partidas.numero_partida, 
partidas.tipo_partida, tipos_partidas.descripcion, cuentas.cargar_como, 
(substr(dtoc(partidas.fecha_partida),1,2)+'/'+substr(dtoc(partidas.fecha_partida),7,4)) AS 'MES-AÑO',
iif (cuentas.cargar_como =$1, 'ACTIVO', 'PASIVO') 
FROM cuentas cuentas, detalle_partidas detalle_partidas, partidas partidas, tipos_partidas tipos_partidas
WHERE partidas.id_partida = detalle_partidas.id_partida AND tipos_partidas.tipo_partida = partidas.tipo_partida AND 
cuentas.id_cuenta = detalle_partidas.id_cuenta AND ((partidas.fecha_partida Between {d '2011-01-01'} And {d '2011-12-31'}))
ORDER BY partidas.fecha_partida

HectorMM 08-07-2011 16:13:23

Muchas gracias Oscarac,

Me sirvio, pero si tengo más de una clasificación? Así por ejemplo:
cuentas.cargar_como =$1 ----- 'ACTIVO'
cuentas.cargar_como =$2 ----- 'PASIVO'
cuentas.cargar_como =$3 ----- 'PATRIMONIO'
cuentas.cargar_como =$4 ----- 'GASTOS'
cuentas.cargar_como =$5 ----- 'INGRESOS'
cuentas.cargar_como =$6 ----- 'CTAS. CIERRE'

Se puede utilizar así:
IFF (cuentas.cargar_como =$1, IFF (cuentas.cargar_como =$2, 'PASIVO',IFF (cuentas.cargar_como =$3, 'PATRIMONIO',....'ACTIVO'))))))

oscarac 08-07-2011 16:21:42

asi es... puedes hacer una secuencia de iif anidados, como muy bien lo has puesto en tu ejemplo final, pero es IIF no IFF

HectorMM 08-07-2011 16:41:57

Gracias nuevamente. Ya lo hice y me quedó así:


IIF(cuentas.cargar_como=$1, IIF(cuentas.cargar_como=$2, 'PASIVO', IIF(cuentas.cargar_como=$3, 'PATRIMONIO', IIF(cuentas.cargar_como=$4, 'GASTOS', IIF(cuentas.cargar_como=$5, 'INGRESOS', IIF(cuentas.cargar_como=$6, 'CTAS.CIERRE', 'ACTIVO')))))) AS 'CLASIFICACIÓN'

pero me da un error que dice: MISSING COMMA (,)

A que se deberá?


De antemano, gracias.

oscarac 08-07-2011 16:45:41

Yo creo que deberia ser asi

Código SQL [-]
 
IIF(cuentas.cargar_como=$1, 'ACTIVO', IIF(cuentas.cargar_como=$2, 'PASIVO', 
IIF(cuentas.cargar_como=$3, 'PATRIMONIO', IIF(cuentas.cargar_como=$4, 'GASTOS', 
IIF(cuentas.cargar_como=$5, 'INGRESOS', IIF(cuentas.cargar_como=$6, 'CTAS.CIERRE', 'desconocido')))))) 
AS 'CLASIFICACIÓN'

porque de la forma que estas haciendolo tu cuando es $1 no saldria nada


La franja horaria es GMT +2. Ahora son las 02:18:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi