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.
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.