Visual Basic - Error 3021 No hay ningún registro activo. (Access)

Life is soft - evento anual de software empresarial
 
Vista:

Error 3021 No hay ningún registro activo. (Access)

Publicado por Hev (1 intervención) el 12/07/2021 14:20:03
Hola! Estoy intentando hacer un código VBA en el que comparando 2 tablas inserto en la segunda tabla solamente los campos no repetidos de la primera tabla. Al ejecutar el codigo obtengo el error del titulo.
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
Public Function InsertarRegistros()
Dim str As String
Dim Registro As Integer
Dim EmpresaAvisado As String, ArticuloAvisado As String, FechaAvisado As String
Dim EmpresaFiltro As String, ArticuloFiltro As String, FechaFiltro As String
Dim Repetido As String
Repetido = "Repetido"
Registro = 0
 
Set rst1 = CurrentDb.OpenRecordset("Filtro")
Set rst2 = CurrentDb.OpenRecordset("Avisado")
 
rst1.MoveFirst
Do While Not rst1.EOF
    rst2.MoveFirst
    Do While Not rst2.EOF
        EmpresaAvisado = rst2.Empresa
        EmpresaFiltro = rst1.Empresa
        ArticuloAvisado = rst2.Artículo
        ArticuloFiltro = rst1.Artículo
        FechaAvisado = rst2.Fecha
        FechaFiltro = rst1.Fecha
        If EmpresaAvisado <> EmpresaFiltro And ArticuloAvisado <> ArticuloFiltro And FechaAvisado <> FechaFiltro Then
            Registro = Registro + 1
            rst2.AddNew
            rst2.Empresa = rst1.Empresa
            rst2.Artículo = rst1.Artículo
            rst2.Fecha = rst1.Fecha
            rst2.Validacion = rst1.Validacion
            rst2.Update
            rst1.MoveNext
        End If
        rst2.MoveNext
    Loop
    rst1.MoveNext
Loop
'-------------------------------------------------------------------------------------
MsgBox ("Se han insertado " & Registro & " registros en Avisado")
 
rst1.Close
rst2.Close
 
Set rst1 = Nothing
Set rst2 = Nothing
 
End Function
¿Alguien sabe a que se debe el problema y como debo solucionarlo?
Un saludo.
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

Error 3021 No hay ningún registro activo. (Access)

Publicado por Alfredo Gómez (1 intervención) el 12/07/2021 15:38:15
Saludos
1
2
3
4
5
6
7
8
9
10
If EmpresaAvisado <> EmpresaFiltro And ArticuloAvisado <> ArticuloFiltro And FechaAvisado <> FechaFiltro Then
            Registro = Registro + 1
            rst2.AddNew
            rst2.Empresa = rst1.Empresa
            rst2.Artículo = rst1.Artículo
            rst2.Fecha = rst1.Fecha
            rst2.Validacion = rst1.Validacion
            rst2.Update
            rst1.MoveNext --Este está de más y te puede estar causando el problema de no comparar todo los registros
End If

Para generar una respuesta siempre evalúa el estado del objeto (vació, lleno, etc.)
MsgBox ("Se han insertado " & Registro & " registros en Avisado")
mejor es evaluar el recordset con un recordcount() para ver su estado real.
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

Error 3021 No hay ningún registro activo. (Access)

Publicado por Raúl Mejía (22 intervenciones) el 12/07/2021 21:00:15
Buenas tardes Hev.

De acuerdo a mis conocimientos creo que lo ideal sería leer la base de datos Filtro registro por registro y buscar en la base de datos Avisado, si existe el registro si no es así, con un update grabas el registro y efectivamente como dice Alfredo Gómez el move next está de más porque el While y el Loop hacen el ciclo de leer cada registro automáticamente.
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