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éesAccess (7)
précédent sommaire suivant
 

Connexion a la base Pour ouvrir la base, 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 Jet 4.0 OLE DB Driver" et cliquer sur suivant. Entrer alors le chemin d'accès à la base ainsi que le nom d'utilisateur et son mot de passe. Valider la chaîne.
Mettre enfin ADOConnection1.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 :

  • Connexion : 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.

Cette connexion suppose que les composants d'accès aux données de Microsoft sont installés sur l'ordinateur.

Mis à jour le 17 janvier 2014 Nono40

Définition d'un source ODBC
Aller dans le panneau de configuration et lancer ODBC Data Source.
Dans l'onglet User DSN cliquer sur Ajouter puis sélectionner le driver Microsoft Access Driver (*.mdb). Donner un nom à la source de donnée, ce nom sera automatiquement reconnu comme nom d'alias dans le BDE. Sélectionner la base servant de source de donnée à l'aide du bouton Sélectionner.... Puis valider.

Le nouvel alias doit apparaître dans l'administrateur BDE. 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é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 Interbase. "PASSWORD" avec le mot de passe associé

Il suffit ensuite de faire DataBase1.Open pour ouvrir la base Access.

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.

Cette connexion suppose que les composants d'accès aux données de Microsoft sont installés sur l'ordinateur.

Mis à jour le 17 janvier 2014 Nono40

Les composants KADAO sont une suite de composants encapsulant le moteur jet de Microsoft. Il permettent d'ouvrir des bases Access 97 et Access 2000.
Ces composants sont téléchargeable gratuitement à l'adresse http://kadao.dir.bg/. Deux versions sont disponibles dont une est utilisable avec la version perso de Delphi. Dans le cas d'une utilisation avec Delphi pro ou supérieur il vaut mieux télécharger le version correspondante, car les composants ont les mêmes ancêtres que les autres composants BDD. Ils sont ainsi compatibles avec les composants d'accès aux données contenus dans Delphi.

Connexion de l'application Utiliser un composant TKaDaoDataBase pour réaliser et gérer la connexion.

  • Mettre dans DataBase le nom du fichier *.mdb

Il suffit ensuite de faire KaoDataBase1.Open pour ouvrir la base Access.

Ouverture d'une table
Placer un composant KaDaoTable sur la fiche et de mettre :
  • DataBase : KaDaoDataBase1
  • SQL : mettre une requête SELECT simple ( SELECT * FROM UneTable )
  • DataBaseAutoActivate : mettre à True. Ce n'est pas obligatoire mais cela permet d'obtenir le même comportement que les autres méthodes de la FAQ.

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

Note : Le composant de type Table et de type Requête sont représentés par le même composant dans KaDao.

Cette connexion suppose que les composants d'accès aux données de Microsoft sont installés sur l'ordinateur.

Mis à jour le 17 janvier 2014 Nono40

Si vous ne disposez pas du logiciel Access sur votre station et que vous désirez créer une nouvelle base Access (mdb), il vous suffit d'utiliser OLE.
Le fonction suivante attend en entrée le nom du fichier mdb. Si une exception est levée alors la fonction AccessDatabaseCreator renvoit un message d'erreur.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
uses comobj,sysutils;  
  
function AccessDatabaseCreator(_FileName : String) : String; 
var catalog : OLEVariant; 
begin 
  result := ''; 
  try 
    catalog := CreateOleObject('ADOX.Catalog'); 
    catalog.create ('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+_Filename+';'); 
    catalog := NULL; 
  except 
    on e : Exception do result := e.message; 
  end; 
end;
Exemple d'utilisation : AccessDatabaseCreator('c:\baseVide.mdb');

Mis à jour le 17 janvier 2014 Pascal Jankowski

En utilisant "Jet and Replication Objects" (JRO pour les intimes). JRO est une interface d'automation (OLE) qui permet d'effectuer des actions de maintenance sur des bases JET.
La fonction suivante permet de :

  • faire un backup de la base de données Access (le nom du backup sera NomBDD.mdb.bak)
  • compacter la base de données

Vous devez fournir en paramètres le chemin complet vers la base de données (ex : 'D:\Prog\MaBase.mdb') et le mot de passe de la base (si la base n'as pas de mot de passe, une simple chaîne vide convient).
La fonction renvoie un boolean à True, si toutes les actions se sont correctement déroulées, à False dans les autres cas.
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
function CompactAccessDB(DB, MdP : string): Boolean; {DB = path complet de la base Access, MdP = password de la DB } 
// Ajouter ComObj dans les Uses 
var 
  v: OLEvariant; 
begin 
  Result := False; 
  try 
    v := CreateOLEObject('JRO.JetEngine'); 
    try 
      if CopyFile(PAnsiChar(DB),PAnsiChar(DB+'.bak'),False) then //backup de la base 
      begin 
        V.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DB+';Jet OLEDB:Database Password='+MdP, 
                          'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DB+'comp'+';Jet OLEDB:Database Password='+MdP); //compactage 
        DeleteFile(DB);// suppression de la base d'origin 
        RenameFile(DB+'comp',DB); // mise en place de la base compactée 
        Result := True; 
      end; 
    finally 
      V := Unassigned; 
    end; 
  except 
    Result := False; 
  end; 
end;

Mis à jour le 17 janvier 2014 NoisetteProd

Non, son installation n'est pas nécessaire.
En revanche, vous devrez installer ou mettre à jour les composants logiciels MDAC (Microsoft Data Access Componant) ainsi que le Jet Engine et ce, sur les postes devant manipuler votre base Access.

Pour les versions de Windows (2k/Xp/2003) disposant de "Microsoft Update" les mises à jour de ces composants se font automatiquement.
Ces composants sont disponibles au téléchargement sur le site de Microsoft

Mis à jour le 17 janvier 2014 Rayek

Pour ce faire, on utilisera une chaîne de connexion utilisant le paramètre Extended properties :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
const 
   ///Chaîne de connexion ADO à construire avec le nom du répertoire contenant le fichier CSV 
  cstADOCsvConnexion='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Extended Properties="text;HDR=YES;Format=Delimited"'; 
... 
 //Appel 
  
MyADOConnection.ConnectionString :=Format(cstADOCsvConnexion,[ANomFichierCSV]);
En revanche pour les fichiers utilisant comme séparateur le point virgule ou tout autre caractère, on doit créer un fichier Schema.ini dans le répertoire où se trouve le fichier CSV :
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
{*------------------------------------------------------------------------------ 
Crée un fichier Schema.ini pour l'usage sous ADO d'un fichier CSV utilisant un séparateur hors des standard ADO.  
  @param APath: Chemin où créer le fichier Schema.ini, qui doit être celui du fichier .csv et doit être en R/W 
  @param AName: Nom du fichier CSV concerné. Il est utilisé comme nom de section dans le fichier Schema.ini 
  @Param ADelimiteur: Délimiteur utilisé dans le fichier csv, généralement le caractère point virugule ';'. 
------------------------------------------------------------------------------*} 
Procedure CreerSchemaIni(APath, ANameOnly: TFileName; const ADelimiteur: ShortString); 
 { 
[MonFichier.CSV] 
Format = Delimited(;) 
 } 
  
var 
  SchemaIni: TIniFile; 
begin 
try 
  SchemaIni:=Nil; 
  SchemaIni:=TIniFile.Create(IncludeTrailingPathDelimiter(APath)+'Schema.ini'); 
  SchemaIni.WriteString(ANameOnly, 'Format', 'Delimited('+ADelimiteur+')'); 
 finally 
  SchemaIni.Free; 
 end; 
end; 
  
end;
Vous trouverez de plus amples informations sur msdn ainsi que dans ce tutoriel. Ce site vous propose de nombreuses chaînes de connexion.

Le traitement utilise la même chaîne de connexion donnée précédemment :
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
procedure TfrmImpExp.ImportDirectCVSToBase(PathFichierCSV, NomFichierCSV:TFileName); 
{ 
Peut renvoyer l'exception EOleException : Type de données incompatible dans l'expression du critère 
Ceci est dû par exemple à un champ contenant une chaîne au lieu d'un integer. 
  
Avec un DataSet l'erreur serait: '52SPP298' n'est pas une valeur entière correcte pour le champ 'IDPAYS' 
} 
const 
     //NomTable NomPath+NomBase NomFichierText(sans le path) 
    Requete='INSERT INTO [%s] IN "%s" SELECT * FROM %s'; 
  
Var NomFichierCSV, 
    PathFichierCSV : TFileName; 
  
begin 
try 
  // Gestion du délimiteur ';' 
  CreerSchemaIni(PathFichierCSV, NomFichierCSV,cstDefautSeparateurChamp);  
  //"Ouvre" le fichier csv 
  MyADOConnection.ConnectionString :=Format(cstADOCsvConnexion,[PathFichierCSV]); 
  // Ajoute les lignes d'un fichier CSV directement dans la table 
  With dmPrincipal do // Avec dmPrincipal= class(TDataModule) 
  begin 
    // TADOConnection 
    ADOCntCSV.Execute(Format(Requete,[NomTable, 
                                     IncludeTrailingPathDelimiter(PathFichierCSV)+ cstNomBase, 
                                     NomFichierCSV])); 
  end; 
finally 
  with dmPrincipal do 
    ADOCntCSV.Close; 
end; 
end;
La requête ressemblera à ceci :
Code sql : Sélectionner tout
INSERT INTO [Clients] IN "c:\appli\base\base.mdb" SELECT * FROM NouveauxClients.csv
Le nom du fichier CSV ne doit pas contenir de tiret '-' ni d'espace car ils sont interprétés lors du parsing SQL. Par contre il doit contenir des données valides sinon la requête échoue (Type de données incompatible dans l'expression du critère).
Dans ce cas, on ne peut pas avoir le détail du premier champ fautif.

Il est possible d'utiliser un dataset avec le fichier CSV :
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
cstTxtQryCSV='Select * From %s'; 
... 
CreerSchemaIni(PathFichierCSV, NomFichierCSV,cstDefautSeparateurChamp); 
  
OpenCSV(PathFichierCSV); 
ADODtsCSV.CommandText:=Format(cstTxtQryCSV,[NomFichierCSV]); 
ADODtsCSV.Active := True;
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
{*------------------------------------------------------------------------------ 
Se connecte à la pseudo table basée sur un fichier CSV 
  @param APathCSV   Nom complet du fichier CSV pour un usage avec un DataSet ou le nom du répertoire pour un usage avec SQL 
------------------------------------------------------------------------------*} 
procedure TdmPrincipal.OpenCSV(APathCSV : TFileName); 
// Les champs entourés avec des "" sont filtrés, i.e. débarassés des " 
begin 
    //avec ADOCntCSV : TADOConnection;  
  OpenCntADO(ADOCntCSV,cstADOCsvConnexion,APathCSV); 
end; 
{*------------------------------------------------------------------------------ 
Exécute une connexion ADO. La connexion est fermée avant d'être réouverte avec la nouvelle chaîne de connexion. 
  @param ADOCnt   Connexion ADO concernée 
  @param CntString   Chaîne de connexion ADO 
  @param ANomFichier   Nom du fichier concerné (base Access ou fichier CSV) 
------------------------------------------------------------------------------*} 
procedure TdmPrincipal.OpenCntADO(ADOCnt : TADOConnection;CntString : String; ANomFichier: TFileName); 
begin 
 Assert(ANomFichier <> EMPTY_STRING,'Tentative d''ouverture d''une connexion ADO avec un nom de fichier vide.'); 
 with ADOCnt do 
 begin 
   Close; 
   ConnectionString :=Format(cntString,[ANomFichier]); 
   Open; 
 end; 
end;

Mis à jour le 17 janvier 2014 Laurent Dardenne

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