Cargar ultimo registro en Textbox de una tabla de acces +1

Requiero cargar en un formulario de Excel, en un Textbox ; el ultimo registro de el campo IdClientes, de una tabla de Acces, el cual es de tipo Texto corto (CLIE-10) ; esto lo hago mediante el siguiente codigo...

Private Sub UserForm_Activate()

Dim conex As ADODB.Connection
Dim rstOpc As ADODB.Recordset
Dim strSQL As String

Set conex = New ADODB.Connection
Set rstOpc = New ADODB.Recordset
conex.Provider = "Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Database Password="
conex.Open ThisWorkbook.Path & "\GestionEmpresarial1.accdb"

strSQL = "SELECT * FROM Clientes ;"

rstOpc.CursorLocation = 3
rstOpc.Open strSQL, conex, adOpenForwardOnly, adLockReadOnly
If Not rstOpc.EOF Then
rstOpc.MoveLast
rstOpc.MoveFirst
Do While Not rstOpc.EOF

txtid = UCase(rstOpc.Fields("IdCliente")) & ""
rstOpc.MoveNext
Loop
If Not rstOpc Is Nothing Then rstOpc.Close
End If
conex.Close

End Sub

Lo que deseo lograr es que cuando me cargue el ultimo registro me lo incremente en una unidad

CLIE-10 ... CLIE-11 .

Muy agradecido por su ayuda

1 respuesta

Respuesta
1

¿Cuáles son los campos de la tabla Clientes? ¿Cuál es el nombre de campo que contiene el CLIE-10?

Le doy la idea. Para obtener el ultimo puede utilizar algo como

SELECT Last(Clientes.idcliente) AS ultimo_cliente, ... FROM Clientes

No es necesario MoveFirst, MoveLast ni el Do While porque el SELECT le retorna el id del último registro de la tabla Clientes

IdCliente (texto corto)," en este campo va almacenando los registros con formato texto (CLIE-10, CLIE-11  y así sucesivamente.

Fecha (Fecha/Hora), NombreCliente(Texto largo),Direccion(Texto corto), Telefono(Texto corto)

Requiero que al cargar el ultimo registro de la tabla Clientes (IdCliente) en el textbox tome el ultimo registro de la tabla y lo aumente en una unidad y me lo cargue en el texbox .

El inconveniente es que como el campo es de tipo texto no encuentro la manera de aumentarlo en una unidad y que  me conserve (CLIE-).

Con base en la información suministrada elaboré el siguiente código. Al menos la consulta SQL me funcionó, asumo que la conexión es correcta. Espero le sirva

Private Sub UserForm_Activate()
Dim conex As ADODB.Connection
Dim rstOpc As ADODB.Recordset
Dim strSQL As String
Set conex = New ADODB.Connection
Set rstOpc = New ADODB.Recordset
conex.Provider = "Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Database Password="
conex.Open ThisWorkbook.Path & "\GestionEmpresarial1.accdb"
strSQL = "SELECT Max(Right([idCliente],Len([idCliente])-InStr(1,[idCliente]," - "))) AS ultimo FROM Clientes;"
rstOpc.CursorLocation = 3
rstOpc.Open strSQL, conex, adOpenForwardOnly, adLockReadOnly
If rstOpc.BOF And rstOpc.EOF Then
 txtid = "CLIE-1"
Else
 txtid = ultimo + 1
End If
rstOpc.Close
Set rstOpc = Nothing
conex.Close
Set conex = Nothing
End Sub

De ante mano muy agradecido por dedicar tu tiempo y conocimiento a proporcionar una solución ...

Me sale error .en la línea

strSQL = "SELECT Max(Right([IdCliente],Len([IdCliente])-InStr(1,[IdCliente]," - "))) AS ultimo FROM Clientes;"

"Que no coinciden los tipos "

Disculpe, efectivamente había un error. Pruebe con este código

Private Sub UserForm_Activate()
Dim conex As ADODB.Connection
Dim rstOpc As ADODB.Recordset
Dim strSQl As String
Set conex = New ADODB.Connection
Set rstOpc = New ADODB.Recordset
conex.Provider = "Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Database Password="
conex.Open ThisWorkbook.Path & "\GestionEmpresarial1.accdb"
  strSQl = "SELECT Max(Right([idCliente],Len([idCliente])-InStr(1,[idCliente],""-""))) AS ultimo" & vbCrLf
  strSQl = strSQl & "        FROM Clientes;"
rstOpc.CursorLocation = 3
rstOpc.Open strSQl, conex, adOpenForwardOnly, adLockReadOnly
If rstOpc.BOF And rstOpc.EOF Then
 txtid = "CLIE-1"
Else
 txtid = rstOpc.Fields("ultimo") + 1
End If
rstOpc.Close
Set rstOpc = Nothing
conex.Close
Set conex = Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas