Palabras clave:
ADO, Extraer, autonumérico, secuencialAutor:
BúhoExtraído de:
La web del Búho
Objetivo: Averiguar el próximo autonumérico de un campo de una tabla.
Dice el Búho...
Mediante las propiedades que ofrece DAO no se puede sacar el valor del 'proximo autonumerico' que una tabla con este tipo de campo nos pueda dar. Jose María Fueyo me mandó una MDB que utiliza ADO. Y el búho descubrió que con ADO si se puede hacer. En concreto con la propiedad Seed.
Pues nada. Ahí tienes el codigo
Option Explicit
'Es una MDB que tiene una tabla denominada tbPrueba
'con un campo Autonumerico llamado ID
'Necesita referencias a:
' Microsoft ADO 2.5
' Microsoft ADO Ext. 2.5 for DDL and Security
Dim cnx As ADODB.Connection, cat As ADOX.Catalog
Dim tbl As ADOX.Table, fld As ADOX.Column, prop As ADOX.Property
Function DameAuto()
'Conecto a la base de datos local
Set cnx = CurrentProject.Connection
'Referencia al catálogo de objetos
Set cat = New ADOX.Catalog
cat.ActiveConnection = cnx
'Referencia a la tabla
Set tbl = cat.Tables("tbPRUEBA")
'Y referencia a la columna
Set fld = tbl.Columns("ID")
'Y recorro la colección de propiedades
For Each prop In fld.Properties
' propiedad seed
If UCase(prop.Name) = UCase("seed") Then
MsgBox "El proximo autonumerico de la tabla es: " & prop.Value
End If
Next
Set prop = Nothing
Set fld = Nothing
Set tbl = Nothing
Set cat = Nothing
cnx.Close
Set cnx = Nothing
End Function
(pero el tema no acaba aquí...)
Dice el Búho...
Es curioso, o como queraís llamarlo, que con DAO no se muestra dicha propiedad
Yo lo intenté con el siguiente codigo...pero no me salía el 'proximo autonumerico'
For Each fldSrc In rstSrc.Fields
MsgBox fldSrc.Name
Dim prpProp As Property
For Each prpProp In fldSrc.Properties
MsgBox prpProp.Name
MsgBox prpProp.Value
On Error Resume Next
Next
Next
así lo intenté, pero nada.
Muchas gracias, Chema...yo tambien andaba buscando este tema desde hace tiempo.
El Búho
¡Y aún más!: La modificación de Ju@nk. Una variante que establece su orden correcto
Function DameAuto() As Long
Dim cnx As ADODB.Connection
Dim cat As ADOX.Catalog
Dim tbl As ADOX.Table
Dim fld As ADOX.Column
Dim prop As ADOX.Property
Dim propS As ADOX.Property
Dim x As Long
'Calculamos que orden debería corresponder
x = DMax("Id", "Tabla1") + 1
'Conecto a la base de datos local
Set cnx = CurrentProject.Connection
'Referencia al catálogo de objetos
Set cat = New ADOX.Catalog
cat.ActiveConnection = cnx
'Referencia a la tabla
Set tbl = cat.Tables("Tabla1")
'Y referencia a la columna
Set fld = tbl.Columns("ID")
Set prop = fld.Properties("seed")
DameAuto = prop.Value
If x < prop.Value Then
'Si no está bien, lo arreglamos
prop.Value = x
End If
salida:
Set prop = Nothing
Set fld = Nothing
Set tbl = Nothing
Set cat = Nothing
cnx.Close
Set cnx = Nothing
End Function