FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 123, nombre de questions : 919, dernière mise à jour : 14 juin 2019  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).

Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.

L'équipe Delphi de Developpez.com.

Commentez


SommaireBases de donnéesInterbase (15)
précédent sommaire suivant
 

Cette solution est préférable dans le cas d'une application utilisant seulement des bases Interbase.

Connexion de l'application
Placer un composant IBDataBase sur la fiche (Palette Interbase), puis mettre à jour les propriétés suivantes :

  • DataBaseName : le nom complet du fichier si le serveur est local, et le
    NomDuServeur:CheminCompletDuFichierSurLeServeur s'il s'agit d'un serveur distant.
  • LoginPrompt : false
  • Params : Ajouter deux lignes 'User_Name=Nom' et 'Password=MotDePasse'.

Ouverture d'une table
Placer un composant IBTransaction sur la fiche et mettre la propriété DefaultDataBase à IBDataBase1.
Placer ensuite un composant IBQuery sur la fiche et mettre à jour le propriétés suivantes :
  • DataBase : IBDataBase1
  • Transaction : IBTransaction1
  • SQL : mettre la requête voulue ( SELECT * FROM UneTable )

Il suffit ensuite de faire IBQuery1.Open pour ouvrir la table.

Mis à jour le 17 janvier 2014 Nono40

La méthode proposée ici permet d'ouvrir une table d'une base Interbase et de l'afficher dans une grille, ceci en complétant la base DBExpress afin d'obtenir une lecture bidirectionnelle.

Connexion de l'application :
Pour connecter l'application placez un composant SQLConnection sur la fiche (palette DBExpress), puis mettre à jour les propriétés suivantes :

  • ConectionName : IBConnection
  • DriverName : Interbase
  • Params ( DataBase ) : Le chemin d'accès au fichier GDB de la base. Il s'agit du chemin du fichier si le serveur est local, et du format NomDuServeur:CheminCompletDuFichierSurLeServeur dans le cas d'un accès réseau.
  • Params ( User ) : nom d'utilisateur
  • Params ( PassWord ) : mot de passe
  • LoginPrompt : False

Ensuite faire SQLConnection1.Open pour établir la connexion avec le serveur Interbase.

Ouvrir une table en mode bidirectionnel
Placer un composant SQLQuery (palette DBExpress) sur la fiche et mettre :
  • SQConnection : SQLConnection1
  • SQL : mettre une requête SELECT simple ( SELECT * FROM UneTable )

Placer ensuite un composant DataSetProvider (palette AccesBD) sur la fiche et mettre :
  • DataSet : SQLQuery1

Placer ensuite un composant ClientDataSet (palette AccesBD) sur la fiche et mettre :
  • ProviderName : DataSetProvider1

Pour ouvrir la table effectuer ClientDataSet1.Open.

Afficher la grille
Pour afficher la grille la méthode est ensuite standard, il suffit de mettre un DataSource sur la fiche et le relier à ClientDataSet1. Puis une grille reliée à DataSource1.

Mis à jour le 17 janvier 2014 Nono40

Cette solution permet de passer rapidement d'une application BDE avec des bases Paradox/DBase vers un serveur Interbase. Il n'est pas conseillé non plus de l'utiliser dans de nouvelles applications.

Créer un Alias
Avant de se connecter à Interbase vous devez créer un Alias en utilisant l'administrateur BDE.

  • Dans le menu ocget choisir "Nouveau..."
  • Sélection INTRBASE comme type de pilote
  • Entrez le nom de l'Alias
  • Dans les paramètres de l'alias saisir la valeur de "Server name". le nom du serveur est le nom complet du fichier si le serveur est local, et le NomDuServeur:CheminCompletDuFichierSurLeServeur s'il s'agit d'un serveur distant.
  • Entrez le nom de l'utilisateur

Après avoir appliqué les modifications il et possible de tester la connexion en double-cliquant sur l'alias. La fenêtre de login apparaît et si la connexion est réussie, l’icône à gauche de l'alias doit être entouré de vert.

Connexion de l'application
Le plus simple est d'utiliser un composant TDataBase pour réaliser et gérer la connexion.
  • Mettre dans DataBaseName le nom de l'alias créé précédemment
  • Mettre LoginPrompt à false
  • Ajouter deux paramètres dans params "USER NAME" avec le nom de l'utilisateur défini dans Interbase. "PASSWORD" avec le mot de passe associé

Il suffit ensuite de faire DataBase1.Open pour se connecter à Interbase.

Ouverture d'une table
Les tables sont ensuite ouvertes de façon classique. la propriété DataBaseName des composants utilisés doit contenir le nom de l'alias créé plus haut.

Mis à jour le 17 janvier 2014 Nono40

Pour créer une base de donnée Interbase en dynamique, il faut être en local (serveur Interbase installé sur la machine cible).

Il faut d'abord :

  • assigner le nom de la base (généralement les bases Interbase ont comme extension .GDB) ;
  • déterminer le dialecte SQL (3 étant le dernier) ;
  • remplir les paramètres de création (j'ai utilisé les paramètres de base d'Interbase mais c'est déconseillé, il vaut mieux effacer l'utilisateur SYSDBA et créer le sien avec son propre mot de passe => Sécurité oblige).


Le code nécessaire est là :
Code delphi : Sélectionner tout
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
procedure TMain.CreateDatabase(ADBFileName: TFilename); 
var 
  IBDataBase: TIBDatabase; 
  IBQuery: TIBQuery; 
  IBTransaction: TIBTransaction; 
begin 
  IBDataBase := TIBDatabase.Create(nil); 
  IBQuery := TIBQuery.Create(nil); 
  IBTransaction := TIBTransaction.Create(nil); 
  try 
    IBDataBase.DatabaseName := ADBFileName; 
    IBDataBase.SQLDialect := 3; 
    IBDataBase.Params.Clear; 
    IBDataBase.Params.Add('USER "SYSDBA"'); 
    IBDataBase.Params.Add('PASSWORD "masterkey"'); 
    IBDataBase.Params.Add('PAGE_SIZE 4096'); 
    IBDataBase.CreateDatabase; 
    IBDatabase.Connected := true; 
    IBTransaction.DefaultDatabase := IBDataBase; 
    IBQuery.Database := IBDatabase; 
    IBQuery.Transaction := IBTransaction; 
    try 
      IBQuery.SQL.Add('create table IODescriptorEx(IOId int not null,IOFileMask VarChar(30),'+ 
    'AlternativeDesc VarChar(50));'); 
      IBQuery.ExecSQL; 
      {...} 
      { Reste de la création de la base par script SQL en dur ou récupérer dans un fichier } 
      {...} 
      IBTransaction.Commit; 
    except 
      IBTransaction.Rollback; 
    end; 
    IBDataBase.Connected := false; 
  finally 
    FreeAndNil(IBQuery); 
    FreeAndNil(IBTransaction); 
    FreeAndNil(IBDataBase); 
  end; 
end;
Il suffit ensuite de se connecter à la base et de se servir d'un IBQuery pour créer les tables et autres éléments nécessaires à la mise en œuvre de la base de données…

Mis à jour le 18 octobre 2013 ptitbob

Le composant IBDatabase fournit la procédure GetTablesNames qui permet d'obtenir la liste des tables contenues dans la base de donnée.

Exemple pour récupérer la liste des tables dans une listbox :

Code delphi : Sélectionner tout
IBDatabase1.GetTableNames(Listbox1.Items);

Mis à jour le 17 janvier 2014 atlantis

Le composant IBDatabase fourni la procedure GetFieldNames qui permet d'obtenir la liste des champs contenu dans une table précise de la base de donnée.

Exemple pour récupérer la liste des champs de la table MATABLE dans une listbox :

Code delphi : Sélectionner tout
IBDatabase1.GetFieldNames('MATABLE', Listbox1.items);

Mis à jour le 17 janvier 2014 atlantis

Pour ajouter un utilisateur dans la base de données, le composant TIBSecurityService est nécessaire.

Pour configurer l'IBSecurityService1, affectez les propriétés suivantes dans l'inspecteur d'objet :

  • Protocol := TCP (Puisque client/serveur)
  • ServerName := 127.0.0.1 (ou autre si serveur sur ordinateur distant)

Code delphi : Sélectionner tout
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
var  
  sPseudo, sMotDePasse, sPrenom, sNom : string;  
...  
With IBSecurityService1 do  
  begin  
    with Params do  
    begin  
      Clear;  
      Add('user_name=sysdba');  
      Add('password=masterkey');  
    End;  
  
    Active := true;  
  
    // affectation des informations utilisateur selon les besoins  
   // UserName, FirstName, MiddleName, LastName, UserID, GroupID, Password.  
  
    UserName:=sPseudo;         //indispensable  
    Password:=sMotDePasse;   //indispensable  
  
    FirstName:=sPrenom;  
    LastName:=sNom; // etc ... selon les besoins  
    try  
      AddUser;  
    except  
      on E:Exception do  
      begin  
        ShowMessage(E.ClassName+':'+E.Message);  
        // traitement en cas d'erreur  
      end;  
    end;  
    Active := false;  
  end;

Mis à jour le 17 janvier 2014 Benjamin GAGNEUX

Compatible avec InterBase et FireBird.

Pour modifier un utilisateur dans la base de données, le composant TIBSecurityService est nécessaire.

Pour configurer l'IBSecurityService1, affectez les propriétés suivantes dans l'inspecteur d'objet :

  • Protocol := TCP (Puisque client/serveur)
  • ServerName := 127.0.0.1 (ou autre si serveur sur ordinateur distant)

Code delphi : Sélectionner tout
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
var  
  sPseudo, sMotDePasse, sPrenom, sNom : string;  
....  
  With IBSecurityService1 do  
  begin  
    with Params do  
    begin  
      Clear;  
      Add('user_name=sysdba');  
      Add('password=masterkey');  
    End;  
  
    Active := true;  
  
    UserName:=sPseudo; //pseudo de l'utilisateur à modifier  
    Password:=sMotDePasse; // nouveau mot de passe  
    FirstName:=sPrenom; // nouveau prenom  
    LastName:=sNom; // nouveau nom  
    try  
      ModifyUser;  
    except  
      on E:Exception do 
      begin  
        ShowMessage(E.ClassName+':'+E.Message);  
        // traitement des erreurs 
      end;  
    end; 
  end;

Mis à jour le 17 janvier 2014 Benjamin GAGNEUX

Compatible avec InterBase et FireBird.

Pour supprimer un utilisateur de la base de donnée, le composant TIBSecurityService est nécessaire.

Seul le nom d'utilisateur (UserName) est nécessaire pour la suppression d'un compte.

Pour configurer l'IBSecurityService1, affectez les propriétés suivantes dans l'inspecteur d'objet :

  • Protocol := TCP (Puisque client/serveur)
  • ServerName := 127.0.0.1 (ou autre si serveur sur ordinateur distant)

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var  
  sPseudo : string;  
...  
  with IBSecurityService1 do  
  begin  
    with Params do  
    begin  
      Clear;  
      Add('user_name=sysdba');  
      Add('password=masterkey');  
    End;  
  
    Active := True;  
    try  
      UserName := sPseudo;  
      DeleteUser;  
    finally  
      Active := False;  
    end;  
  end;

Mis à jour le 17 janvier 2014 Benjamin GAGNEUX

Compatible avec InterBase et FireBird.

Lors de la réalisation d'un logiciel multi-postes, il peut être intéressant de refuser l'accès à un utilisateur déjà en ligne. De cette manière, chaque utilisateur ne peut avoir qu'une connexion active à la base de donnée, il ne peut y avoir deux utilisateurs identiques (utilisant le même pseudo) pour le même logiciel sur le même réseau.

Il est nécessaire d'utiliser pour cela le composant TIBDatabaseInfo que l'on posera sur une DataModule (DM dans l'exemple suivant)
Affectez tout d'abord sa propriété DataBase := IBDataBase1 (ou IBDB dans l'exemple suivant).

Code delphi : Sélectionner tout
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
var  
  suser, spass : string;  
  nbConnection, i : integer;  
  
....  
  // on initialise le nombre de connexion active à 0  
  nbConnection := 0;  
  
  // saisie du pseudo et mot de passe  
  suser := InputBox('user','','');  
  spass := InputBox('pass','','');  
  
  try  
    // connexion  
    with DM.IBDB do // IBDB est de type TIBDataBase  
    begin  
      Params.Clear;  
      Params.Add('user_name='+suser);  
      Params.Add('password='+spass);  
      Connected := True;  
      // il est nécessaire d'ouvrir la BD pour vérifier les connections  
    end;  
  
    // vérification du nombre de connexion de l'utilisateur suser  
    with DM.IBDatabaseInfo1 do  
    for i := 0 to UserNames.Count-1 do  
      if SameText(suser,UserNames[i]) then  
        Inc(nbConnection);  
        // si l'utilisateur est trouvé, alors le nombre de connexion est incrémenté  
  
  except  
    on E:Exception do begin  
      ShowMessage('Exception :'+E.ClassName+#13#10+E.Message);  
        // traitement en cas d'erreur  
       ....  
       Exit;  
    end;  
  end;  
  
  
  if (nbConnection > 1) then begin // si plus d'une connexion  
    ShowMessage('déjà connecté');  
    // traitement en cas d'utilisateur déjà présent.  
    Exit;  
  end;

Mis à jour le 17 janvier 2014 Benjamin GAGNEUX

Compatible avec InterBase et FireBird.

Pour obtenir des informations sur un utilisateur de la base de données, le composant TIBSecurityService est nécessaire.

Pour configurer l'IBSecurityService1, affectez les propriétés suivantes dans l'inspecteur d'objet :

  • Protocol := TCP (Puisque client/serveur)
  • ServerName := 127.0.0.1 (ou autre si serveur sur ordinateur distant)

Il est impossible de récupérer le mot de passe de cette manière. Pour résoudre ce problème, vous pouvez le mémoriser dans une variable lors de la connexion.
Code delphi : Sélectionner tout
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
var  
  iUderId : integer;  
  sUserName : string;  
  sFirstName, sLastName : string;  
....  
  sUserName := 'MonPseudo';  
  
  with IBSecurityService1 do  
  begin  
    with Params do  
    begin  
      Clear;  
      Add('user_name=sysdba');  
      Add('password=masterkey');  
    End;  
  
    Active := True;  
    try  
      DisplayUser(sUserName);  
  
      iUserId := UserID;  
      sFirstName := FirstName;  
      sLastName := LastName;  
    finally  
      Active := False;  
    end;  
  end;

Mis à jour le 17 janvier 2014 Benjamin GAGNEUX

Compatible avec InterBase et FireBird.

Pour obtenir des informations sur les utilisateurs enregistrés dans la base de donnée, le composant TIBSecurityService est nécessaire.

Pour configurer l'IBSecurityService1, affectez les propriétés suivantes dans l'inspecteur d'objet :

  • Protocol := TCP (Puisque client/serveur)
  • ServerName := 127.0.0.1 (ou autre si serveur sur ordinateur distant)

Il est impossible de récupérer le mot de passe de cette manière.

Comme nous récupérons plusieurs informations par utilisateur, nous allons créer une structure de donnée :
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
type  
  TUtilisateur = record  
    UserId : integer;  
    UserName:string;  
    FirstName:string;  
    LastName:string;  
  end;
puis dans notre nouvelle fonction (Le paramètre doit être initialisé et détruit dans la méthode appelante : voir plus bas):
Code delphi : Sélectionner tout
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
function GetRegisteredUsers(Result : TList); 
var  
  I: Integer;  
  Utilisateur : ^TUtilisateur; // création d'un pointeur sur le record  
...  
begin  
  with IBSecurityService1 do  
  begin  
    with Params do  
    begin  
      Clear;  
      Add('user_name=sysdba');  
      Add('password=masterkey');  
    End;  
  
    Active := True;  
    try  
      DisplayUsers;  
      for I := 0 to UserInfoCount - 1 do  
      begin  
        with UserInfo[i] do  
        begin  
          New(Utilisateur); // Initialisation de Utilisateur comme nouveau pointeur  
          Utilisateur.UserId := UserID;  
          Utilisateur.UserName := UserName;  
          Utilisateur.FirstName := FirstName;  
          Utilisateur.LastName := LastName;  
          Result.Add(Utilisateur); // ajout du pointeur dans la liste qui sera retournée 
        end;  
      end;  
    finally  
      Active := False;  
    end;  
  end;  
end;
voici un exemple de méthode appelante :
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
Var Liste:TList;  
...  
  Liste:=TList.Create;  
  Try  
    GetRegisteredUsers(Liste);  
    // Traitement du résultat  
    ...  
  Finally  
    Liste.Free;  
  end;

Mis à jour le 17 janvier 2014 Benjamin GAGNEUX

Compatible avec InterBase et FireBird.

Pour connaitre la liste des utilisateurs actuellement en ligne, il faut un TIBDatabaseInfo (IBDatabaseInfo1 dans l'exemple) dont l'option database de l'inspecteur d'objet est relié à un TIBDatabase (IBDB).

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
if not(IBDB.Connected) then  
    exit; // notre TIBDatabase : IBDB doit etre connecter  
  
  with IBDatabaseInfo1 do 
  begin  
    // Affichage de la liste des utilisateurs  
    ListBox1.Clear;  
    if (UserNames.Count=0) or (UserNames = nil)  
      then ListBox1.Items.Add('<Aucun>')  
      Else ListBox1.Items.Assign(UserNames);  
  end;

Mis à jour le 17 janvier 2014 Benjamin GAGNEUX

Lorsque vous tentez d'accéder à une propriété ou méthode de l'aide d'InteBase Express, il peut arriver que vous ayez le message : "Impossible de touver ibx.hlp ..."

En fait, il s'agit d'une erreur de nommage du fichier.
En effet, vous trouverez dans le sous-répertoire Help du répertoire de Delphi, le fichier D7ibx.hlp.
Copiez le dans le même répertoire et puis renommez la copie en ibx.hlp

Voila ,l'aide IBX est maintenant pleinement disponible.

Il ne faut pas effacer pour autant D7ibx.hlp qui permet la liaison avec l'IDE Delphi.

Mis à jour le 17 janvier 2014 Benjamin GAGNEUX

Compatible avec InterBase et FireBird.

Les opérations de sauvegarde et de restauration d'une base de données se font respectivement avec le TIBBackupService et le TIBRestoreService.

I. Le backup.
Voici comment configurer les propriétés de notre IBBackupService1 :

  • BackupFile : C'est le nom du ou des fichiers du futur backup (ainsi que leurs tailles s'il y en a plusieurs) vu du SGBDR InterBase. exemple C:\Temp\MonBackup.gbk (le chemin étant celui trouvé sur la machine hébergeant le SGBDR InterBase)
  • Protocol : TCP (Puisque client/serveur)
  • ServerName : 127.0.0.1 (LocalHost) ou l'adresse IP de l'ordinateur distant où est installé le SGBDR InterBase
  • DatabaseName : chemin et nom de votre base de données.
  • Options : IgnoreLimbo (n'enregistre pas les transactions non-achevées).
  • Verbose : True (permet de récupérer le traçage du Backup par GetNextLine).

et notre fonction :
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var 
  s : string; 
begin 
  with DM.IBBackupService1 do 
  begin 
    with Params do 
    begin 
      Clear; 
      Add('user_name=sysdba'); 
      Add('password=masterkey'); 
    End; 
    try 
      Active := True; 
      ServiceStart; 
      while not EOF do 
        s := s +#13#10 +GetNextLine; 
    finally 
      Active := False; 
    end; 
  end; 
  
  ShowMessage(s); 
end;
II. Le Restore.
Voici comment configurer les propriétés de notre IBRestoreService1 :
  • BackupFile : C'est le nom du ou des fichiers à restaurer (ainsi que leurs tailles s'il y en a plusieurs) vu du SGBDR InterBase. exemple C:\Temp\MonBackup.gbk (le chemin étant celui trouvé sur la machine hébergeant le SGBDR InterBase)
  • Protocol : TCP (Puisque client/serveur)
  • ServerName : 127.0.0.1 (LocalHost) ou l'adresse IP de l'ordinateur distant où est installé le SGBDR InterBase
  • DatabaseName : chemin et nom de votre base de données.
  • Options : CreateNewDB et Replace à True (permet de créer le fichier s'il nexiste pas et de le remplacer dans le cas contraire)
  • Verbose : True (permet de récupérer le traçage du Restore par GetNextLine)

et notre fonction :
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var 
  s : string; 
begin 
  with DM.IBRestoreService1 do 
  begin 
    with Params do 
    begin 
      Clear; 
      Add('user_name=sysdba'); 
      Add('password=masterkey'); 
    end; 
    try 
      Active := True; 
      ServiceStart; 
      while not EOF do 
        s := s +#13#10 +GetNextLine; 
    finally 
      Active := False; 
    end; 
  end; 
  
  ShowMessage(s); 
end;
Précisions particulières :
Dans le cas d'une application service, il est nécessaire de choisir TCP en protocol.
Les opérations de Backup/Restore s'effectuent toujours sur l'ordinateur hébergeant le SGBDR InterBase, même si c'est une machine cliente qui les lance.

SGBDR = Système de Gestion de Base de Données Relationel.

Mis à jour le 17 janvier 2014 Benjamin GAGNEUX

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -

Partenaire : Hébergement Web