Access - Hacer aperaciones en una consulta

   
Vista:

Hacer aperaciones en una consulta

Publicado por adcasor (8 intervenciones) el 10/10/2011 21:03:44
Hola, a todos:
Espero que me puedan ayudar soy nuevo programando y no tengo mucho conocimiento de Access
¿Es posible que en una consulta se pueda crear un campo "X" que sea el resultado de una operación del campo "Y" por el campo "Z" mas el campo "X" anterior?.
Tengo la siguiente tabla
Tabla1
Dato1 Dato2
1 6
2 7
3 8
4 9
5 10

En Excel lo haria así:
DatoX = (Dato1*Dato2)+DatoX(anterior)

En Access como lo puedo hacer una consulta o un informe que me muestre lo siguente
Dato1 Dato2 DatoX
1 6 6
2 7 20
3 8 44
4 9 80
5 10 130


Saludos y gracias.
Adcasor
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

Hacer aperaciones en una consulta

Publicado por Jefferson jefferson-jimenez@hotmail.com (381 intervenciones) el 10/10/2011 23:19:34
Hola Adcasor

Te comento a mi me gusta trabajar con VBA mas que con SQL, te he preparado un ejemplo de como deberias hacerlo (a manera de orientacion y siguiendo los datos que tu posteas).

El Ejemplo https://sites.google.com/site/jjjt1973/Home/agenda-de-cumpleanos/OperacionConsulta.rar?attredirects=0&d=1

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
Option Compare Database
'************************************************************
'&                                                         &*
'&                       : || :                            &*
'&                         ||                              &*
'&                         ||                              &*
'&                         ||                              &*
'&                     . - || - .                          &*
'&                    (    ||    )                         &*
'&                     ) ( || ) (                          &*
'&                    /    ||    \                         &*
'&                   (     ||     )                        &*
'&                    `          `                         &*
'&                      ` ____ '                           &*
'&                                                         &*
'&               Jefferson Jimenez (JJJT)                  &*
'&                 Cabimas - Venezuela                     &*
'&                   Octubre - 2011                        &*
'&                                                         &*
'&                                                         &*
'&                                                         &*
'&                                                         &*
'&                                                         &*
'************************************************************
Function AlmacenoValor(Calculo As Double) As Long
Static Valor As Integer
If Calculo = 0 Then
Valor = 0
Exit Function
End If
Valor = Valor + Calculo
AlmacenoValor = Valor
End Function
Function SumaList(lista As ListBox, Columna As Double) As Double
Dim listsum As Double, x As Integer
With lista
  .Requery
  For x = 0 To .ListCount - 1
    listsum = listsum + Nz(.Column(Columna, x), 0)
  Next
End With
SumaList = listsum
End Function
Function OperacionConsulta() As String
'***********************************************************************************
'&                                                                                &*
'&                                                                                &*
'&                                                                                &*
'&                                                                                &*
'&                          Jefferson Jimenez (JJJT)                              &*
'&                            Cabimas - Venezuela                                 &*
'&                            Octubre - 2011                                      &*
'&                                                                                &*
'&                                                                                &*
'& Para llamar a esta funcion                                                     &*
'& Si es un Formulario o SubFormulario en el evento AlCargar                      &*
'& Me.RecordSource = OperacionConsulta                                            &*
'&                                                                                &*
'& Si es un Cuadro Lista o Combo                                                  &*
'& Me![El Cuadro].RowSource = OperacionConsulta                                   &*
'&                                                                                &*
'&                                                                                &*
'***********************************************************************************
 
On Local Error GoTo VerError
    OperacionConsulta = "SELECT Datos.Dato1,"
    OperacionConsulta = OperacionConsulta & "Datos.Dato2,"
    OperacionConsulta = OperacionConsulta & "[dato1]*[dato2]+AlmacenoValor((Nz(DLast(""[dato1] "",""Datos"",""Id="" & ([Id]-1)),0)*Nz(DLast(""[dato2] "",""Datos"",""Id="" & ([Id]-1)),0))) AS DatoX"
    OperacionConsulta = OperacionConsulta & " FROM Datos"
    OperacionConsulta = OperacionConsulta & " GROUP BY Datos.Dato1,"
    OperacionConsulta = OperacionConsulta & "Datos.Dato2,"
    OperacionConsulta = OperacionConsulta & "Datos.Id;"
    OperacionConsulta = OperacionConsulta & " "
Exit Function
VerError:
MsgBox "Error #  " & Err.Number & vbCrLf & Err.Description, vbInformation
End Function




Mas Ejemplos Access https://sites.google.com/site/jjjt1973/ejemplos-access

Otras cosillas en Access https://sites.google.com/site/jjjt1973/Home/agenda-de-cumpleanos


Saludos
Desde Venezuela
Jefferson Jimenez
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

Hacer aperaciones en una consulta

Publicado por Adcasor| (8 intervenciones) el 11/10/2011 16:36:16
Jefferson,

Te agradezco mucho la ayuda, pero me gustaría NO complicarme la existencia, apenas estoy empezando a trabajar con access, soy nuevo y no se muchas cosas, podría copiar tu ejemplo pero me gustaría mas hacerlo pero sobre todo entender lo que estoy haciendo.
Pero de cualquier forma te agradezco mucho tu ayuda.


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

Hacer aperaciones en una consulta

Publicado por jose (741 intervenciones) el 11/10/2011 10:39:32
SELECT Hoja1.BASE, Hoja1.CUOTA, [base]+[cuota] AS total1, [hoja1].[base]*(1.018) AS total2
FROM Hoja1;


en el campo campo de la consulta pones el nombre que tu quieras seguido de dos puntos, sino el te pone expresion1 RESULTADO:[NOMBREDETABLA].[CAMPODELATABLA] + [NOMBREDETABLA2].[CAMPODETABLA2]


TAMBIEN puedes poner resultado: [nombredetabla].[nombredecampo] * (1,018) -6 ........etc




en criterios se ponen las condiciones por ejemplo > 100

o bien hace referencia a un datos de un formulario , es muy común que el intervalo de las fecha se escriba en un formulario


entre [FORMULARIOS]![F-SACEF1-CONSULTA]![FECHAI] Y [FORMULARIOS]![F-SACEF1-CONSULTA]![FECHAF]


O BIEN UNA SIMPLE FECHA = [FORMULARIOS]![F-SACEF1-CONTROL1].[FE]
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

Hacer aperaciones en una consulta

Publicado por Adcasor (8 intervenciones) el 11/10/2011 17:34:34
José,

Muchas gracias por tu ayuda, lo que tu me comentas ya lo tengo lo que no se como hacer es sumar el ultimo valor
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

Hacer aperaciones en una consulta

Publicado por angelessebas (208 intervenciones) el 11/10/2011 18:10:21
Hola,

Siento decirte que esto no es posible en una consulta, tendrás que utilizar código, no muy complicado... pero código.

Si quieres hacerlo te puedo indicar como.

Saludos, Angeles

Página de supuestos y solucciones en access: http://angelessebas.es/

*** En esta página, en el apartado Bases de Datos, supuesto: Gestionar las entradas de Pagos, Cobros y Saldos para un código de usuario, tengo un ejemplo que... aunque es más complicado te puede servir, ya que al final lo que tu persigues es calcular, digamos, un saldo
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

Hacer aperaciones en una consulta

Publicado por Jefferson jefferson-jimenez@hotmail.com (381 intervenciones) el 11/10/2011 20:08:20
Te explico ....

Access no puede generar referencias circulares como lo hace Excel ....

Por ello debemos almacenar su valor en una variable estatica, para luego ir incrementando .

Este otro ejemplo https://sites.google.com/site/jjjt1973/Home/agenda-de-cumpleanos/OperacionConsulta2.rar?attredirects=0&d=1

que es lo mismo que el anterior, lo unico que he dejado es la Funcion AlmacenaValor y lo he trabajado en la consulta directamente.

Puedes ingresar cantidades en la consulta por ejemplo
1
2
3
'Dato1         Dato2         DatoX
'  2             2            y aca te aparecera el resultado
'                             (como si fuese excel)


Saludos
Desde Venezuela
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

Hacer aperaciones en una consulta

Publicado por adcasor (8 intervenciones) el 11/10/2011 22:08:14
Ángeles,

Claro que si me gustaría hacerlo, me puedes explicar ´para entender lo que hago y aprender

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

Hacer aperaciones en una consulta

Publicado por jose (741 intervenciones) el 12/10/2011 13:15:07
muy facil

mira a ver si funciona ésto


RESULTADO: ( [NOMBREDETABLA].[CAMPODELATABLA] + [NOMBREDETABLA2].[CAMPODETABLA2] ) * ([NOMBREDETABLA].[CAMPODELATABLA] + [NOMBREDETABLA2].[CAMPODETABLA2] )
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

Hacer aperaciones en una consulta

Publicado por angelessebas (208 intervenciones) el 13/10/2011 12:02:10
Hola,

Supongamos que la base se llama Datos, con los campos Dato1, Dato2 y DatoX, tendríamos que tener otro campo para poder ordenar la tabla, para que el actualizado salga como queremos, este campo lo llamaremos Id. Nos quedaria:

Id-Dato1-Dato2-DatoX
1....1- - - - -6- - - - -6
2....2- - - - -7- - - - -20
3....3- - - - -8- - - - -44
4....4- - - - -9- - - - -80
5....5- - - - -10- - - - -130
Lógicamente este campo también puede ser una fecha y lo ordenariamos por fecha.
Con el código que te pongo a continuación lo que hacemos es actualizar el campo DatoX con la fórmula dada:
En el código las lineas que van precedidas de ' son comentarios, no lineas de código ejecutables
Function CalcularAcumulado()
' Declaramos las variables
Dim db As Database
Dim rs As Recordset
Dim vDato As Double
' activamos la BD
Set db = CurrentDb
' Creamos el recordset
Set rs = db.OpenRecordset("Select Id, Dato1, Dato2, DatoX from Datos order by ID")
' Como estamos en el 1er registro del recordset, el campo DatoX tendrá el valor del campo Dato1*Dato2 sin sumarle nada
rs.Edit
rs!datoX = rs!dato1 * rs!dato2
rs.Update
' Recorremos el recordset mientras NO sea final de fichero (Not rs.EOF)
Do While Not rs.EOF
' Igualamos la variable vDato al valor del campo DatoX del registro en el que estamos
vDato = rs!datoX
' Pasamos al siguiente registro
rs.MoveNext
' si es final de fichero (rs.EOF) salimos del bucle
If rs.EOF Then
Exit Do
End If
' Calculamos el valor del campo DatoX para este registro y lo actualizamos
rs.Edit
rs!datoX = vDato + rs!dato1 * rs!dato2
rs.Update
Loop
End Function

Saludos, Angeles

Página de supuestos y solucciones en access: http://angelessebas.es/
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