Access - Actualización de una tabla con los datos de otra tabla

 
Vista:
sin imagen de perfil

Actualización de una tabla con los datos de otra tabla

Publicado por Mercedes (22 intervenciones) el 15/09/2022 22:08:57
Agradeceré ayuda con este tema ya que, la función que utilizo funciona correctamente con dos tablas pero cuando creo otra función igual en el mismo procedimiento (botón del formulario) con otras tablas se produce el siguiente error: “Se ha producido el error 3021 en tiempo de ejecución: No hay ningún registro activo.
La función que da error se llama ProcesarIPC() y usa los campos fecha e índice que se encuentran en la tabla “IndiceIPC” para actualizar la tabla “PrecEsp-Actualizaciones” donde la fecha la de primera coindice con la fecha de la segunda tabla.
La otra función actualiza con una formula el campo FeXIPC de la tabla “PrecEsp-Actualizaciones” que se utiliza luego en la función ProcesarIPC()
_____________________________________________________________________
Private Function ProcesarIPC()
Dim MiSql As String
Dim rstPE As dao.Recordset
Dim rstIPC As dao.Recordset
Dim TIPCf as date
Dim TIPC As Double
Dim FechaXIPC As Date
MiSql = "SELECT * FROM [PrecEsp-Actualizaciones] WHERE IdProcEsp <> 0"
Set rstPE = CurrentDb.OpenRecordset(MiSql)

rstPE.MoveFirst

While Not rstPE.EOF
FechaXIPC = rstPE!FeXIPC

Set rstIPC = CurrentDb.OpenRecordset("SELECT Mes, IPC FROM IndiceIPC
WHERE Mes = #" & FechaXIPC & "#")
rstIPC.Edit
TIPCf = rstIPC!Mes
TIPC = rstIPC!IPC
rstPE.Edit
rstPE!FeIPC = TIPCf
rstPE!IPC = TIPC
rstPE.Update

rstPE.MoveNext

Wend

rstPE.Close
rstIPC.Close
Set rstPE = Nothing
Set rstIPC = Nothing

End Function
____________________________________________________________________
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

Actualización de una tabla con los datos de otra tabla

Publicado por Anonimo (3316 intervenciones) el 16/09/2022 00:09:52
Si lo publicado es fiel, has roto una linea y tendras un error.

Te copio la funcion que deberia funcionar sin problemas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Function ProcesarIPC()
Dim rstPE As DAO.Recordset, rstIPC As DAO.Recordset
Set rstPE = CurrentDb.OpenRecordset("SELECT * FROM [PrecEsp-Actualizaciones] WHERE IdProcEsp <> 0")
If rstPE.RecordCount <> 0 Then rstPE.MoveLast: rstPE.MoveFirst
While Not rstPE.EOF
    Set rstIPC = CurrentDb.OpenRecordset("SELECT Mes, IPC FROM IndiceIPC WHERE Mes = #" & rstPE!FeXIPC & "#")
    rstPE.Edit
    rstPE!FeIPC = rstIPC!Mes
    rstPE!IPC = rstIPC!IPC
    rstPE.Update
    rstPE.MoveNext
    Wend
rstPE.Close
rstIPC.Close
Set rstPE = Nothing
Set rstIPC = Nothing
End Function


Tengo serias dudas con esta condición: Mes = #" & rstPE!FeXIPC & "#", si ambos campos son de fecha (fecha Access: con su día mes y año) no serán necesarias las almohadillas (#) que son los indicadores de que el texto que contienen se interprete como fecha y (debería ir) en formato americano.

Como al otro término de la comparación se le denomina 'MES', otra duda es si 'MES' es una fecha o parte de una fecha y si es un numero o un texto ...
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

Actualización de una tabla con los datos de otra tabla

Publicado por Eduardo (317 intervenciones) el 16/09/2022 03:10:19
Pruebe con este código, pero también me queda la duda del MES

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
Private Function ProcesarIPC()
Dim MiSql As String
Dim rstPE As dao.Recordset
Dim rstIPC As dao.Recordset
Dim TIPCf As Date
Dim TIPC As Double
Dim FechaXIPC As Date
 
MiSql = "SELECT * FROM [PrecEsp-Actualizaciones] WHERE IdProcEsp <> 0"
Set rstPE = CurrentDb.OpenRecordset(MiSql)
 
If rstPE.BOF() And rstPE.EOF Then
   Exit Function
End If
 
 
Do Until rstPE.EOF
 
    FechaXIPC = rstPE!FeXIPC
 
    Set rstIPC = CurrentDb.OpenRecordset("SELECT Mes, IPC FROM IndiceIPC WHERE Mes = #" & FechaXIPC & "#")
 
    If rstIPC.BOF And rstIPC.EOF Then
      rstPE.MoveNext
    End If
 
    rstPE.Edit
    TIPCf = rstIPC!Mes ' REVISAR Asignó a TIPCf como Date y está pasando un número o una cadena
    TIPC = rstIPC!IPC
    rstPE!FeIPC = TIPCf
    rstPE!IPC = TIPC
    rstPE.Update
 
    rstPE.MoveNext
 
    rstIPC.Close
Loop
 
rstPE.Close
Set rstPE = Nothing
Set rstIPC = Nothing
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
sin imagen de perfil

Actualización de una tabla con los datos de otra tabla

Publicado por Mercedes (22 intervenciones) el 19/09/2022 17:45:43
Agradezco mucho sus respuestas por el tiempo que se toman para analizar y resolver las consultas y por lo mucho que estoy aprendiendo.
Dada las dudas respecto al campo Mes y el comentario de Eduardo que a la variable declarada como “Date” le estaba pasando un número, verifique la tabla y el tipo de datos estaba bien (Fecha/Hora – Fecha Corta) pero, como los datos de esa tabla (“IndiceIPC”) se obtienen por un proceso de importación y actualización de un archivo Excel, el campo “Mes” almacenó un número en lugar de una fecha y por esa razón no funcionaba el proceso.
Ya lo solucione, cambiando el tipo de datos del campo después de la importación.
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

Actualización de una tabla con los datos de otra tabla

Publicado por Anonimo (3316 intervenciones) el 19/09/2022 18:03:39
Una fecha es un número que se visualiza en función de unos cálculos internos, pero es un numero (con parte decimal si tiene hora), un ejemplo:

1
2
3
4
5
6
7
Public Function ControlFecha()
 Dim FechaXIPC As Date, Bucle As Long
 For Bucle = 1 To 20
    FechaXIPC = Bucle ^ 4
    Debug.Print Bucle, Bucle ^ 4, FechaXIPC
    Next Bucle
 End Function

Resultados:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1             1            31/12/1899
 2             16           15/01/1900
 3             81           21/03/1900
 4             256          12/09/1900
 5             625          16/09/1901
 6             1296         19/07/1903
 7             2401         28/07/1906
 8             4096         19/03/1911
 9             6561         17/12/1917
 10            10000        18/05/1927
 11            14641        31/01/1940
 12            20736        08/10/1956
 13            28561        12/03/1978
 14            38416        05/03/2005
 15            50625        08/08/2038
 16            65536        05/06/2079
 17            83521        01/09/2128
 18            104976       30/05/2187
 19            130321       20/10/2256
 20            160000       23/01/2338
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
sin imagen de perfil

Actualización de una tabla con los datos de otra tabla

Publicado por Mercedes (22 intervenciones) el 19/09/2022 21:06:30
Gracias por tu respuesta.
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