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; |
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…