Infos sur les tables d'une base de données

Description

Informations sur la liste des index disponibles et, pour chacun, ses caractéristiques (primaire, unique, etc).

Source / Exemple :


unit UGetIndex;
{Auteur        :Delphiprog
 Email         : delphi@delphiprog.fr.fm
 Web           : http://www.delphiprog.fr.fm
 Date création : 02/03/2002
 Date révision :
 Objet         : donner des informations sur les tables
 remarques     : BDD = base de données
}
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, DBTables, Db;
  
type
  TForm1 = class(TForm)
    Table1: TTable;
    Database1: TDatabase;
    btnClose: TButton;
    GroupBox1: TGroupBox;
    ListIndex: TListBox;
    ComboBox1: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    ComboBox2: TComboBox;
    Label3: TLabel;
    GroupBox2: TGroupBox;
    Label4: TLabel;
    EdChampsIndex: TEdit;
    cbxPrimary: TCheckBox;
    cbxUnique: TCheckBox;
    cbxDescending: TCheckBox;
    cbxCaseInsensitive: TCheckBox;
    cbxExpression: TCheckBox;
    cbxNonMaintened: TCheckBox;
    Label5: TLabel;
    edExpressionIndex: TEdit;
    Label6: TLabel;
    lblTableType: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure ListIndexClick(Sender: TObject);
    procedure btnCloseClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

  procedure FindExtension(const Name : string; out Ext : string);

implementation

{$R *.DFM}

const
  Extensions : array[TTableType]
               of string=('', '*.db', '*.dbf', '.txt', '*.db');
               
procedure FindExtension(const Name : string; out Ext : string);
{ Objet : Recherche de l'extension des fichiers pour un type de table
}
begin
  Ext := '';
  if LowerCase(Name) = 'paradox' then Ext := '*.db';
  if LowerCase(Name) = 'dbase'   then Ext := '*.dbf';
  if LowerCase(Name) = 'ascii'   then Ext := '*.txt';
  if LowerCase(Name) = 'foxpro'  then Ext := '*.db';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Récupérer les noms des alias présents sur la machine
   Session.GetAliasNames(Combobox1.Items);
   //Positionner sur le premier de la liste
   if Combobox1.Items.Count > 0 then
     Combobox1.ItemIndex := 0;

end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  MyStringList : TStrings;
  i : integer;
  ExtName : string;

begin
  MyStringList := TStringList.Create;
  try
    //récupérer le nom du driver par défaut de la BDD
    LblTableType.Caption := DataBase1.DriverName;
    FindExtension(LblTableType.Caption, ExtName);
    
    //Récupérer les noms des tables d'extension .db
    Session.GetTableNames(Combobox1.Text, ExtName,False, False, MyStringList);
    { Ajoute les noms de tables à une boîte liste }
    Combobox2.Items := MyStringList;

    //Si la base a au moins une table...
    If Combobox2.Items.Count > 0 then
    begin
      //sélectionner la première
      Combobox2.ItemIndex := 0;
      with DataBase1, Combobox1 do
      begin
        Close;
        AliasName := Items[ItemIndex];
        Open;
        //ouvrir les tables désignées par la BDD
        for i:=0 to DataSetCount - 1 do
          DataSets[i].Open;
      end;
    end;
  finally
    MyStringList.Free;
  end;

end;

procedure TForm1.ComboBox2Change(Sender: TObject);
var
  i : integer;
begin
  with Table1 do
    if DefaultIndex then
    begin
      //A chaque changement de sélection dans la boîte combo,
      //Ouvrit la table sélectionnée
      Close;
      TableName:= Combobox2.Text;
      Open;

      IndexDefs.Update;
      //**** Ne pas utiliser :
      //**** IndexDefs.GetItemNames(ListIndex.Items);
      //Car cette fonction ajoute le nom de l'index primaire
      // en passant une chaine vide. Résultat, la listbox ListIndex
      //ne peut faire apparaître le nom de l'index primaire
      ListIndex.Clear;
      for i:=0 to IndexDefs.Count - 1 do
        ListIndex.Items.Add(IndexDefs.Items[i].Name);

      //L'index primaire n'a pas de nom, en mettre un
      If IndexDefs.Items[0].Name ='' then
        ListIndex.Items[0] := 'Index primaire';

      //Positionner sur le premier élément de la liste s'il existe
      if ListIndex.Items.Count > 0 then
      begin
        ListIndex.ItemIndex := 0;
        //Rafraîchir le panneau d'informations
        //sur l'index en cours
        ListIndexClick(Sender);
      end;
    end;

end;

procedure TForm1.ListIndexClick(Sender: TObject);
begin
  With TListBox(Sender), Table1, IndexDefs[ItemIndex] do
    begin
      //renseigner le panneau d'informations
      //Champs de l'index sélectionné
      EdChampsIndex.Text := Fields;

      //Expression de l'index dans le cas d'une table DBase
      EdExpressionIndex.Text := Expression;

      //Caractéristiques de l'index
      cbxPrimary.Checked := ixPrimary in Options;
      cbxUnique.Checked := ixUnique in Options;
      cbxDescending.Checked := ixDescending in Options;
      cbxCaseInsensitive.Checked := ixCaseInsensitive in Options;
      cbxExpression.Checked := ixExpression in Options;
      cbxNonMaintened.Checked := ixNonMaintained in Options;
    end;
end;

procedure TForm1.btnCloseClick(Sender: TObject);
begin
  Close
end;

end.

Conclusion :


Réalisé avec Delphi 4. Version pro minimum requise.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.