Autor Tema: Averiguar próximo autonumérico  (Leído 3385 veces)

Desconectado xavi

  • Administrador
  • Habitual
  • *****
  • Mensajes: 220
Averiguar próximo autonumérico
« en: Abril 13, 2012, 11:01:10 pm »
Palabras clave: ADO, Extraer, autonumérico, secuencial
Autor: Búho
Extraído de: La web del Búho

Objetivo:
Averiguar el próximo autonumérico de un campo de una tabla.

Citar
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


Código: [Seleccionar]
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í...)

Citar
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'

Código: [Seleccionar]
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
 
Código: [Seleccionar]
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



« Última modificación: Abril 13, 2012, 11:29:58 pm por xavi »