Access - operar con dos campos de dos registros consecutivo

 
Vista:

operar con dos campos de dos registros consecutivo

Publicado por Angel Zalve (22 intervenciones) el 05/02/2008 22:50:07
Hola a todos de nuevo, estoy intentanto realizar una operación con los campos fecha de dos registros consecutivos, de tal forma que al realizar la diferencia entre ambas fechas, la introduzca en una variable que me sirva para una sql. Mi problema es que quiero que la diferencia la haga entre el registro en el que me encuentro y el anterior, y si decido pasarme a otro registro, realice dicha diferencia entre el que tiene el enfoque y el anterior. Lo estoy haciendo a través de un recordset, pero me estoy liando a la hora de poder acceder al registro anterior para compararlo, unas veces porque no hay ningún registro activo, otras directamente el recorset no se mueve al registro anterior, etc, etc. En fin me gustaría que me informarais sobre como realizar este procedimiento, os expongo el codigo que me esta dando problemas. PD, soy novato en Vba.

Private Sub id_salida_GotFocus()
Dim b As Database, reg As Recordset, d As Date, c As Date
Set b = CurrentDb
Set reg = b.OpenRecordset("prueba de salidas", dbOpenDynaset)
d = Me.Fecha
reg.MovePrevious
c = reg("fecha")
reg.Close
Dim z As Integer
z = d - c
Dim q As String, sql As QueryDef
Set sql = b.QueryDefs("PSII")..........
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

RE:operar con dos campos de dos registros consecut

Publicado por Victoria (1530 intervenciones) el 06/02/2008 12:15:42
Hola:

Tal como lo planteas, pero, sólo para dos registros, no para toda la tabla/consulta, es:

Dim mRs a Recordset
Dim mFecha as String

Set mRs=Currentdb.Openrecordset("nombreTabla...)

Ir mRs.RecordCount>0 then

mRs.MoveLast
mRs.MoveFirst 'Carga el recordset

mFecha=mRs!fecha

mRs.MoveNext

Me.campoForm=mRs!fecha - mFecha

End if

mRs.close

Un saludo

Victoria
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

RE:operar con dos campos de dos registros consecut

Publicado por Angel (22 intervenciones) el 06/02/2008 15:09:38
Muchas gracias Victoria, voy a ponerla en práctica. No obstante, ayer al terminar de escribir mi petición, ví en el foro una solución propuesta por tí a otra persona que me ha funcionado ha través de recordsetclone. Cuando la afine y la compare con la que me has proporcionado, lo escribo en el foro. Un saludo
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

RE:operar con dos campos de dos registros consecut

Publicado por JOSELO (232 intervenciones) el 06/02/2008 18:58:23
Hola Angel

Antes que nada solicito disculpas a Victoria (que es una genia) por entrometerme en su respuesta.

Personalmente utilizaría un bucle, mas o menos así. Habría que probarlo.

'abro el recordset
....

'Voy al ultimo registro
RS.MOVELAST

'Verifica la cantidad de registros
IF RS.RECORDCOUNT > 1 then
Contador = 2
'Inicio Bucle
DO
Contador = Contador + 1
'Voy al registro anterior
RS.MOVEPREVIOUS
'realizo calculos
.......

'Verifico Contador con cantidad registros
IF Contador = RS.RECORDCOUNT THEN
'Salgo del bucle
EXIT SUB
END IF
LOOP
END IF

Espero que sirva
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

RE:operar con dos campos de dos registros consecut

Publicado por Angel Zalve (22 intervenciones) el 24/02/2008 18:50:53
Hola Victoria, probé el código que me proponías, pero con él lo único que puedo comparar son el primero y segundo registro del recordset, cuando cambio a cualquier otro recorset, me siguen apareciendo las fechas del primero y segundo recordset. Yo lo que necesito es que me situe en el registro que me situe, me compare el campo fecha de dicho registro y el anterior.
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

RE:operar con dos campos de dos registros consecut

Publicado por Angel Zalve (22 intervenciones) el 24/02/2008 18:53:19
Perdona, donde dice "cuando cambio a cualquier otro recordset..." quería decir cualquier otro registro.
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

RE:Nuevos problemas

Publicado por Angel Zalve (22 intervenciones) el 26/02/2008 22:12:42
Por fin consegui resolver lo de la comparación de dos registros consecutivos.

Dim reg As Recordset, d As Date, c As Date, x As Integer
Set reg = Form_Formulario12.RecordsetClone
x = Form_Formulario12.CurrentRecord
If x = 1 Then
reg.MoveLast
reg.MoveFirst
reg.MoveNext
c = reg("fecha")
reg.MovePrevious
d = reg("fecha")
Else
reg.AbsolutePosition = x
c = reg("Fecha")
reg.MovePrevious
d = reg("Fecha")
End If
reg.Close

La consulta que tengo asociada es la siguiente:

Me.cuadrocombinado.RowSource = "SELECT ...HAVING ... And (([Mitabla].Fecha) Between #" & DateValue(d) & "# And #" & DateValue(c) & "#) ....;"

El cuadro combinado no me funciona, porque la variable "d", no la reconoce de ninguna forma y os cuento lo que he intentado:
1 Si la coloco sin las almohadillas pero con datevalue, no reconoce la fecha y en el cuadro combinado me salen disparates, aunque la consulta en la vista hoja de datos aparece perfecta.
2 Si le coloco las almohadillas sin date value, me da como resultado mm/dd/aa en la vista diseño y en la vista sql lo interpreta mal, por lo tanto lo mismo.
Y lo mas curioso es que con la variable "c" que es del mismo tipo no he tenido ningun problema.
Por favor alquien me podría orientar
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