Access - como manejo el error

 
Vista:

como manejo el error

Publicado por yanira (140 intervenciones) el 15/11/2006 15:07:54
En la funcion de la parte inferior toma los datos de una consulta y actualiza una tabla, pero cuando en la consulta vienen campos vacios detiene el cargue como hago para que no lo detenga y continue con el siguiente registro.

Function InsertarNovedades2() As Integer

Dim DB As Database
Dim tabla As DAO.Recordset
Dim Consulta As QueryDef
Dim Agregar As QueryDef
Dim Texto As String
Dim Resultado As String 'Número de registros insertados

Set DB = CurrentDb()
Texto = "SELECT * FROM [Cargue Novedades]"
Set Consulta = DB.CreateQueryDef("", Texto)
Set tabla = Consulta.OpenRecordset

Resultado = 0

If (tabla.BOF = True) Then
Resultado = 0
Else
With tabla
Do While Not .EOF
Texto = "PARAMETERS FINICIAL DateTime, FFINAL DateTime; " & _
"INSERT INTO NOVEDADES (IDNovedad,IDTipoDoc,NumDocumento,IDTipoPersona,DANE,Institucion,IDTipoNovedad,FechaInicio,FechaFin,IDArea,IDNivel,IDJornada,Sede,Observaciones,Usuario) " & _
"VALUES (" & ConsecutivoNovedad() & "," & .Fields("TipoDoc") & "," & .Fields("Documento") & "," & .Fields("TipoPer") & ",'" & .Fields("CodDANE") & "','" & .Fields("Colegio") & "','" & .Fields("Novedad") & "',[FINICIAL],[FFINAL],'" & .Fields("IDArea") & "'," & .Fields("IDNivel") & "," & .Fields("IDJornada") & ",'" & .Fields("Sede") & "','" & .Fields("Obs") & "','" & .Fields("Usu") & "')"
Set Agregar = DB.CreateQueryDef("", Texto)
Agregar.Parameters![FINICIAL] = .Fields("Inicio")
Agregar.Parameters![FFINAL] = .Fields("Fin")
Agregar.Execute
Resultado = Resultado + 1
.MoveNext
Loop
End With

End If
InsertarNovedades2 = Resultado

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
Imágen de perfil de Alejandro

Cargar Novedades con verificación de campos vacíos

Publicado por Alejandro (4142 intervenciones) el 28/07/2023 16:56:52
Para evitar que el proceso de carga se detenga cuando los campos estén vacíos en la consulta, puedes modificar la función VBA para que verifique si los campos tienen un valor antes de realizar la inserción en la tabla "NOVEDADES". Puedes utilizar la función "IsNull" para verificar si un campo es nulo o no antes de agregarlo a la consulta INSERT INTO.

Aquí te muestro cómo modificar la función para evitar detener el cargue por campos vacíos:

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
Function InsertarNovedades2() As Integer
 
    Dim DB As Database
    Dim tabla As DAO.Recordset
    Dim Consulta As QueryDef
    Dim Agregar As QueryDef
    Dim Texto As String
    Dim Resultado As Integer ' Número de registros insertados
 
    Set DB = CurrentDb()
    Texto = "SELECT * FROM [Cargue Novedades]"
    Set Consulta = DB.CreateQueryDef("", Texto)
    Set tabla = Consulta.OpenRecordset
 
    Resultado = 0
 
    If (tabla.BOF = True) Then
        Resultado = 0
    Else
        With tabla
            Do While Not .EOF
                ' Verificar si los campos son nulos antes de agregarlos a la consulta INSERT INTO
                If Not IsNull(.Fields("TipoDoc")) And Not IsNull(.Fields("Documento")) And Not IsNull(.Fields("TipoPer")) And Not IsNull(.Fields("CodDANE")) And Not IsNull(.Fields("Colegio")) And Not IsNull(.Fields("Novedad")) And Not IsNull(.Fields("Inicio")) And Not IsNull(.Fields("Fin")) And Not IsNull(.Fields("IDArea")) And Not IsNull(.Fields("IDNivel")) And Not IsNull(.Fields("IDJornada")) And Not IsNull(.Fields("Sede")) And Not IsNull(.Fields("Obs")) And Not IsNull(.Fields("Usu")) Then
                    Texto = "PARAMETERS FINICIAL DateTime, FFINAL DateTime; " & _
                            "INSERT INTO NOVEDADES (IDNovedad,IDTipoDoc,NumDocumento,IDTipoPersona,DANE,Institucion,IDTipoNovedad,FechaInicio,FechaFin,IDArea,IDNivel,IDJornada,Sede,Observaciones,Usuario) " & _
                            "VALUES (" & ConsecutivoNovedad() & "," & .Fields("TipoDoc") & "," & .Fields("Documento") & "," & .Fields("TipoPer") & ",'" & .Fields("CodDANE") & "','" & .Fields("Colegio") & "','" & .Fields("Novedad") & "',[FINICIAL],[FFINAL],'" & .Fields("IDArea") & "'," & .Fields("IDNivel") & "," & .Fields("IDJornada") & ",'" & .Fields("Sede") & "','" & .Fields("Obs") & "','" & .Fields("Usu") & "')"
                    Set Agregar = DB.CreateQueryDef("", Texto)
                    Agregar.Parameters![FINICIAL] = .Fields("Inicio")
                    Agregar.Parameters![FFINAL] = .Fields("Fin")
                    Agregar.Execute
                    Resultado = Resultado + 1
                End If
                .MoveNext
            Loop
        End With
    End If
 
    InsertarNovedades2 = Resultado
 
End Function

Con esta modificación, la función solo insertará los registros en la tabla "NOVEDADES" si los campos relevantes (aquellos utilizados en la consulta INSERT INTO) no son nulos. Si alguno de los campos está vacío, se omitirá ese registro y se continuará con el siguiente sin detener el proceso.

Espero que esta solución te sea útil para evitar detener el cargue por campos vacíos en la consulta. ¡Buena suerte!
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