Javier, lo que tienes que hacer es bastante trabajo, pero sencillo, a
saber:
Dada una conexion con una Base de datos....
Revisar la coleccion de Tablas (y por que no vistas?)
[Objeto Database].Tabledefs -----> para DAO
[Objeto Conexion].rdoTables -----> para RDO
Y cargar un ListBox con el resultado. Seria conveniente filtrar los
atributos de los objetos tabla para no incluir los objetos de sistema
(Propiedad Attributes, consultar Help).
En este ejemplo (de una aplicación mía) se realiza ese trabajo de un
origen de datos SQL utilizando DMO (Distributed Management Objets o DAO
segun el caso)
If Not DATAInspect Is Nothing Then
For Each DATATable In DATAInspect.Tables
If Not DATATable.SystemObject Then
lstTablas.AddItem DATATable.Name
End If
Next
Else
For Each DAOTable In MiBase.TableDefs
If DAOTable.Attributes = 0 Then
lstTablas.AddItem DAOTable.Name
End If
Next
End If
Y luego algo parecido con los atributos....
If Not DATATable Is Nothing Then
For Each oTempColumn In DATATable.Columns
With oTempColumn
grdColumns.AddItem .Name & vbTab & .Datatype & vbTab &
.length & vbTab
& IIf(.Identity, "SI", "NO") & vbTab & IIf(.AllowNulls, "SI", "NO") &
vbTab & IIf(.InPrimaryKey,
"SI", "NO")
ReDim Preserve aAtributo(i)
aAtributo(i).Nombre = .Name
aAtributo(i).Tamaño = .length
aAtributo(i).Tipo = .PhysicalDatatype
aAtributo(i).EsIdentity = .Identity
aAtributo(i).EstaEnClave = .InPrimaryKey
i = i + 1
End With
Next
Else
For Each oField In DAOTable.Fields
With oField
grdColumns.AddItem .Name & vbTab & FieldType(.Type) &
vbTab & .Size
& vbTab & IIf(.Attributes And dbAutoIncrField, "SI", "NO") & vbTab &
IIf(.AllowZeroLength,
"SI", "NO") & vbTab & IIf(IsInPrimaryKey(.Name), "SI", "NO")
ReDim Preserve aAtributo(i)
aAtributo(i).Nombre = .Name
aAtributo(i).Tamaño = .Size
aAtributo(i).Tipo = FieldType(.Type)
aAtributo(i).EsIdentity = .Attributes And
dbAutoIncrField
aAtributo(i).EstaEnClave = IsInPrimaryKey(.Name)
i = i + 1
End With
Next
EN este caso cargo una grilla con las propiedades de los campos (quizás
no te sea util) y guardo la coleccion de atributos en un array de UDTs.
Las funciones FieldType() y IsInPrimaryKey() son propias y no vienen al
caso.
Lo que sigue es manejo de Strings. Deberás poner Combos con los
operadores (>,<,= LIKE, BETWEEN, etc) y definir los Joins, Groups y
Orders.
Lo de Excel lo dejo para otra oportunidad, cualquier cosa me lo
recuerdas y volvemos sobre el tema.
No tengo inconveniente en que me consultes particularmente .
Saludos
Adrian