Public Function completanros(strTabla As String, strCampo As String, _
Optional bool_entabla As Boolean, Optional bool_completar As Boolean)
'Función determinar números faltantes en una serie
'Elaborada por: EDUARDO PÉREZ FERNÁNDEZ
'Versión; 1.0
'Fecha: 08/09/2022
'Parámetros:
' strTabla ---> Nombre de la tabla
' strCampo ---> Nombre de la tabla que contiene la serie
' bool_entabla ---> Opcional, True, guarda los faltantes en tblfaltantes
' bool_completar ---> Opcional, True, Adicionar los faltantes en strTabla
'Ejemplos de llamada:
' 1. Obtener por pantalla los números faltantes
' completanros("tblrecibos2","codigo",False,False) o
' completanros("tblrecibos2","codigo")
' 2. Adicionar en la tabla tblfaltantes los números que faltan en las serie
' completanros("tblrecibos2","codigo",True,False) o
' completanros("tblrecibos2","codigo",True)
' 3. Adicionar en la tabla tblfaltantes y en strTabla los números que faltan en las serie
' completanros("tblrecibos2","codigo",True,True)
' 4. Adicionar en la tabla strTabla los números que faltan en las serie
' completanros("tblrecibos2","codigo",False,True) o
' completanros("tblrecibos2","codigo",,True)
On Error GoTo hay_error
Dim rst As DAO.Recordset
Dim num As Integer
Dim flag As Boolean
Dim dbID As Long
Dim strFaltan As String
Dim strSQL As String
CurrentDb.Execute "DELETE FROM tblfaltantes"
strSQL = "SELECT " & strCampo & " FROM " & strTabla & " ORDER BY " & strCampo & ""
Set rst = CurrentDb.OpenRecordset(strSQL)
For num = 1 To DMax(strCampo, strTabla)
flag = False
Do While Not rst.EOF
dbID = rst(0)
If dbID = num Then
flag = True
Exit Do
End If
rst.MoveNext
Loop
If flag = False Then
If bool_entabla Then
CurrentDb.Execute "INSERT INTO tblfaltantes(faltante) VALUES(" & num & ")"
End If
If bool_completar Then
rst.AddNew
rst(0) = num
rst.Update
End If
strFaltan = strFaltan & num & ","
End If
rst.MoveFirst
Next
rst.Close
Set rst = Nothing
If Len(strFaltan) = 0 Then
MsgBox "No faltan números en la serie", vbInformation, "Faltantes"
Exit Function
End If
If bool_entabla = False And bool_completar = False Then
If Len(strFaltan) > 0 Then
MsgBox Mid(strFaltan, 1, Len(strFaltan) - 1), vbInformation, "Faltantes"
End If
ElseIf bool_entabla = True And bool_completar = False And Len(strFaltan) > 0 Then
MsgBox "Se adicionaron los faltantes en la tabla tblfaltantes", vbInformation, "Faltantes"
ElseIf bool_entabla = False And bool_completar = True And Len(strFaltan) > 0 Then
MsgBox "Se adicionaron los faltantes en la tabla " & strTabla, vbInformation, "Faltantes"
Else
MsgBox "Se adicionaron los faltantes en las tablas tblfaltantes y " & strTabla, vbInformation, "Faltantes"
End If
hay_error_exit:
Exit Function
hay_error:
MsgBox "Ocurrió el error " & Err.Number & vbCrLf & vbCrLf & Err.Description, vbCritical, "Error..."
Resume hay_error_exit
End Function