Propiedades de una columna en Access utilizando ADOX
Utilizando ADO se puede acceder a casi toda la información de la Base de Datos, Tablas y Columnas, pero no a toda. En el caso de las Bases de datos de Access, por ejemplo, la propiedad descripción, que utilizamos para añadir un texto descriptivo a las columnas de las tablas, no es accesible.
Para obtenerla, hace falta acceder directamente a la información del «catálogo» utiliando ADOX. Para poder utilizar ADOX, lo primero que debemos hacer es importar la librería a en Delphi;
Esto se puede hacer desde el menú de: Proyect/Import Type Library.
La librería en concreto es la llamada «Microsoft ADO Ext. for DDL and Security» y proceso paso a paso, podéis verlo es esta página de Zarko Gajic.
Una vez importada la librería, basta con abrir la Base de Datos, acceder a una tabla y a un columna; A partir de ahí ya tenemos todos los datos(propiedades) referentes a esa columna.
El código es sencillo (basta con tener un formulario con un memo (Memo1) y un botón (button1)):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | procedure TForm1.Button2Click(Sender: TObject); const DB_CONNECTION='Provider=Microsoft.Jet.OLEDB.4.0;' + 'Data Source=%s'; DATABASENAME = 'c:\Archivos de ' + 'programa\Archivos comunes\Borland Shared\Data' + '\dbdemos.mdb'; var i, j:Integer; Con:OleVariant; fCatalog:Catalog; Column: _Column; Table:_Table; Str1, Str2:string; begin // Limpiar la salida Memo1.Lines.Clear; // Conectar con la Base de Datos Con := CreateOleObject('ADODB.Connection'); // Abrir Con.Open(Format(DB_CONNECTION,[DATABASENAME])); // proteccion try // Acceder a la Base de Datos fCatalog := CoCatalog.Create; fCatalog._Set_ActiveConnection(Con); // Acceder a la tabla de empleados Table := fCatalog.Tables['employee']; // recorrer las columnas for i := 0 to (Table.Columns.Count - 1) do begin // Acceder a la columna Column := Table.Columns[i]; // Datos de columna Memo1.Lines.Add(' '); Memo1.Lines.Add(Format('Columna: %s',[Column.Name])); Memo1.Lines.Add('---------------------------------'); Memo1.Lines.Add(Format(' Tamaño: %d',[Column.DefinedSize])); Memo1.Lines.Add(Format(' Precisión: %d',[Column.Precision])); // recorrer las propiedades de la columna for j := 0 to (Column.Properties.Count - 1) do begin // Cada propiedad, Nombre y valor Str1 := Column.Properties[j].Name; Str2 := Column.Properties[j].Value; // Saltamos las propiedades Jet... if (Length(Str1) > 0) then begin // Saltar las Jet if (Str1[1] <> 'J') then begin Memo1.Lines.Add(Format(' %s: %s',[Str1, Str2])) end; //if end; //if end; // for end; // for finally // Liberar y cerrar Column := nil; Table := nil; fCatalog := nil; Con.Close; end; end; |