Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Uso de CASE en Access

Estas en el tema de Uso de CASE en Access en el foro de Bases de Datos General en Foros del Web. Muy buenas. Alguien me puede decir por qué esta consulta da error E_FAIL(0x80004005): Código: "SELECT FORMAT(FechaFactura,'dd/mm/yyyy') AS Fecha," & _ " NumFactura AS Factura, NumCliente ...
  #1 (permalink)  
Antiguo 14/06/2005, 08:04
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Uso de CASE en Access

Muy buenas. Alguien me puede decir por qué esta consulta da error E_FAIL(0x80004005):

Código:
"SELECT FORMAT(FechaFactura,'dd/mm/yyyy') AS Fecha," & _
                            " NumFactura AS Factura, NumCliente AS Cliente," & _
                            " ((CASE Importe WHEN IS NULL THEN 0 ELSE Importe END)+(CASE IVA WHEN IS NULL THEN 0 ELSE IVA END)) AS Total" & _
                            " FROM Facturas WHERE...... "
Gracias.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 14/06/2005, 08:58
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 21 años, 8 meses
Puntos: 1
no se si se puede usar case en Access, y en la ayuda tampoco he encontrado nada, pero para lo que tú utilizas la consulta hay una función nvl para Oracle y en Access es Nz que hace lo que tú quieres, la consulta quedaría algo así


Código:
SELECT FORMAT(FechaFactura,'dd/mm/yyyy') AS Fecha,
NumFactura AS Factura, NumCliente AS Cliente, (Nz(Importe,0)+Nz(IVA,0)) AS Total
FROM Facturas WHERE......
también podrías hacer varias consultas unidad por un union considerando los distintos casos

espero que te sirva
  #3 (permalink)  
Antiguo 14/06/2005, 09:22
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
OK, voy a probar la función NZ() a ver qué tal.

Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #4 (permalink)  
Antiguo 14/06/2005, 09:42
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Pues va a ser que no. He probado la función Nz() y IsNull() y no van.

La primera no está definida y la segunda tiene un número erroneo de argumentos.

Código:
"SELECT FORMAT(FechaFactura,'dd/mm/yyyy') AS Fecha," & _
" NumFactura AS Factura, NumCliente AS Cliente," & _
" (Importe+Nz(IVA,'0')) AS Total" & _
" FROM Facturas WHERE .... "
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #5 (permalink)  
Antiguo 14/06/2005, 09:47
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 21 años, 8 meses
Puntos: 1
la función nz, al menos en Access 2000 está definida, eso lo aseguro que la he utilizado varias veces, ¿en qué estás haciendo la consulta?
  #6 (permalink)  
Antiguo 14/06/2005, 09:57
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Es Access 2002 aunque la consulta la hago desde .Net con Microsoft.Jet.OLEDB.4.0. El caso es que en la ayuda de Access no he encontrado nada sobre Nz y IsNull al parecer sólo me permite un argumento.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #7 (permalink)  
Antiguo 14/06/2005, 10:08
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 21 años, 8 meses
Puntos: 1
isnull te devolvería true o false dependiendo de si el valor es nulo o no.

Prueba la consulta con Nz en Access 2002 directamente a ver si funciona, si funciona a lo mejor no lo soporta el Microsoft.Jet.OLEDB.4.0

en caso de que no te funcione podrías probar esto

Código:
SELECT FORMAT(FechaFactura,'dd/mm/yyyy') AS Fecha,
NumFactura AS Factura, NumCliente AS Cliente, Importe AS Total
FROM Facturas 
WHERE IVA is NULL AND Importe IS NOT NULL
.....
UNION
SELECT FORMAT(FechaFactura,'dd/mm/yyyy') AS Fecha,
NumFactura AS Factura, NumCliente AS Cliente, IVA AS Total
FROM Facturas 
WHERE IVA is NOT NULL AND Importe IS NULL
....
UNION
SELECT FORMAT(FechaFactura,'dd/mm/yyyy') AS Fecha,
NumFactura AS Factura, NumCliente AS Cliente, 0 AS Total
FROM Facturas 
WHERE IVA is NULL AND Importe IS NULL
....
UNION
SELECT FORMAT(FechaFactura,'dd/mm/yyyy') AS Fecha,
NumFactura AS Factura, NumCliente AS Cliente, Importe + IVA AS Total
FROM Facturas 
WHERE IVA is NOT NULL AND Importe IS NOT NULL
....
es un poco más lioso pero debería funcionar
  #8 (permalink)  
Antiguo 15/06/2005, 03:28
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
En una consulta de Access sí que funciona Nz() por lo que debe ser el motor Jet. ¿Se puede usar otro?

La consulta que me pones sí que me parece un poco liosa, más que nada porque los filtros de exclusión no los puse directamente porque eran larguísimos y como le ponga más .............

Gracias.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #9 (permalink)  
Antiguo 15/06/2005, 04:06
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
pues después de todo sí que se podía usar la expresión IIF(ISNULL(..)...) el problema estaba en ese largo criterio de selección que había comentado antes. En una de las lineas tenía esto:

WHERE ....... AND CDBL(IVA) LIKE '%' ....

y claro, el dichoso nulo no lo admitía. Lo he cambiado por esto:

WHERE ....... AND (CDBL(IVA) LIKE '%' OR IVA IS NULL) ....

Muchas gracias de todas formas y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:45.