FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 123, nombre de questions : 920, dernière mise à jour : 8 novembre 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éesOracle (6)
précédent sommaire suivant
 

Les DOA (Direct Oracle Access) sont des composants natifs pour connecter une base de données Oracle à une application Delphi, Kylix (ainsi que C++Builder).

L'installation :
Elle se fait directement via un exécutable.

Les composants principaux :

  • TOracleSession pour se relier à une base de données d'Oracle. Vous pouvez employer plusieurs sessions simultanément, accédant à différentes bases de données.
  • TOracleQuery : pour exécuter n'importe quel SQL ou bloc PL/SQL dans une session.
  • TOracleLogon : lance la fenêtre standard du login/password/alias Oracle pour se connecter à une base Oracle.
  • TOracleNavigator est un composant très semblable au TDBNavigator standard. Il fournit les boutons additionnels pour soutenir le mode de QBE (Query By Example) d'un TOracleDataSet.
  • TOracleDataSet : Composant à utiliser si vous voulez afficher les données directement dans des DBGrid, DBEdit,...

Pour l'utilisation :
Posez un TOracleSession et un TOracleQuery sur une fiche.
Les propriétés à renseigner sont :
  • TOracleSession :
    • LogonUserName : Login pour se connecter à la base
    • LogonPassword : Mot de passe pour se connecter à la base
    • LogonDatabase : Dans lequel on met l'alias de la base de donnée (se référer au nom donné dans le tnsnames.ora)
    • Connected : (True/False) connecte l'application à la base de données.
    • Attention : Laisser la propriété AutoCommit à False... Cette propriété disparaîtra dans les version suivante des DOA
  • TOracleQuery :
    • Session : Relier au TOracleSession
    • SQL : Texte de la requête SQL (astuce pour encoder votre code SQL plus directement : double cliquez sur le composant posé sur la fiche).
    • L'exécution de la requête se fait par : TOracleQuery.Execute et ceci quelque soit le type de requête SQL (Select, Insert, Delete ou Update).


Principe pour afficher les données dans une DBGrid :
Poser un TOracleDataSet, un TDataSource (de l'onglet Data Access) et une DBGrid.
Relier :
  • le DataSet du TDataSource au TOracleDataSet.
  • le DataSource du DBGrid au TDataSource

Exemple pour mettre le SQL en passant par le code :
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
with OracleQuery1 do 
begin 
    SQL.Clear; 
    SQL.Add('select * from TABLE1'); 
    Execute; 
  
    while not Eof do 
    begin 
        { Faire les traitements} 
        Next; 
    end; 
end;
Récupération des erreurs lors de l'exécution d'une query :
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
try 
  Query.Execute;  { select * from LaTable} 
  ... 
except 
  on E:EOracleError do 
  begin 
    if E.ErrorCode = 942 then  { ORA-00942: Table or view does not exist} 
      ShowMessage('Erreur : la table n''a pas été trouvée'); 
    else 
      ShowMessage(E.Message); 
  end; 
end;

Mis à jour le 17 janvier 2014 Seb

Les composants NCOCI sont une série de composants gratuits avec sources disponibles ici : http://www.da-soft.com/

Posez un TOCIDatabase, un TOCIQuery, un TOCIUpdateSQL, un TDataSource et un TDBGrid sur une fiche. Les propriétés à renseigner sont :
Connexion au serveur
TOCIDatabase :

  • ServerName : Nom de la base accédée (elle doit figurer dans le fichier tnsnames.ora)
  • UserName / Password : Login / Mot de passe pour se connecter à la base
  • LoginPrompt : false (si UserName/Password renseignés)
  • DatabaseName : Nom de la base tel qu'il sera connu dans le programme (Default par défaut)


Ouverture d'une table
TOCIQuery :
  • DatabaseName : le même nom que pour le TOCIDatabase.DatabaseName (Default par défaut)
  • UpdateObject : Choisir le TOCIUpdateSQL posé sur la fiche
  • SQL : Texte de la requête SQL

TOCIUpdateSQL : rien à faire, les requêtes de mise à jour se génèrent toutes seules.

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 à OCIQuery1. Puis une grille reliée à DataSource1.

L'ouverture de la requête se fait par : TOCIQuery.Open. La connexion à la base est faite automatiquement.

Mis à jour le 17 janvier 2014 Bloon

La méthode proposée ici permet d'ouvrir une table d'une base Oracle 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 : Oracle
  • DriverName : Oracle
  • Params ( DataBase ) : le nom du serveur choisi lors de l'installation du client Oracle et donné dans tnsnames.ora
  • Params ( User ) : nom d'utilisateur
  • Params ( PassWord ) : mot de passe
  • LoginPrompt : False

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

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

DBExpress avec Delphi 6, par Henry Cesbron Lavau

Connexion au serveur
Pour se connecter au serveur placer un composant ADOConnection sur la fiche. Puis effectuer un clic droit sur le composant et choisir "Modifier la chaîne de connexion".
Cliquer ensuite sur le bouton construire pour utiliser l'assistant.
Sélectionner le fournisseur : "Microsoft OLE DB Driver for Oracle" et cliquer sur suivant. Entrer alors le nom du serveur Oracle. Ce nom doit être celui donné à l'installation d'Oracle et défini dans le fichier tnsnames.ora. Entrer alors le nom d'utilisateur et le mot de passe. Cocher l'option "autoriser l'enregistrement du mot de passe". Attention ceci n'est que pour exemple, il est déconseillé dans de vraies applications d'utiliser cette option, car le mot de passe serait alors stocké en clair dans le fichier EXE. Valider la chaîne.
Mettre enfin SQLConnection1.LoginPrompt à False.

Pour activer la connexion faire ADOConnection1.Open à l'exécution ou mettre ADOConnection1.Connected à True en conception.

Ouverture d'une table
Il suffit de placer un composant ADOQuery sur la fiche et de mettre :

  • Connection : ADOConnection1
  • SQL : mettre une requête SELECT simple ( SELECT * FROM UneTable )

Pour ouvrir la table faire ADOQuery1.Open à l'exécution ou mettre ADOQuery1.Active à True en conception.

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 à ADOQuery1. 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 Oracle. elle ne permet pas de se connecter à Oracle 9. Il n'est pas conseillé non plus de l'utiliser dans de nouvelles applications.

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

  • Dans le menu ocget choisir "Nouveau..."
  • Sélection ORACLE 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 doit être le nom choisi lors de l'installation du client Oracle et donné dans tnsnames.ora
  • Entrez le nom de l'utilisateur

Après avoir appliqué les modifications il est 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ée 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 Oracle. "PASSWORD" avec le mot de passe associé

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

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

Il s'agit de la solution BDE sans SQL-Links. La première chose à faire est de créer une source ODBC qui se connecte à la base désirée. Appelons-la 'testora'.

J'ai constaté une incompatibilité entre le driver d'Oracle et le BDE : les zones numériques sont renvoyées tronquées, il est donc préférable d'utiliser celui de Microsoft, fourni avec MDAC.

Sur une fiche, poser un TDatabase et un TQuery. Renseigner les propriétés suivantes :
TDatabase :

  • AliasName = 'testora' (nom de la source ODBC)
  • DatabaseName = 'dbTestOra'

Eventuellement, pour éviter d'avoir l'invite de connexion, renseigner le login/password dans les paramètres. Il faut double-cliquer sur le TDatabase et dans la boite de dialogue qui s'ouvre, cliquer sur "Défaut". Cela remplira la liste des paramètres de la connexion. Il faut alors renseigner USER NAME= et PASSWORD=. Décocher ensuite "Invite de connexion" (ce qui revient à mettre LoginPrompt à False).

TQuery :
  • DatabaseName = 'dbTestOra'
  • SQL = le texte de la requête

On peut également faire tout ceci par programme. Il suffit de poser un TDatabase et un TQuery sur la fiche, sans toucher aux propriétés.
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
procedure TForm1.FormCreate(Sender: TObject); 
var 
  i : integer; 
begin 
  { Préparation de la connexion à la Base de données} 
  with database1 do 
  begin 
    AliasName := 'testora'; { Nom de la source ODBC} 
    DatabaseName := 'dbTestOra'; { Nom de la base dans notre application} 
    LoginPrompt := false; 
    Session.GetAliasParams(AliasName,Params); 
    { Récupération du paramètre Login} 
    i := Params.IndexOf('USER NAME='); 
    if (i > -1) then 
      Params[i] := 'USER NAME=raoul' 
    else 
      Params.Add('USER NAME=raoul'); 
    { Ajout du paramètre password (il n'est pas renvoyé par GetAliasParams)} 
    Params.Add('PASSWORD=wolfoni'); 
  end; 
end; 
  
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  { Préparation et exécution de la requête} 
  with query1 do 
  begin 
    DatabaseName := Database1.DatabaseName; 
    SQL.Text := 'SELECT * FROM PERSONNES'; 
    Open; 
  end; 
end;

Pour constater que ça fonctionne, ajouter un TDataSource (Datasource1), dont le DataSet est Query1 et un TDBGrid, dont le DataSource est Datasource1.

Mis à jour le 17 janvier 2014 Bloon

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.