Funciones de Autonumericos en VBA para ACCESS
Funciones de Autonumericos en VBA para ACCESS
Funciones de Autonumericos en VBA para ACCESS
parmetros
Funcin que calcula el valor mximo de una tabla y un campo pasados como
parmetros, teniendo en cuenta el prefijo del campo
Funcin que calcula el valor mximo de una tabla de detalle segn el valor de la tabla
principal
Funcin que calcula el valor mximo de una tabla y un campo pasados como
parmetros, teniendo en cuenta el Sufijo del campo
Funcin que busca el primer nmero de orden libre en la tabla y campo pasados
como parmetros
Funcin que busca el prximo nmero a partir de una tabla de registro de ltimo
nmero usado, especialmente til cuando los usuarios son muchos
Funcin que genera aleatoriamente y dentro de un rango un valor, verificando que
no exista en el campo de la tabla indicados
'************************************************************************
***********
'* Funcin que calcula el valor mximo de una tabla y un campo pasados
como parmetros
'* uso: AutoNumerico("Pendientes","id")
'* ESH 09/09/00 15:50
'************************************************************************
***********
Public Function AutoNumerico(strTabla As String, strCampo As String) As
Integer
Dim dbs As Database, _
rst As Recordset, _
strMaximo As String
' creo una cadena con la select para obtener el valor ms alto del campo
strMaximo = "SELECT Max(" & strCampo & ") as Mayor FROM
" & strTabla
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(strMaximo)
' abro un recordset con esa
cadena
If IsNull(rst!Mayor) Then
AutoNumerico = 1
' si la tabla est vaca
Else
AutoNumerico = rst!Mayor + 1
' devuelvo el valor incrementado
en uno
End If
' cierro el recordset
rst.Close
Set rst = Nothing
Set dbs = Nothing
End Function
' AutoNumerico
Volver arriba
'************************************************************************
***********
'* Funcin que calcula el valor mximo de una tabla y un campo pasados
como parmetros,
'* teniendo en cuenta el prefijo del campo, que ir separado por una
"/".
'* el campo deber ser de texto
'* uso: AutoNumerico2("Pendientes","id")
Volver arriba
'************************************************************************
***********
'* Funcin que calcula el valor mximo de una tabla (LineasFactura) y un
campo (Linea),
'* para un campo clave (NumFactura) que cumple una condicin (01-2001)
'* es el caso tpico de numeracin de lneas de factura
o boletn.
'* uso: txtNumero = AutoNumerico3("LineasFactura", "Linea", "NumFactura",
"01-2001")
'* ESH 01/05/01 10:32
'************************************************************************
***********
Public Function AutoNumerico3(strTabla As String, strCampo As String,
strClave As String, strValorClave As String) As Integer
Volver arriba
'************************************************************************
***********
'* Funcin que calcula el valor mximo de una tabla y un campo pasados
como parmetros,
'* teniendo en cuenta el Sufijo del campo, que ir separado por un "-".
'* el campo deber ser de texto
'* uso: AutoNumerico4("Pendientes","id")
'* Para tablas nuevas o cambio de sufijo, se puede pasar un sufijo
opcional (sin "-")
'* en cuyo caso comienza a contar desde 1
'* uso: AutoNumerico4("Pendientes","id", "2002")
'* ESH 09/05/01 18:15
'************************************************************************
***********
Public Function AutoNumerico4(strTabla As String, strCampo As String,
Optional strSufijo As String) As String
Dim dbs As Database, _
rst As Recordset, _
strMaximo As String
Set dbs = CurrentDb
If strSufijo = "" Then
Set rst = dbs.OpenRecordset(strTabla, dbOpenDynaset)
If Not rst.EOF() And Not rst.BOF() Then
rst.MoveLast
strSufijo = Right(rst(strCampo), InStr(rst(strCampo), "-"))
rst.Close
End If
' Not rst.EOF() And Not rst.BOF()
Else
AutoNumerico4 = "0001-" & strSufijo
Exit Function
End If
' strSufijo = ""
' creo una cadena con la select para obtener el valor ms alto del campo
Volver arriba
'************************************************************************
***********
'* funcin que busca el primer nmero de orden libre en la tabla
y
campo pasados como parmetros
'* uso: intCodigo = BuscarLibre("Tabla1","id")
'* ESH 10/04/01 18:35
'************************************************************************
***********
Public Function BuscarLibre(strTabla As String, strCampo As String) As
Long
' declaraciones
Dim dbs As Database
rst As Recordset
strSQL As String
lngAnterior As Long
' crear recordset
strSQL = "SELECT " & strCampo & " FROM " & strTabla & " ORDER BY " &
strCampo & " ASC"
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)
lngAnterior = 1
' busco el primer hueco libre
With rst
' si la tabla est vaca
If .EOF And .BOF Then
BuscarLibre
= 1
Exit Function
Else
' si el primer registro es distinto de 1
If rst(strCampo) > 1 Then
BuscarLibre = 1
Exit Function
End If
' (IsNull(rst(strCampo)) Or rst(strCampo) > 1)
End If
' Not .EOF And Not .BOF
' si el primer registro esta vaco
If IsNull(rst(strCampo)) Then
Volver arriba
'************************************************************************
*******
'* Autonumerico5
'* Calcula el prximo nmero a asignar a un registro, partiendo del
almacenado
'* en una tabla Numeros cuya estructura ser
'*
Campo Tabla
Alfanumrico Indexado sin duplicados
'*
Campo Numero
Entero Largo
'* dicha tabla contendr un registro para cada tabla que cuente con un
'* campo autonumrico controlado
'* Argumentos:
'* uso: Autonumerico5 "Facturas"
'* ESH 31/08/04 18:39
'************************************************************************
*******
Private Function Autonumerico5(strTabla As String) As Long
Dim rst As DAO.Recordset, _
strSQL As String, _
lngNumero As Long
' abro un recordset con el ultimo nmero guardado
On Error GoTo Autonumerico5_TratamientoErrores
strSQL = "SELECT * FROM Numeros WHERE Tabla = '" & strTabla & "'"
Volver arriba
'************************************************************************
*******
'* AutoNumericoAleatorio
'* genera un nmero aleatorio dentro del rango solicitado verificando que
no
'* exista previamente en el campo y tabla indicadas
'* Argumentos: strTabla
'*
strCampo
'*
'*
Exit Do
End If ' si ya existe lo intento de nuevo
Loop Until 0 = 1
Else ' si no hay registros genero aleatoriamente un valor dentro del
rango indicado
AutoNumericoAleatorio = Int((lngMaximo - lngMinimo + 1) * Rnd +
lngMinimo)
End If
AutoNumericoAleatorio_Salir:
On Error Resume Next
' cierro el recodset
If Not rst Is Nothing Then
rst.Close
Set rst = Nothing
End If
On Error GoTo 0
Exit Function
AutoNumericoAleatorio_TratamientoErrores:
MsgBox "Error " & Err.Number & " en proc.: AutoNumericoAleatorio de
Mdulo: Mdulo1 (" & Err.description & ")", vbCritical + vbOKOnly,
"ATENCION"
Resume AutoNumericoAleatorio_Salir