Saltar al contenido

codigo alfanumerico autogenerado consecutivo


Recommended Posts

publicado

Buenas tardes tengo una base de datos y deseo que se visualize el ultimo codigo al momento de guardar la info, sabiendo que el tipo de dato en la base de datos es nvarchar como hago para que sea asi: Fact-0001,Fact -0002,Fact -0003,etc etc 

 

Set rst = New ADODB.Recordset
rst.ActiveConnection = con
rst.Source = "Select Max(Codigo_nota) As Maximo From Tabla"
rst.Open
If rst.Fields(0) > 0 Then
    For i = 1 To rst.Fields("Maximo") + 1    
    Next

endif

con.Close
If Not rst Is Nothing Then Set rst = Nothing
If Not con Is Nothing Then Set con = Nothing

publicado

Hola @pajuma

Max es una función que devuelve el valor máximo de un campo especifico en una tabla. Ejemplo:

Select Max(Id_Numero_Control) As M From Mi_Tabla

Si lo que deseas es que se muestre de este modo : Fact-0001, pues solo debes concatenar el resultado de la consulta. algo así como

 "Fact-" & Format(Rs.Fields("M"), "0000")

Espero te sea útil la sugerencia.

 

Saludos.

publicado

Buenas @pajuma

Cita

Sub ValorMaximo()
    Dim strSQL  As String
    Dim strCnn  As String
    Dim strPath As String
    Dim cnn     As Object
    Dim rs      As Object
    Dim valor   As String
    Dim i       As Long
'COLOCAR EL PAHT COMPLETO DE LA BASE DATOS
    strPath = ThisWorkbook.Path & Application.PathSeparator & "BaseDatos.accdb"
'SI SOLO SE DESEA OBTENER EL VALOR MAXIMO USAR ESTA
    strSQL = "SELECT Max(Replace(Codigo_nota,""Fact-"","""",1,-1,1)) AS maximo, * FROM Tabla;"
'SI SE DESEAN LOS DATOS DE LA FILA QUE POSEE EL VALOR MAXIMO USAR ESTA
    strSQL = "SELECT * FROM Tabla WHERE (Tabla.Codigo_nota =(SELECT ""Fact-"" & Max(Replace([Codigo_nota],""Fact-"","""",1,-1,1)) AS maximo FROM Tabla;));"
    If CLng(Application.Version) < 120 Then
        strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";" & "Persist Security Info=False"
    Else
        strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ";Persist Security Info=False;"
    End If
    Set cnn = CreateObject("ADODB.Connection")
    cnn.Open strCnn
    Set rs = CreateObject("ADODB.Recordset")
    rs.Open strSQL, cnn, 1, 1
    If rs.RecordCount > 0 Then
'SI SOLO SE DESEA OBTENER EL VALOR MAXIMO USAR ESTA
        valor = rs(0)
'SI SE DESEAN LOS DATOS DE LA FILA QUE POSEE EL VALOR MAXIMO USAR ESTA
        For i = 0 To rs.Fields.Count - 1
            valor = valor & vbNewLine & rs.Fields(i).Name & " = " & rs.Fields(i).Value
        Next
    Else
        valor = "SIN DATOS"
    End If
    If rs.State <> 0 Then rs.Close
    Set rs = Nothing
    If cnn.State <> 0 Then cnn.Close
    Set cnn = Nothing
    MsgBox valor, vbInformation, "MAX ACCESS"
End Sub
 

Utiliza

 

Un saludo

publicado
Hace 15 horas, Enigma25 dijo:

"Fact-" & Format(Rs.Fields("M"), "0000")

Gracias a @logroastur y @enigma por su ayuda pero me quede en esto o talvez estoy poniendo mal los parametros, me arroja un error no coinciden los tipos uso como base de datos sql server 2008

muy agradecido por la ayuda brindada

Set rst = New ADODB.Recordset
rst.ActiveConnection = con
rst.Source = "SELECT  Max(Codigo_nota) AS Maximo FROM Notas_Abono"
rst.Open
If rst.Fields(0) > 0 Then
     For i = 1 To "Fact-" & Format(rst.Fields("Maximo"), "0000") + 1
      Frm_Contenedor.TextBox21.Text = "Fact-" & Format(rst.Fields("Maximo"), "0000")
     Next
 Else
     Frm_Contenedor.TextBox21.Text = "Fact-" & Format(i, "0001")
End If
con.Close
If Not rst Is Nothing Then Set rst = Nothing
If Not con Is Nothing Then Set con = Nothing
 

 

publicado

Buenas @pajuma

 

Posees varios errores de concepto

1º el sql que usas con la función MAX() solo devolverá un único registro

2º no verificas si la tabla posee registros 

3º el for que usas esta mal estructurado, puesto que el for debe ser numérico por lo que 1 sobre  Fact-00001 es imposible que se recorra

4º en el punto de  "Fact-" & Format(i, "0001") no tendrá valor la variable i por lo que lo lógico sería usar si se desea iniciar en cero Frm_Contenedor.TextBox21.Text = "Fact-0000" y si se desea iniciar en 1 Frm_Contenedor.TextBox21.Text = "Fact-0001"

Bien lo lógico y normal sería

 

Set rst = New ADODB.Recordset
rst.ActiveConnection = con
rst.Source = "SELECT  Max(Codigo_nota) AS Maximo FROM Notas_Abono"
rst.Open
If rs.RecordCount > 0 Then
    If IsNumeric(Replace(rst.Fields(0), "Fact-", "", 1, -1, 1)) Then
        Frm_Contenedor.TextBox21.Text = rst(0)
    Else
        Frm_Contenedor.TextBox21.Text = "Fact-0000"
    End If
Else
    Frm_Contenedor.TextBox21.Text = "Fact-0000"
End If
con.Close
If Not rst Is Nothing Then Set rst = Nothing
If Not con Is Nothing Then Set con = Nothing

 

Un saludo

publicado

Hola @logroastur por la explicacion y gran ayuda he puesto el codigo pero no se autoincrementa en 1 lo he comenzado con fact-0001 pero cuando doy en guardar no me aparece el fact-0002 

gracias,

saludos,

publicado

@logroastur asi lo estoy poniendo pero deberia incrementar el codigo en fact-0001 cuando inicio el formulario eso se hace pero cuando le doy guardar necesito que se incremente en fact-0002 y asi sucesivamente que me tome el ultimo registro de la base de datos y le incremente 1 al momento de guardar . muy agradecido por tu tiempo y por tu incondicional apoyo

 

Sub Autogenerador()
Dim con As ADODB.Connection
Dim rst As ADODB.Recordset
Set con = New ADODB.Connection
con.ConnectionString = "mi cadena de conexion"
con.Open
    If con.State = adStateOpen Then
        Frm_Contenedor.Lblconectando.Caption = "Servidor Conectado..."
    Else
        MsgBox "La Base de Datos no esta disponible o el Servidor esta Desconectado...", vbCritical
        Frm_Contenedor.Lblconectando.Caption = "Servidor Desconectado..."
    End If
    
Set rst = New ADODB.Recordset
rst.ActiveConnection = con
rst.Source = "SELECT  Max(Codigo_nota) AS Maximo FROM Notas_Abono"

rst.Open
Set rst = New ADODB.Recordset
rst.ActiveConnection = con
rst.Source = "SELECT  Max(Codigo_nota) AS Maximo FROM Notas_Abono"
rst.Open
If rs.RecordCount > 0 Then
    If IsNumeric(Replace(rst.Fields(0), "Fact-", "", 1, -1, 1)) Then
        Frm_Contenedor.TextBox21.Text = rst(0)
    Else
        Frm_Contenedor.TextBox21.Text = "Fact-0000"
    End If
Else
    Frm_Contenedor.TextBox21.Text = "Fact-0001"
End If
con.Close
If Not rst Is Nothing Then Set rst = Nothing
If Not con Is Nothing Then Set con = Nothing


End Sub

publicado

Buenas @pajuma

Veamos este es el tema para tomar el último registro, pero yo te indicaba el registro que usas para guardar el nuevo registro

Bien para no complicar en excesivo lo que puedes realizar es que al tomar el último registro se añada uno es decir cambiar estas lineas

If IsNumeric(Replace(rst.Fields(0), "Fact-", "", 1, -1, 1)) Then
    Frm_Contenedor.TextBox21.Text = rst(0)
Else
    Frm_Contenedor.TextBox21.Text = "Fact-0000"
End If

por

If IsNumeric(Replace(rst.Fields(0), "Fact-", "", 1, -1, 1)) Then
    Frm_Contenedor.TextBox21.Text = "Fact-" & Format(CLng(Replace(rst.Fields(0), "Fact-", "", 1, -1, 1)) + 1, "0000")
Else
    ' SI SE DESEA INICIAR EN 1 SINO "Fact-0000" PARA INICIAR EN 0
    Frm_Contenedor.TextBox21.Text = "Fact-0001"
End If

Un saludo

publicado

Muchas Gracias @logroastur se ha solucionado mi problema gracias por tu tiempo. Dios te bendiga .

@Enigma gracias tambien por el tiempo ofrecido en mi consulta.

 

Saludos Cordiales,:)

  • Silvia bloqueó este tema

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.