Bueno, pues listo. Ya está.
Trabajo bastante con ADO, así que el tema me ha interesado. He estado buscando por internet, donde hay bastante información para VB, pero poca para Delphi. De todas formas, probando un poco la traducción no ha sido compleja.
Mi primera respuesta fue errónea, ya que como tú dijiste, esa información no aparece por las tablas de sistema (imagino que debe estar dentro de algun campo BLOB codificada) y parece que tampoco es accesible vía ADO; Así que parece que la solución es acceder directamente por ADOX.
Lo he probado y funciona OK, así que lo he subido
como tip en mi página web.
De todas formas el código del botón es este:
Código Delphi
[-]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
Memo1.Lines.Clear;
Con := CreateOleObject('ADODB.Connection');
Con.Open(Format(DB_CONNECTION,[DATABASENAME]));
try
fCatalog := CoCatalog.Create;
fCatalog._Set_ActiveConnection(Con);
Table := fCatalog.Tables['employee'];
for i := 0 to (Table.Columns.Count - 1) do begin
Column := Table.Columns[i];
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]));
for j := 0 to (Column.Properties.Count - 1) do begin
Str1 := Column.Properties[j].Name;
Str2 := Column.Properties[j].Value;
if (Length(Str1) > 0) then begin
if (Str1[1] <> 'J') then begin
Memo1.Lines.Add(Format(' %s: %s',[Str1, Str2]))
end;
end;
end;
end;
finally
Column := nil;
Table := nil;
fCatalog := nil;
Con.Close;
end;
end;