Access - Recordset

 
Vista:

Recordset

Publicado por ELIDIO (9 intervenciones) el 07/12/2022 17:40:31
Hola buenas tardes.

Tengo un problema con un recordset, nose que me puede estar pasando, me dice que no esta declarada la funcion o procedimiento, sera que me falta marcar alguna referencia? aqui les dejo el codigo, muchas gracias

Dim rst As DAO.Recordset
Dim a As String

Set rst = CurrentDb.OpenRecordset("SELECT * FROM tablaaltairfinal", dbOpenTable)
rst.MoveLast
rst.MoveFirst

Do While rst.EOF = False

a = rst!fechafin
a = a + 1

  rst!fechafin = a

rst.Update
rst.MoveNext

DoEvents

Loop

rst.Close
Set rst = Nothing
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
Imágen de perfil de Eduardo

Recordset

Publicado por Eduardo (317 intervenciones) el 07/12/2022 17:57:09
Esta guardando en a una cadena y asumo que es una fecha. ¿Para que usa DoEvents?

Cambie Do While

por

Do Until rst.EOF()



Loop
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

Recordset

Publicado por ELIDIO (9 intervenciones) el 07/12/2022 18:03:13
Hola Eduardo, gracias por tu respuesta, si a es un valor fecha, lo unico que me queda es darle formato, DoEvents es para que se dedique la While ya que la tabla es un pelin grande, respecto al tema de la variable "a" la he quitado del codigo y me sigue dando error.
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
Imágen de perfil de Eduardo

Recordset

Publicado por Eduardo (317 intervenciones) el 07/12/2022 19:48:10
No es darle formato es definirla como tipo Date. ¿En qué línea está el error?
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

Recordset

Publicado por Anonimo (3316 intervenciones) el 07/12/2022 20:56:42
Hay al menos un par de errores:

.- Utilizar la variable (de tipo inadecuado y además innecesaria)
.- No se puede actualizar un registro que antes no se 'abrió' para editar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Function xxx()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT * FROM tablaaltairfinal", dbOpenTable)
If rst.RecordCount = 0 Then Exit Function '(... o lo que sea, no hay datos no tiene sentido continuar)
With rst
.MoveLast: .MoveFirst
Do Until .EOF
.Edit
!fechafin = !fechafin + 1
.Update
.MoveNext
Loop
.Close
End With
Set rst = Nothing
End Function

Con DoEvents se tardara mas tiempo, solo es útil si se necesita hacer algo mas al tiempo que el código esta trabajando (pero lo esta interrumpiendo continuamente para permitir la interrupción)

Este bucle incrementa en una unidad el contenido del campo sea fecha o un numero (si es una fecha, en un día)
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
Imágen de perfil de Eduardo

Recordset

Publicado por Eduardo (317 intervenciones) el 07/12/2022 21:52:25
No necesita código puede actualizar con UPDATE, algo como:

1
CurrerntDB.Execute "UPDATE tablaaltairfinal SET fechafin=fechafin+1;"
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

Recordset

Publicado por ELIDIO (9 intervenciones) el 08/12/2022 12:02:03
Buenos dias, gracias a ambos por vuestro tiempo y respuesta, no puedo decir que funciona aun, ya que me esta dando el fatidico error 3011, estoy usando office 365 y el fomato es Acces 2007-2016, tengo tablas vinculadas ODBC sobre las que genero consultas y me creo tablas, para trabajar sobre estas, realizando consultas e informes, etc, la tabla en cuestion ( " tablaaltairfinal " ) sobre la que quiero modificar el campo fecha ( " fechafin " ), esta creada desde una consulta creacion de tabla, y bueno ahora estoy buscando como puedo solucionar este error, y la verdad no me queda muy claro, nose si tenga que ver porque tiene tablas vinculadas.
Muchas gracias,
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
Imágen de perfil de Eduardo

Recordset

Publicado por Eduardo (317 intervenciones) el 08/12/2022 13:51:45
Si la tabla se crea localmente no tiene nada que ver ODBC (Personalmente es el que utilizo con PostgreSQL y Access). El problema está en Opentable, debe suprimirlo. Lo probé creando la tabla con una consulta de una tabla vinculada a PostgreSQL y efectivamente me arroja error con OPENTABLE. Me funcionó de las 2 formas siguientes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Function cambia_fecha_1()
 
  Dim rs As DAO.Recordset
 
  Set rs = CurrentDb.OpenRecordset("SELECT * FROM tablaaltairfinal")
 
  Do Until rs.EOF
   rs.Edit
   rs!fechafin = rs!fechafin + 1
   rs.Update
    rs.MoveNext
  Loop
 
 rs.Close
 Set rs = Nothing
 
End Function
Function cambia_fecha_2()
 
  CurrentDb.Execute "UPDATE tablaaltairfinal SET fechafin=fechafin+1"
 
End Function

Puede utilizar cualquiera de las 2 funciones.

Creo que el error está en la versión de Access, al probarlo con Access 2016 me arroja error con dbOpentable.
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

Recordset

Publicado por ELIDIO (9 intervenciones) el 08/12/2022 16:37:49
Eduardo geniallll, muchas gracias, perfecto, funciona de las 2 formas, muy agradecido por tu tiempo
Agradecido a ambos, me quedo con la opcion de Eduardo, menos lineas de comando y aprendi a hacerlo de otra forma sin usar recordset
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