Retroceder   Foros del Web > Programación para sitios web > Bases de Datos

Respuesta
 
Herramientas Desplegado
Antiguo 12-may-2008, 05:53   #1 (permalink)
Koudelka ha deshabilitado el karma
 
Avatar de Koudelka
 
Fecha de Ingreso: febrero-2008
Mensajes: 332
Horas por precio

Veamos, en una base de datos de access, tengo un informe en el que en un campo de texto sin formato me suma unas horas totales (superando las 24 horas). Luego tengo otro campo que me indica el precio de cada hora en formato de euro. Ahora bien, lo que quiero es que haga la multiplicación de horas*precio porque por más que lo intento no me sale.
__________________
Cámara Oscura
Etheria
Koudelka está desconectado   Responder Citando
Antiguo 12-may-2008, 10:06   #2 (permalink)
quimfv tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 398
Re: Horas por precio

El formato del campo horas en la tabla ha de tener formato numerico, si no creo que hay una funcion que te devolvera el valor de un texto si este es un numero (value(txt) creo)

En el origen de datos del objeto del informe tienes que poner =hora*precio o =value(horas)*precio si no puedes canviar el formato de horas, el objeto del informe no se puede llamar ni horas ni precio... y luego le das formato euro al objeto del informe....


Quim
quimfv esta en línea ahora   Responder Citando
Antiguo 13-may-2008, 00:32   #3 (permalink)
Koudelka ha deshabilitado el karma
 
Avatar de Koudelka
 
Fecha de Ingreso: febrero-2008
Mensajes: 332
Re: Horas por precio

con el value no me vale
__________________
Cámara Oscura
Etheria
Koudelka está desconectado   Responder Citando
Antiguo 13-may-2008, 01:30   #4 (permalink)
jurena tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 509
Re: Horas por precio

si tienes ya las horas en formato 14:25:15, recuerda que en el campo lo que se guarda es un número con decimales. Conviertes primero a CDoble, es decir, a número decimal y luego lo multiplicas por 24, el resultado es el equivalente decimal de las horas. Luego multiplicas ese decimal por el precio por hora y ya está. Pruébalo

CDoble([hora])*24*preciohora
en inglés CDbl([hora])*24*preciohora

Última edición por jurena; 13-may-2008 a las 07:27.
jurena está desconectado   Responder Citando
Antiguo 13-may-2008, 01:37   #5 (permalink)
Koudelka ha deshabilitado el karma
 
Avatar de Koudelka
 
Fecha de Ingreso: febrero-2008
Mensajes: 332
Re: Horas por precio

Creo que así no me vale (he probado de las dos formas). Veamos, en donde me muestra las horas totales, está puesto para que sobrepase las 24 horas. Para que te hagas una idea, en el origen de control tengo puesto lo siguiente:

=TimeToString(Suma([HorasM])+Suma([HorasT]))
__________________
Cámara Oscura
Etheria
Koudelka está desconectado   Responder Citando
Antiguo 13-may-2008, 02:45   #6 (permalink)
jurena tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 509
Re: Horas por precio

y ¿por qué no lo sacas como número doble todo, sumas y luego multiplicas por 24 y por precio hora? No lo he probado, pero la lógica, creo, se sostiene. No cambias a cadena de texto sino a número decimal, sumas todo y luego multiplico por 24 para obtener el número de horas en decimal y luego multiplicas por el precio hora. Quita el TimetoString.
(Suma(CDoble([HorasM]))+Suma(CDoble([HorasT])))*24*preciohora

No lo he probado y ya hace tiempo que dejé Access, muchos años, la verdad. No sé si funcionará, pues no sé cómo te llegan los datos, pero este no es tal vez mal camino.
jurena está desconectado   Responder Citando
Antiguo 13-may-2008, 02:50   #7 (permalink)
Koudelka ha deshabilitado el karma
 
Avatar de Koudelka
 
Fecha de Ingreso: febrero-2008
Mensajes: 332
Re: Horas por precio

error no me da, pero tampoco me muestra nada, se queda el campo en blanco >.<
__________________
Cámara Oscura
Etheria
Koudelka está desconectado   Responder Citando
Antiguo 13-may-2008, 05:07   #8 (permalink)
jurena tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 509
Re: Horas por precio

primero haz esto en una consulta donde tengas HorasM:
HorasMdecimal: CDoble([HorasM])*24
Si ves un número decimal donde haya HorasMdecimal y que corresponde al número de horas en decimal es que empezamos bien...

He probado que al convertir en decimal y sumar puedes pasar las 24 horas sin problema.

Por otra parte, he observado ahora que ni siquiera es necesario usar el CDoble.
En el SQL pones
SELECT SUM([campohora].[nombretabla])*24*preciohora AS totalprecio
FROM nombretabla;
y al menos en mi Access 2002 funciona.

La razón es que la fecha se almacena como número decimal, pero la unidad corresponde a día; por eso hay que multiplicar por 24 para hacer horas, pues una hora es 1/24.

Última edición por jurena; 14-may-2008 a las 00:51.
jurena está desconectado   Responder Citando
Antiguo 14-may-2008, 00:28   #9 (permalink)
Koudelka ha deshabilitado el karma
 
Avatar de Koudelka
 
Fecha de Ingreso: febrero-2008
Mensajes: 332
Re: Horas por precio

Antes de leer tu mensaje conseguimos entre dos dar con la solución al problema. Es algo parecido a lo que me has sugerido. Lo primero que hice fue en un campo de texto hacer la suma de las horas sin poner "TimeToString" y después multiplicarlo por 24. Una vez calculado eso, cogia ese campo de texto y lo multiplicaba por el precio.

El problema que había es que no cogía directamente el campo en el que estaba colocada la primera suma (el que tenía puesto "TimeToString").

Gracias por la ayuda ^_^
__________________
Cámara Oscura
Etheria
Koudelka está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 04:52.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93