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

Campo sumado

Estas en el tema de Campo sumado en el foro de Bases de Datos General en Foros del Web. Tengo una base de datos con la tabla bookings, que tiene varios campos de los cuales para este caso solo interesan: precioV, precioC, precioA los ...
  #1 (permalink)  
Antiguo 28/05/2009, 03:48
 
Fecha de Ingreso: mayo-2009
Mensajes: 16
Antigüedad: 15 años, 6 meses
Puntos: 0
Campo sumado

Tengo una base de datos con la tabla bookings, que tiene varios campos de los cuales para este caso solo interesan: precioV, precioC, precioA los 3 de tipo entero o moneda (esto me daría igual). La cosa es que existe un cuarto campo PrecioTotal que es del mismo tipo de datos que los anteriores.

Mi duda es como conseguir que al introducir los valores de "precioC","precioA" y "precioV" a traves de un formulario, se me actualice automáticamente "PrecioTotal" con la suma de los 3.

Me daría igual que fuera mediante un botón o que al actualizar cualquiera de los 3 campos "sumandos" se me actualizara el "Precio total".


Gracias de antemano
  #2 (permalink)  
Antiguo 28/05/2009, 04:35
 
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Campo sumado

En el evento onChange de cada uno de los campos precio, verificas que todos los campos precio tienen algun valor.

En el caso de que asi sea al evento onChange le asocias una acción que debe de lanzar una consulta de actualizacion (UPDATE).

Es en esta consulta donde debes asignarle al campo Precio Total el valor de precioC + precioA + precioV.
  #3 (permalink)  
Antiguo 28/05/2009, 04:36
 
Fecha de Ingreso: mayo-2009
Mensajes: 16
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Campo sumado

Podrías especificarme aunque sea un poco el código???, es que todavía ando un poco pegado en visual Basic.

Gracias por la respuesta

PD: No haria falta comprobar si existe algun valor en los campos a sumar porque por defecto es cero ya que puede ser que no haya que sumar nada en ese concepto.

Última edición por txustaboy; 28/05/2009 a las 04:41 Razón: Falta de Contenido
  #4 (permalink)  
Antiguo 28/05/2009, 04:37
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 10 meses
Puntos: 11
Respuesta: Campo sumado

Hola txusta.

Segun veo puedes hacer varias cosas (en el fondo depende de qué herramienta de desarrollo estes usando, así que, cuál estás usando???) Las más sencillas
- Bien cuando le das al botón de insertar, lo primero qeu haces es darle el valor a TOTAL que luego vas a insertar: total=precioBV+precioC+precioD
- Bien te creas un trigger de bbdd, para que siempre que actualizace o inserte un registro en esa tabla, le asigne a total el valor de la suma de los otros registros. (aunque esto del trigger es un poco duro para lo que pretendes hacer)
- Y la otra forma es poder modifcar las querys de INSERT y UPDATE. Si así puedes, simplemente inserta el campo total como la suma de los otros 3)

Y listo.
buen dia.
  #5 (permalink)  
Antiguo 28/05/2009, 04:43
 
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Campo sumado

El código de la consulta de acutualizacion seria el siguiente:

UPDATE Tabla SET Tabla.PrecioTotal = [PrecioC]+[PrecioA]+[PrecioV];



Un saludo,
  #6 (permalink)  
Antiguo 28/05/2009, 04:48
 
Fecha de Ingreso: mayo-2009
Mensajes: 16
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Campo sumado

Perdonad se me olvido decir que la base de datos esta en access xp. Y lo que busco es que en el formulario donde meto los 3 precios cada vez que modifico uno de los 3 se me actualice el preciototal automaticamente
  #7 (permalink)  
Antiguo 29/05/2009, 01:34
 
Fecha de Ingreso: mayo-2009
Mensajes: 16
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Campo sumado

A ver, sigo sin resolver el problema, he conseguido realizar una consulta que agrego a un botón y me lo realiza correctamente, pero no actualiza el valor resultado en el formulario despumes de darle a dicho botón.

Me gustaría saber como puedo hacer para que se me actualice el valor en el campo Preciototal nada mas darle al botón que ejecuta la consulta.

PD: De hecho, cuando le doy al botón que ejecuta la consulta me cambia el valor en la tabla, pero me obliga a cambiar de registro y volver para ver el valor actualizado. ¿Como puedo hacer para que se actualice el valor del campo PrecioTotal nada mas darle al botón? Sin tener que hacer trapicheos cutres como el de cambiar de registro XDDD


Gracias

Última edición por txustaboy; 29/05/2009 a las 02:43
  #8 (permalink)  
Antiguo 29/05/2009, 02:48
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Campo sumado

Realmente es necesario guardar el resultado de una suma que siempre podras obtener en una consulta, sumando los tres campos??? Yo creo que no. Ademas, segun lo planteas, si cada vez que cambias uno de los tres has de actulizar la tabla, seguramente no necesitas gardarlo.

Sobre esto se podria hablar mucho, es como el titpico ejemplo del campo edad. realmente necesitas guaardar la edad?? no es mejor juaradr la fecha de nacimiento y calcularla en una consulta??

En resumen, yo en tu caso, modificaria la consulta origen de registro del form por una en la que se incluyeran todos los campos que usasa en le form, y un nuevo campo, seria algo asi:

SELECT precioC,precioA,precioV,precioC+precioA+precioV as PrecioTotal from Nombretabla

Y en el form, en el control donde quieres mostrar la suma, le pones PrecioTotal en su propiedad origen de control.

Un saludo
  #9 (permalink)  
Antiguo 29/05/2009, 03:40
 
Fecha de Ingreso: mayo-2009
Mensajes: 16
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Campo sumado

Bueno, sumar ya me lo suma y lo tengo como quiero, la pega es que después de darle al botón que lo suma, no me aparece el valor cambiado en el propio formulario donde estoy introduciendo la información, sino que se cambia en la tabla (Lo he hecho con una consulta SQL UPDATE)). Es un problema un poco menor, porque al final la información queda guardada correctamente.

La cosa es que me gustaria saber como puedo actualizar el formulario cada vez que meta un valor de algo, para que se puedan ver los cambio que realizas.

Lo mismo me ocurre con lo del nombre y apellidos a traves del DNI, una vez que pongo el DNI me sale una lista desplegable con el nombre y apellidos de la persona q corresponde, pero si cambio el dni, tengo que salir del formulario y volver a entrar para que me deje seleccionar el nombre correcto, asi que es ocmo el que no tiene nada jajajjajaa.


A ver si me sabes decir como resolver esos pequeños flecos..

Saludos y gracias de nuevo porque me estas ayudando muchisimo.
  #10 (permalink)  
Antiguo 29/05/2009, 03:49
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Campo sumado

Tienes que refrescar el form, para ello, en el evnto adecuado, tienes que poner:

me.requery

en este caso creo que lo mejor seria despues de ejecutar la consulta.

Antes de inetar refrescar el form, intentalo con el control consume menos recursos:

me.nombredelcontrol.requery

pero sigo pensando que es mas sencillo lo que te comentaba, a demas de mas logico y con menos consumo d erecursos

un saludo
  #11 (permalink)  
Antiguo 29/05/2009, 04:36
 
Fecha de Ingreso: mayo-2009
Mensajes: 16
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Campo sumado

El codigo del boton que suma es el siguiente:

Private Sub Comando42_Click()
On Error GoTo Err_Comando42_Click

Dim stDocName As String

stDocName = "SumaPrecios"
DoCmd.OpenQuery stDocName, acNormal, acEdit
Me.Requery
Exit_Comando42_Click:
Exit Sub

Err_Comando42_Click:
MsgBox Err.Description
Resume Exit_Comando42_Click

End Sub

El boton llama a una consulta en SQL que hace bien la suma y me lo guarda en la tabla, le puse la orden Me.requery como me dijiste pero sigue sin actualizar el form.

Saludos
  #12 (permalink)  
Antiguo 29/05/2009, 04:43
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Campo sumado

Prueba una cosa, pon otro boton al lado del que tiens con este codigo:

Me.Requery

Primero pulsa le boton para lanzar la consuta, y luego pulsa el boton para refrescar el form.

Si esto funciona, significa que la cosnulta tarda mas en ejecutarse que lo que tarda el form en recalcular el origen del registro, por tanto, o esperas un poco para hacer el requery, o lo haces como te dije al principio, con una consulta.

Un saludo
  #13 (permalink)  
Antiguo 29/05/2009, 04:45
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Campo sumado

Para esperar un poco, puedes copiar esta funcion en un modulo:

Public Function EsperaSecs(Segundos As Single)
Dim hora As Single
hora = Timer
Do While Timer - hora < Segundos
DoEvents
Loop
End Function


y usarla asi:


Private Sub Comando42_Click()
On Error GoTo Err_Comando42_Click

Dim stDocName As String

stDocName = "SumaPrecios"
DoCmd.OpenQuery stDocName, acNormal, acEdit
call EsperaSecs(2)'Espera dos segundos
Me.Requery

Exit_Comando42_Click:
Exit Sub

Err_Comando42_Click:
MsgBox Err.Description
Resume Exit_Comando42_Click

End Sub
  #14 (permalink)  
Antiguo 29/05/2009, 05:27
 
Fecha de Ingreso: mayo-2009
Mensajes: 16
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Campo sumado

Bueno bueno bueno, xfinnnnnn. Jejejeje lo qu ehe hecho es meterle varios Me.requery y ya esta. Es una base de datos que como muchiiiiiiiisimo tendrá 800-1000 clientes, asi que no creo q se note mucho.

Una ultima duda en este tema, ¿como puedo hacer que la consulta a la que llama el botón actualice solo la tabla en el registro en concreto que estoy posicionado en vez de en todos los registros de la tabla?

Eso si: MUCHISIMAS GRACIAS!!!!!!! Si vienes por Sevilla te debo unas cervecitas con tapa y todo XDDD.

Saludos
  #15 (permalink)  
Antiguo 29/05/2009, 05:40
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Campo sumado

Yo lo haria asi:

Private Sub Comando42_Click()
On Error GoTo Err_Comando42_Click

Dim sSql As String

sSql = "UPDATE Tabla SET PrecioTotal = [PrecioC]+[PrecioA]+[PrecioV] where campoId='" & Me.ControlCampoId & "'"

CurrentDb.Execute sSql
Me.Requery
Exit_Comando42_Click:
Exit Sub

Err_Comando42_Click:
MsgBox Err.Description
Resume Exit_Comando42_Click

End Sub

Siendo CampoId el campo de la tabla que es clave primaria y ControlCampoId el control (cuadro de texto, o lo que sea) del formulario cuyo origen de control es el campo id, por el que quieres filtrar. Si el capo id fuera numerico, y no de texto, quita lo rojo.

Otra opcion es, modificar directamente la consulta SumaPrecios el campo id, y en la fila criterios de esta ponerle: [forms]![Nombreform]![NombreControl]

un saludo

Me apunto lo de sevilla
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 23:12.