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

Soyez le premier à donner votre avis sur cette source.

Vue 11 301 fois - Téléchargée 1 426 fois

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

Ajouter un commentaire

Commentaires

aymenk
Messages postés
79
Date d'inscription
samedi 25 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2018
-
Pas mal...
J'aimerais bien avoir vos commentaire sur l'application déposé ce jour
Aymenk
retaks666
Messages postés
286
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
16 juillet 2007
-
Supper! Mais j'ai tout de même des erreurs de "index out of bound" lorsque je sélectionne une table (combo 2).
7/10
romit
Messages postés
160
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
30 juin 2011
-
J'ai mis 10/10 pour rattraper le 1/10 de je ne sais pas qui !

Non mais vraiment !!!
cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
24 -
Romit : après vérification, personne n'a mis de 1/10.
Merci quand même et bien content que ce code t'ait plu.
Pierregeorgesalexandre
Messages postés
23
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
5 novembre 2006
-
Bonjour,

j'ai voulu tester votre petit programme, car je souhaiter faire la même chose avec une de mes bdd, mais je n'ai pas pû compliler, voici le message d'erreur obtenu...

[Erreur fatale] GetIndexes.dpr(5): L'unité Themes a été compilée avec une version différente de UxTheme.BP_PUSHBUTTON

Pouvez vous me dire ce que je n'ai pas fait correctement?
j utilise delphi 7 et windows xp
mille merci si vous pouvez m aider
Pierre Alexandre

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.