Como utilizar un recordset en access 2016

Disculpen estoy tratando de realizar algunas operaciones dentro de una tabla de access, mediante un recordset, pero como no tengo muchos conocimientos sobre el tema no se que estaré haciendo mal que al ejecutar el proceso me genera registros en blanco y deja de generar hasta que yo lo detengo, la tabla con la que estoy intentando hacer el proceso únicamente contiene 3000 registros.

Alguien que me pueda orientar o decirme donde puedo encontrar algunos ejemplos de recordset para adptarlos. Mi proceso es el siguiente

Dim Rst As DAO.Recordset

Dim mesesadp As Integer

Dim mestr As Integer

Dim depmen As Integer

Dim txtDepacumulada As Integer

    Set Rst1 = CurrentDb.OpenRecordset("ACTIVOS", dbOpenDynaset, dbsschanges)

    Do While Not Rst.EOF

   mestr = DateDiff("m", FechaC, Now)

depmen = PrecioC * PorDep / 12

 mesesadp = VidaU * 12

     If mestr > mesesadp Then

     txtDepAcumulada = meseadp * depmen

      Else

      txtDepAcumulada = mestr * depmen

      Rst.AddNew

       Rst!DepAcumulada = txtDepacumulada

           Rst1.Update     'Grabamos el registro

        'Para cada registro de la tabla origen

    End If

        Rst1.MoveNext       'Pasamos al siguiente registro de la tabla origen

        DoEvents           

    Loop

       Rst1.Close  'Cerramos los recordsets

     Set Rst1 = Nothing  'Vaciamos las variables

1 Respuesta

Respuesta
1

En el código, al menos tal y como lo has puesto aquí, tienes varios errores:

1º/ Declaras el recordset como Dim Rst As DAO. Recordset, pero luego no usas esa variable, sino otra llamada Rst1, que no está declarada.

2º/ Cuando seteas el recordset, pones: Set Rst1 = CurrentDb.OpenRecordset("ACTIVOS", dbOpenDynaset, dbsschanges)

cuando debería ser: Set Rst1 = CurrentDb.OpenRecordset("ACTIVOS", dbOpenDynaset, dbSeeChanges)

3º/ No me queda claro si las operaciones las haces con los valores de controles e un formulario (lo que no le veo sentido, pues todos los registros llevarían los mismos valores), o deben de coger los datos de los propios campos del recordset. En ese caso tienes que hacer referencia a ellos así:

depmen = Rst1("PrecioC") * Rst1("PorDep") / 12

o así:

depmen = Rst1!PrecioC * Rst1!PorDep / 12

O con cualquier otra sintaxis válida (hay alguna más)

4º/ Si te crea registros en blanco es porque la variable txtDepacumulada no tiene valor, probablemente por lo dicho en le punto anterior.

5º/ El DoEvents no lo necesitas para nada.

6º/ Por otro lado, y fuera de lo que es el manejo del recordset, tienes lo que creo que es un error de bulto, pues la parte de crear el registro nuevo y asignarle un valor, la tienes dentro del bloque If Then en vez de fuera, por lo que solo te creará registros cuando se cumpla que mestr <= mesesadp (y no sé si es lo que quieres o no).

Por la lógica que sigue el código, ya que le das diferentes valores a txtDepacumulada en función del resultado de la comparación del IF, lo suyo sería que las líneas que van desde el Rst1. AddNew hasta el Rst1.Update fueran después del End If y antes del Rst1. MoveNext

¡Gracias! He realizado cada punto de tu recomendación y he obtenido lo que necesitaba, muchas gracias por tu valioso apoyo. Saludos 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas