Difference between revisions of "Lazarus Database Tutorial/fr"

From Lazarus wiki
Jump to navigationJump to search
 
(48 intermediate revisions by 12 users not shown)
Line 3: Line 3:
 
== Aperçu ==
 
== Aperçu ==
  
Ce tutoriel à pour but de faire fonctionner Lazarus avec une diversité de bases de données existantes.
+
Ce tutoriel à pour but de faire fonctionner Lazarus avec diverses bases de données existantes.
  
Lazarus supportes plusieurs bases de données out-of-the-box, cependant le développeur doit installer les paquets adéquats pour chacun d'eux. Vous pouvez avoir accès à la base de données à travers du code ou en déposant des composants sur une fiche. The data-aware components represent fields and are connected by setting the DataSource property to point to a TDataSource. The Datasource represents a table and is connected to the database components (examples: TPSQLDatabase, TSQLiteDataSet) by setting the DataSet property. The data-aware components are located on the "Data Controls" tab. The Datasource and the database controls are located on the "Data Access" tab.
+
A son installation, Lazarus permet l'accès à plusieurs bases de données. Cependant le développeur doit installer les paquets adéquats pour chacune d'elles. Vous pouvez avoir accès à la base de données soit par du code, soit en déposant des composants sur une fiche. Les composants données représentent des champs et sont connectés en faisant pointer la propriété DataSource vers un TDataSource. Datasource représente une table et est connecté au composant de base de données (exemples : TPSQLDatabase, TSQLiteDataSet) en configurant la propriété DataSet. On trouve les composants contrôle de données dans le tab "Data Controls". Le composant Datasource et ceux contrôlant les bases de données sont situés dans l'onglet "Data Access".
  
 
== Lazarus et MySQL ==
 
== Lazarus et MySQL ==
  
 
=== Faire fonctionner MySQL dans Linux ou Windows ===
 
=== Faire fonctionner MySQL dans Linux ou Windows ===
Suivre les instructions dans le manuel de l'utilisateur de MySQL.  Soyez sur que le deamon mysqld fonctionne, et que tout les utilisateurs potentiels (incluant root, mysql, vous-même et n'importe qui d'autre pourrait le vouloir) ont autant de privilèges qu'ils ont besoin, depuis autant de serveurs centraux que cela pourrait être nécessaire(incluant 'localhost', le nom du serveur local, n'importe quel autre serveur sur votre réseau) aussi loin que c'est conforme avec la sécurité.  Il est préférable que tous les utilisateurs incluant root aient des mots de passe.  Tester l'action du système de base de donnée en utilisant les exemples donnés dans le manuel, et vérifier que tous les utilisateurs ont réellement des accès fiables.
+
Suivre les instructions dans le manuel de l'utilisateur de MySQL.  Soyez sûr que le deamon mysqld fonctionne, et que tout les utilisateurs potentiels (incluant root, mysql, vous-même et n'importe qui d'autre pourrait le vouloir) ont autant de privilèges qu'ils ont besoin, depuis autant de serveurs centraux que cela pourrait être nécessaire(incluant 'localhost', le nom du serveur local, n'importe quel autre serveur sur votre réseau) aussi loin que c'est conforme avec la sécurité.  Il est préférable que tous les utilisateurs incluant root aient des mots de passe.  Tester l'action du système de base de donnée en utilisant les exemples donnés dans le manuel, et vérifier que tous les utilisateurs ont réellement des accès fiables.
  
 
=== Faire fonctionner MySQL pour FPC en mode texte ===
 
=== Faire fonctionner MySQL pour FPC en mode texte ===
Il y a un répertoire avec un exemple de programme dans $(fpc<b>src</b>dir)/packages/base/mysql/. Vous pouvez trouver le répertoire source de fpc dans lazarus: menu Configurations-> Options d'environment... -> Onglet Fichier -> Répertoire des sources de FPC. Les chemins possibles pour le répertoire mysql sont /usr/share/fpcsrc/packages/base/mysql/ (rpm install) ou C:\lazarus\fpcsrc\packages\base\mysql\ (windows). Ce répertoire contient aussi les unités mysql.pp, mysql_com.pp et mysql_version.pp.  Avant d'executer le script de test, vous devez créer une base de données appelée testdb:  faire ceci en vous connectant dans le moniteur mysql (comme root avec tous les privilèges ) et en émettant la phrase SQL suivante
+
Il y a un répertoire avec un exemple de programme dans $(fpc<b>src</b>dir)/packages/base/mysql/. Vous pouvez trouver le répertoire source de fpc dans lazarus: menu Configurations-> Options d'environment... -> Onglet Fichier -> Répertoire des sources de FPC. Les chemins possibles pour le répertoire mysql sont /usr/share/fpcsrc/packages/base/mysql/ (rpm install) ou C:\lazarus\fpcsrc\packages\base\mysql\ (windows). Ce répertoire contient aussi les unités mysql.pp, mysql_com.pp et mysql_version.pp.  Avant d’exécuter le script de test, vous devez créer une base de données appelée testdb:  faire ceci en vous connectant dans le moniteur mysql (comme root avec tous les privilèges ) et en émettant la commande SQL suivante
 
  CREATE DATABASE testdb;
 
  CREATE DATABASE testdb;
 
ensuite soyez sur que tous les utilisateurs appropriés ont les privilèges d'accès appropriés  
 
ensuite soyez sur que tous les utilisateurs appropriés ont les privilèges d'accès appropriés  
Line 21: Line 21:
 
Ceci échouera probablement , car le système ne permettra pas à un utilisateur anonyme d'accéder à la base de données .  Aussi changer script en utilisant éditeur de sorte que la ligne appelant  mysql lise:
 
Ceci échouera probablement , car le système ne permettra pas à un utilisateur anonyme d'accéder à la base de données .  Aussi changer script en utilisant éditeur de sorte que la ligne appelant  mysql lise:
 
  mysql -u root -p  ${1-testdb} << EOF >/dev/null
 
  mysql -u root -p  ${1-testdb} << EOF >/dev/null
et essayez de l'exécuter à nouveau, en entrant votre mot de passe quand on vous y invite. Avec de la chance vous pourriez être parvenus à créer la base de donnée de test:  testez le (alors que vous êtes loggué dans le moniteur de mysql) en émettant la phrase mysql  
+
et essayez de l'exécuter à nouveau, en entrant votre mot de passe quand on vous y invite. Avec de la chance vous pourriez être parvenus à créer la base de donnée de test:  testez le (alors que vous êtes logué dans le moniteur de mysql) en émettant la commande mysql  
 
  select * from FPdev;
 
  select * from FPdev;
 
Vous devriez voir une table listant ID, username et email address de certains des développeurs de FPC .
 
Vous devriez voir une table listant ID, username et email address de certains des développeurs de FPC .
Line 36: Line 36:
  
 
J'ai créé une copie de testdb.pp appelé  trydb.pp, plutôt que d'éditer l'original  - ceci signifie que les fichiers originaux restent toujours fixes dans les mises à jour suivantes CVS.
 
J'ai créé une copie de testdb.pp appelé  trydb.pp, plutôt que d'éditer l'original  - ceci signifie que les fichiers originaux restent toujours fixes dans les mises à jour suivantes CVS.
J'ai également copié les fichiers trouvés dans le sous-répertoire mysql/ver40/ dans le sous répertoire principal  mysql/ , en les renommant mysql_v4.pp, mysql_com_v4.pp et mysql_version_v4.pp, Soyez sur de renommer les unités dans chaque fichier également. J'ai changé l'usage des phrases dans trydb.pp pour utiliser  
+
J'ai également copié les fichiers trouvés dans le sous-répertoire mysql/ver40/ dans le sous répertoire principal  mysql/ , en les renommant mysql_v4.pp, mysql_com_v4.pp et mysql_version_v4.pp, Soyez sur de renommer les unités dans chaque fichier également. J'ai changé l'usage des instructions dans trydb.pp pour utiliser  
 
  uses mysql_v4
 
  uses mysql_v4
et la phrase dans mysql_v4.pp pour
+
et l'instruction dans mysql_v4.pp pour
  
  utiliser mysql_com_v4
+
  use mysql_com_v4
  
 
J'ai ajouté une ligne à  /etc/fpc.cfg pour pointer vers mes librairies:
 
J'ai ajouté une ligne à  /etc/fpc.cfg pour pointer vers mes librairies:
Line 60: Line 60:
 
   passwd: Pchar = 'mypassword';
 
   passwd: Pchar = 'mypassword';
  
J'ai également trouvé que je ne pourrais pas me connecter à mysql en utilisant l'appel à mysql_connect() , mais j'ai dû employer mysql_real_connect() lequel a beaucoup plus de paramètres.  Pour compliquer des choses un peu plus, le nombre de paramètres  semble avoir changé entre la version 3 (où il y en a sept) et la version 4 (où il y en a huit).  Avant d'utiliser mysql_real_connect J'ai dû employer mysql_init() lequel n'est pas trouvé dans le mysql.pp d'orige mais est trouvé dans  mysql_v4.pp.
+
J'ai également trouvé que je ne pourrais pas me connecter à mysql en utilisant l'appel à mysql_connect() , mais j'ai dû employer mysql_real_connect() lequel a beaucoup plus de paramètres.  Pour compliquer des choses un peu plus, le nombre de paramètres  semble avoir changé entre la version 3 (où il y en a sept) et la version 4 (où il y en a huit).  Avant d'utiliser mysql_real_connect J'ai dû employer mysql_init() lequel n'est pas trouvé dans le mysql.pp d'origine mais est trouvé dans  mysql_v4.pp.
  
 
Ainsi le code pour se connecter à la base de données est maintenant :
 
Ainsi le code pour se connecter à la base de données est maintenant :
Line 107: Line 107:
  
  
Maintenant - pret pour commencer à compiler trydb.pp?
+
Maintenant - prêt pour commencer à compiler trydb.pp?
 
   fpc trydb
 
   fpc trydb
succès !  Executez le maintenant :
+
succès !  Exécutez le maintenant :
 
   ./trydb
 
   ./trydb
 
whoopee!  J'ai obtenu le listing des développeurs de FPC !
 
whoopee!  J'ai obtenu le listing des développeurs de FPC !
  
Quelques améliorations supplémentaires :  rendre l'entrée des détails d'utilisateur et les commandes mysql interactives , en utilisant des variables plutôt que des constantes , et en autorisant plusieur commandes SQL a être entrées, jusqu'à ce que nous émettions la commande quit: voir le [[Lazarus Database Tutorial/TryDbpp|listing complet de programme]], où les détails d'utilisateur sont entrés via la console , et le programme entre dans une boucle  où les commandes SQL sont entrés depuis la console(sans point-virgule terminal ) et les réponses sont imprimées , jusqu'à ce que 'quit' soit entré au clavier .
+
Quelques améliorations supplémentaires :  rendre l'entrée des détails d'utilisateur et les commandes mysql interactives , en utilisant des variables plutôt que des constantes , et en autorisant plusieurs commandes SQL a être entrées, jusqu'à ce que nous émettions la commande quit: voir le [[Lazarus Database Tutorial/TryDbpp|listing complet de programme]], où les détails d'utilisateur sont entrés via la console , et le programme entre dans une boucle  où les commandes SQL sont entrés depuis la console(sans point-virgule terminal ) et les réponses sont imprimées , jusqu'à ce que 'quit' soit entré au clavier .
  
 
Voir  [[Lazarus Database Tutorial/SampleListing|Exemple de listing sur la console]].
 
Voir  [[Lazarus Database Tutorial/SampleListing|Exemple de listing sur la console]].
Line 119: Line 119:
 
===Se connecter à MySQL à partir d'une application Lazarus===
 
===Se connecter à MySQL à partir d'une application Lazarus===
  
Ce tutoriel montre comment connecter Lazarus à la base de donnée MySQL, et exécuter des requêtes simples , en employant seulement les composants de base de Lazarus; it uses no Data Aware components, mais illustre les principes d'interfacage à la base de données .
+
Ce tutoriel montre comment connecter Lazarus à la base de donnée MySQL, et exécuter des requêtes simples , en employant seulement les composants de base de Lazarus; il n'utilise aucun composants Data Aware, mais illustre les principes d' interfaçage à la base de données .
 +
 
 +
NB : Les paquets ZeosLib ou SqlDb fournissent des composants qui permettent d'utiliser MySql bien plus simplement qu'avec la méthode proposée ci-dessous.
  
 
Créer un nouveau projet dans  Lazarus:
 
Créer un nouveau projet dans  Lazarus:
 
  Project -> New Project -> Application
 
  Project -> New Project -> Application
Une nouvelle forme générée automatiquement apparaîtra .
+
Une nouvelle forme générée automatiquement apparaîtra.
  
 
Agrandir la forme pour remplir environ la moitié de l'écran , renommer alors la forme et son Caption avec 'TryMySQL'.
 
Agrandir la forme pour remplir environ la moitié de l'écran , renommer alors la forme et son Caption avec 'TryMySQL'.
  
From the Standard Component tab place three Edit Boxes on the upper left side of the Form, and immediately above each box place a label.  Change the names and captions to 'Host' (and HostLLabel,HostEdit), 'UserName' (and UserLabel, UserEdit) and 'Password' (with PasswdLabel and PasswdEdit).  Alternatively you could use LabelledEdit components from the Additional tab.
+
A partir de l'onglet de composants standard placer trois boites d'édition sur le côté gauche supérieur de la fiche, et immédiatement au-dessus de chaque boite placez un label .  Changer les noms et les captions en  'Host' (et HostLLabel,HostEdit), 'UserName' (et UserLabel, UserEdit) et 'Password' (avec PasswdLabel et PasswdEdit).  Alternativement vous pourriez employer les composants LabelledEdit à partir de l'onglet additionnel.
  
Select the Passwd Edit box and find the PasswordChar property: change this to * or some other character, so that when you type in a password the characters do not appear on your screen but are echoed by a series of *s. Make sure that the Text property of each edit box is blank.
+
Sélectionnez la boite d'édition Passwd et trouver la propriété PasswordChar: changer ceci en * ou un autre caractère, de sorte que quand vous saisissez un mot de passe  les caractères n'apparaissent pas sur votre écran  mais se font écho par une série de *s. Assurer vous que la propriété Text de chaque boite d'édition est blanche.
  
Now place another Edit box and label at the top of the right side of your formChange the label to 'Enter SQL Command' and name it CommandEdit.
+
Placer maintenant une autre boite Edit et un label au dessus du côté droit de la fiche. Changer le label en 'Enter SQL Command' et nommez le CommandEdit.
  
Place three Buttons on the form: two on the left under the Edit boxes, and one on the right under the command box.
+
Placer trois boutons sur la fiche : deux du côté gauche dessous les boites Edit, et un du côté droit dessous la boite de commande.
  
Label the buttons on the left 'Connect to Database' (ConnectButton)and 'Exit' (ExitButton) and the one on the right 'Send Query' (QueryButton).
+
Etiqueter les boutons du côté gauche  'Connect to Database' (ConnectButton) et 'Exit' (ExitButton) et celui du côté droit 'Send Query' (QueryButton).
  
Place a large Memo Box labelled and named 'Results' (ResultMemo) on the lower right, to fill most of the available space. Find its ScrollBars property and select ssAutoBoth so that scroll bars appear automatically if text fills the space. Make the WordWrap property True.
+
Placer un grand Memo Box étiqueté et nommé 'Results' (ResultMemo) sur la droite en bas , pour remplir majeure partie de l'espace disponible. Trouver sa propriété ScrollBars et choisir ssAutoBoth de sorte que les barres de défilement apparaissent automatiquement si le texte remplit l'espace. Rendre la propriété WordWrap à la valeur True.
  
Place a Status Bar (from the Common Controls tab) at the bottom of the Form, and make its SimpleText property 'TryMySQL'.
+
Placer une barre de Status (à partir de l'onglet de Contrôle commun) au bas de la fiche, et appeler sa propriété SimpleText 'TryMySQL'.
  
A screenshot of the Form can be seen here: [http://lazarus-ccr.sourceforge.net/kbdata/trymysqldb.png Mysql Example Screenshot]
+
Une copie d'écran de la fiche peut être vue ici: [http://lazarus-ccr.sourceforge.net/kbdata/trymysqldb.png Exemple de copie d'écran Mysql ]
  
Now we need to write some event handlers.
+
Maintenant nous devons écrire quelques procédures de traitement d’événement.
  
The three Edit boxes on the left are for entry of hostname, username and passwordWhen these have been entered satisfactorily, the Connect Button is clicked. The OnCLick event handler for this button is based on part of the text-mode FPC program above.
+
Les trois boites d'édition du côté gauche sont pour l'entrée du hostname , du username et mot de passe Quand ceux-ci ont été entrés de manière satisfaisante, le bouton de connexion est cliqué. Le traitement de l’événement OnCLick pour ce bouton est basé sur une partie du programme FPC en mode texte ci-dessus .
  
The responses from the database cannot now be written using the Pascal write or writeln statements: rather, the replies have to be converted into strings and displayed in the Memo boxWhereas the Pascal write and writeln statements are capable of performing a lot of type conversion 'on the fly', the use of a memo box for text output necessitates the explicit conversion of data types to the correct form of string, so Pchar variables have to be converted to strings using StrPas, and integers have to be converted with IntToStr.   
+
Les réponses de la base de données ne peut pas maintenant être écrites en employant les instructions Pascal write ou  writeln: plutôt, les réponses doivent être converties en chaînes de caractères et affiché dans la boîte Mémo Considérant que les instructions Pascal write et writeln sont capable d'exécuter beaucoup de type conversion 'à la volée', l'utilisation d'une boîte Mémo pour la sortie de textes rend nécessaire la conversion explicite des types de données à la forme correcte de chaînes de caractères , ainsi les variables Pchar doivent être converties en chaînes de caractères en utilisant StrPas , et les nombres entiers doivent être convertis avec IntToStr.   
  
Strings are displayed in the Memo box using
+
Les chaînes de caractères sont affichées dans la boite Mémo en utilisant
  
 
  procedure ShowString (S : string);
 
  procedure ShowString (S : string);
Line 157: Line 159:
 
  end;
 
  end;
  
The ConnectButton event handler thus becomes:
+
L'évent hantler ConnectButton devient ainsi:
  
 
  procedure TtrymysqlForm1.ConnectButtonClick(Sender: TObject);
 
  procedure TtrymysqlForm1.ConnectButtonClick(Sender: TObject);
Line 202: Line 204:
  
  
The Text Box on the right allows entry of a SQL statement, without a terminal semicolonwhen you are satisfied with its content or syntax, the SendQuery button is pressed, and the query is processed, with results being written in the ResultsMemo box.
+
La boîte de textes du côté droit permet l'entrée d'instructions SQL, sans point-virgule terminal ;  quand vous êtes satisfaits de son contenu ou syntaxe , le bouton SendQuery est appuyé , et la requête est traitée , avec les résultats  écrit dans la boîte ResultsMemo .
  
The SendQuery event handler is again based on the FPC text-mode version, except that once again explicit type-conversion has to be done before strings are displayed in the box.
+
Le traitement de l'évènement SendQuery est de nouveau basé sur la version FPC en mode texte, sauf que de nouveau un type de conversion explicite doit être fait avant que les châines de caractère soient montrées dans la boîte .
  
A difference from the text-mode FPC program is that if an error condition is detected, the program does not halt and MySQL is not closedinstead, control is returned to the main form and an opportunity is given to correct the entry before the command is re-submitted. The application finally exits (with closure of MySQL) when the Exit Button is clicked.
+
Une différence avec le programme FPC en mode texte est que si une condition d'erreur est détectée, le programme ne stoppe pas et MySQL n'est pas ferméau lieu de cela, la commande est retournée à la fiche principale et une occasion est donnée de corriger l'entrée avant la commande ne soit resoumis. L'application existe finalement(avec la fermeture de MySQL ) quand le bouton de sortie est cliqué .
  
The code for SendQuery follows:
+
Le code pour SendQuery suit :
  
 
  procedure TtrymysqlForm1.QueryButtonClick(Sender: TObject);
 
  procedure TtrymysqlForm1.QueryButtonClick(Sender: TObject);
Line 249: Line 251:
  
  
Save your Project, and press Run -> Run
+
Enregistrez votre projet, et appuyez sur Run -> Run
  
==== Download MYSQL Source Code ====
+
==== Télécharger le code source MYSQL ====
A full listing of the program is available here [http://lazarus-ccr.sourceforge.net/kbdata/mysqldemo.tar.gz Sample Source Code]
+
Un listing complet du programme est disponible ici [http://lazarus-ccr.sourceforge.net/kbdata/mysqldemo.tar.gz Exemple de code source]
  
== Lazarus and PostgreSQL ==
+
== Lazarus et  PostgreSQL ==
  
This is a very short tutorial to get Lazarus 0.9.12 or later to connect to a PostgreSQL database, local or remote, using TPQConnection.
+
C'est un tutoriel très court pour obliger Lazarus 0.9.12 ou ultérieur à se relier à une base de données PostgreSQL, en local ou à l'extérieur, en employant TPQConnection.
  
After correct install, follow these steps:
+
Après une installation correcte, suivre ces étapes :
  
* Place a PQConnection    from the SQLdb tab
+
* Placer un PQConnection    depuis l'étiquette SQLdb  
* Place a SQLQuery        from the SQLdb tab
+
* Placer un SQLQuery        depuis l'étiquette SQLdb  
* Place a SQLTransaction  from the SQLdb tab
+
* Placer un SQLTransaction  depuis l'étiquette SQLdb  
* Place a DataSource      from the DataAccess tab
+
* Placer un DataSource      depuis l'étiquette DataAccess
* Place a DBGrid          from the DataControls tab
+
* Placer un DBGrid          depuis l'étiquette DataControls
  
* In the PQConnection fill in:
+
* Dans la PQConnection compléter:
** transaction property with the respective SQLTransaction object
+
** La propriété transaction avec l'objet respectif SQLTransaction  
** Database name
+
** Nom de la base de données
** HostName
+
** Nom de l'hôte
** UserName + password
+
** Nom de l'utilisateur + mot de passe
  
* Check that the SQLTransaction was automatically changed to point to the PQConnection
+
* Vérifier que SQLTransaction a été automatiquement changé pour pointer vers PQConnection  
  
* In the SQLQuery fill in:
+
* Dans la SQLQuery compléter:
** transaction property with the respective object
+
** la propriété transaction avec l'objet respectif
** database property with respective object
+
** la propriété database avec l'objet respectif
** SQL (something like 'select * from anytable')
+
** SQL (quelque chose comme 'select * from anytable')
  
* In the DataSource object fill in the DataSet property with the SQLQuery object
+
* Dans l'objet DataSource compléter la propriété DataSet avec l'objet SQLQuery  
  
* In the DBGrid fill in the datasource as the DataSource Object
+
* Dans DBGrid compléter la source de donnée comme l'objet DataSource
  
Turn everything to connected and active and the DBGrid should be filled in design time.
+
Mettez tout sur connecté et actif et la DBGrid devrait être complété à la conception.
TDBText and TDBEdit seem to work but (for me) they only _show_ _data_.
+
TDBText et  TDBEdit sembler fonctionner mais (pour moi ) ils montrent seulement des données.
  
To change contents in the database, I called the DB Engine direct with the following code:
+
Pour changer le contenu dans la base de données , j'ai appelé le moteur DB directement avec le code suivant :
 
   try
 
   try
 
     sql:= 'UPDATE table SET setting=1';
 
     sql:= 'UPDATE table SET setting=1';
Line 303: Line 305:
  
 
* Notes:
 
* Notes:
** Tested on windows, Lazarus 0.9.12 + PgSQL 8.3.1
+
** Testé sur windows, Lazarus 0.9.12 + PgSQL 8.3.1
** Some tests in linux, Lazarus 0.9.12 and PgSQL 8.0.x
+
** Quelques tests dans linux, Lazarus 0.9.12 et PgSQL 8.0.x
  
  
* Instalation and errors:
+
* Installation et erreurs :
** In the tested version of Lazarus .12, fields of type "text" and "numeric" have bugs
+
** Dans la version testée de Lazarus 0.9.12, Les champs de type "text" et "numeric" ont des bugs
** I used with no problems char fixed size, int and float8
+
** J'ai utilisé sans problème des caractères de taille fixe, int et float8
** Sometimes restarting Lazarus solves stupid errors...
+
** Parfois la remise en marche de Lazarus résout des erreurs stupides ...
** After some errors, the transactions remain active and should be deactivated mannually
+
** Après quelques erreurs , les transactions demeurent actives et devraient être désactivées mannuellement
** Changes made in Lazarus are of course not visible until transaction commited
+
** Les changements faits dans Lazarus être naturellement non visible jusqu'à ce que la transaction soit effectuée
** The integrated debugger seems buggy (at least in windows) - sometimes running outside of the IDE may help to find errors
+
** Le debugger intégré semble buggé (au moins dans windows) - parfois une exécution en dehors de l'ide peut aider à trouver des erreurs
** In linux certain error messages are printed in the console -- run your program in the command line, sometimes there is some extra useful debugging info
+
** Dans linux certains messages d'erreur sont imprimés dans la console -- exécuter votre programme en ligne de commande , parfois il y a certaine information utile supplémentaire de correction
** Error: "Can not load Postgresql client. Is it installed (libpq.so) ?"
+
** Erreur : "Can not load Postgresql client. Is it installed (libpq.so) ?"
*** Add the path to seach libpq* from the PostgreSQL installation.
+
*** Ajouter le chemin pour rechercher  libpq* à partir de l'installation de PostgreSQL.
*** In linux add the path to the libpq.so file to the libraries section in your /etc/fpc.cfg file. For example : -Fl/usr/local/pgsql/lib
+
*** Dans le linux ajouter le chemin au fichier libpq.so à la section bibliothèques de votre fichier /etc/fpc.cfg. Par exemple  : -Fl/usr/local/pgsql/lib
***  In windows, add these libs anywhere in the Path environment variable or project dir
+
***  Dans windows, ajouter ces bibliothèques n'importe où  dans la variable d'environnement Path ou dans le répertoire projet
***  I windows, I copied all the DLLs in my C:\Program Files\PostgreSQL\8.1\bin dir to another dir in the PATH  
+
***  Dans windows, J'ai copié tout DLLs dans le mon répertoire C:\Program Files\PostgreSQL\8.1\bin ver un autre répertoire  dans le PATH  
***  Or add this postgres\bin dir to the path
+
***  Ou ajouter ce répertoire postgres\bin vers le path
  
== Lazarus and SQLite ==
+
== Lazarus et SQLite ==
  
by Luiz Américo
+
par Luiz Américo
  
Goto the [http://www.sqlite.org/ sqlite] homepage for more information.
+
Aller sur la page d'accueil [http://www.sqlite.org/ sqlite] pour plus d'information .
  
 
===Introduction===
 
===Introduction===
  
TSqliteDataset and TSqlite3Dataset are TDataset descendants that access, respectively, 2.8.x and 3.2.x sqlite databases. Below is a list of the principal advantages and disadvantages:
+
TSqliteDataset et TSqlite3Dataset sont des descendants de TDataset qui accèdent, respectivement, aux bases de données sqlite version 2.8.x et 3.2.x. Ci-dessous une liste des principaux avantages et inconvénients :
  
Advantages:
+
Avantages :
  
* Flexible: programmers can choose to use or not to use the SQL language, allowing them to work with simple table layouts or any complex layout that SQL/sqlite allows
+
* Flexible : les programmeurs peuvent choisir d'employer ou de ne pas employer le langage SQL, leur permettant de travailler avec les dispositions simples de tables ou n'importe quelle disposition complexe que SQL/sqlite permet
* Automatic database update: no need to  update the database manually with SQL statements, a single method take cares of it
+
*Mise à jour automatique de la base de données : aucun besoin de mettre à jour manuellement la base de données avec des instructions SQL, une méthode simple s'occupe de ça
* Fast: it caches the data in memory, making browsing in the dataset fast
+
* Rapide : il cache les données en mémoire, rendant la navigation dans le jeux de données rapide
* No server instalation/configuration: just ship together with sqlite dynamic library
+
* Aucune installation/configuration de serveur : simplement fournir la bibliothèque sqllite avec l'exe
  
Disavantages
+
Inconvénients
  
* Requires external file (sqlite library)
+
* Exige des fichiers externes (Bibliothèque sqlite)
  
===Requirements===
+
===Exigences===
  
* For sqlite2 databases:
+
* Pour les bases de données sqlite2 :
 
** fpc 2.0.0
 
** fpc 2.0.0
 
** Lazarus 0.9.10
 
** Lazarus 0.9.10
** sqlite runtime library 2.8.15 or above (get from www.sqlite.org)
+
** la bibliothèque d'exécution sqlite 2.8.15 ou au-dessus (l'obtenir de  www.sqlite.org)
  
* For sqlite3 databases:
+
* Pour les bases de données sqlite3:
 
** fpc 2.0.2
 
** fpc 2.0.2
** Lazarus 0.9.11 (svn revision 8443 or above)
+
** Lazarus 0.9.11 (svn revision 8443 ou au-dessus)
** sqlite runtime library 3.2.1 or above (get from www.sqlite.org)
+
** la bibliothèque d'exécution sqlite 3.2.1 ou au-dessus (l'obtenir de www.sqlite.org)
  
'''Before initiating a lazarus projects, ensure that:'''
+
'''Avant le lancement d'un projet Lazarus , assurez vous que :'''
* the sqlite library is on the system PATH or in the executable directory
+
* la bibliothèque sqlite est dans le PATH système ou dans le répertoire de l'exécutable
* under Linux, put cmem as the first unit in uses clause of the main program
+
* sous  Linux, mettre cmem comme première unité dans la clause uses du programme principal
  
===How To Use (Basic Usage)===
+
=== Comment l'employer (Utilisation de base )===
  
Install the package found at /components/sqlite directory (see instructions [[Install_Packages|here]])
+
Installer le paquet trouvé dans le répertoire /components/sqlite (voir les instructions [[Install_Packages/fr|ici]])
  
At design time set the following properties:
+
Pendant la conception fixer les propriétés suivantes:
  
* FileName: path of the sqlite file [required]  
+
* FileName: chemin du fichier sqlite [requis ]  
* TableName: name of the table used in the sql statement [required]  
+
* TableName: nom de la table utilisée dans la phrase sql [requis ]  
* Sql: a SQL select statement [optional]  
+
* Sql: une phrase de sélection SQL[facultatif ]  
  
'''Creating a Table (Dataset)'''
+
'''Créer un Table (jeux de donnée)'''
  
Double click in the component icon or use the 'Create Table' item of the popup menu that appears when clicking the right mouse button.
+
Double cliquez sur l'icone du composant ou employer l'item  'Create Table' du menu automatique qui apparaît en cliquant le bouton de souris droit .
A simple self-explaining table editor will be show.
+
Un simple éditeur de table parlant de lui-même sra montré.
  
   Here is all field types supported by TSqliteDataset and TSqlite3Dataset:  
+
   Voici tous les types de champ soutenus par TSqliteDataset et TSqlite3Dataset:  
 
    
 
    
 
   Integer
 
   Integer
Line 389: Line 391:
 
   Currency
 
   Currency
 
    
 
    
'''Retrieving the data'''
+
'''Recherche des données '''
  
After creating the table or with a previously created Table, open the dataset with Open method.
+
Après avoir créé la table ou avec une table précédemment créée ,ouvrir l'ensemble des données avec la méthode ouvrir .
If the SQL property was not set then all records from all fields will be retrieved, the same if you set the SQL to:
+
Si la propriété SQL n'était fixée alors tous enregistrements de tous les champs seront recherchés, la même chose si vous fixiez le SQL à :
  
 
   SQL:='Select * from TABLENAME';  
 
   SQL:='Select * from TABLENAME';  
  
'''Applying changes to the underlying datafile'''
+
'''Application des changements au fichier de donnée sous-jacent '''
  
To use the ApplyUpdates function, the dataset must contain at least one field that fills the requirements for a Primary Key (values must be UNIQUE and not NULL)
+
Pour utiliser la fonction ApplyUpdates, l'ensemble de données doit contenir au moins un champ qui remplit les conditions  pour une clef primaire (les valeurs doivent être UNIQUES et NON NULLES )
  
It's possible to do that in two ways:
+
C'est possible de faire cela de deux manières :
  
* Set PrimaryKey property to the name of a Primary Key field
+
* Fixer la propriété PrimaryKey avec le nom du champ clef primaire
* Add an AutoInc field (This is easier since the TSqliteDataSet automatically handles it as a Primary Key)
+
* Ajouter un champ AutoInc (C'est plus facile puisque TSqliteDataSet le manipule automatiquement comme clef primaire )
  
If one of the two conditions is set then just call
+
Si une des deux conditions est fixée alors appeler juste
 
    
 
    
 
   ApplyUpdates;
 
   ApplyUpdates;
  
PS1: If both conditions are set, the field corresponding to PrimaryKey is used to apply the updates.
+
PS1: Si les deux conditions sont fixées, le champ correspondant à PrimaryKey est employé pour appliquer les mises à jour .
  
PS2: Setting PrimaryKey to a field that is not a Primary Key will lead to loss of data if ApplyUpdates is called, so ensure that the chosen field contains not Null and Unique values before using it.
+
PS2: Le réglage de PrimaryKey à un champ qui n'est pas une clef primaire mènera à la perte de données si ApplyUpdates est appellé, aussi assurez vous que le champ choisi contient des valeurs non nulles et uniques avant de l'employer .
  
===Remarks===
+
===Remarques ===
  
* Although it has been tested with 10000 records and worked fine, TSqliteDataset keeps all the data in memory, so remember to retrieve only the necessary data (principally with Memo Fields).
+
* Bien que cela ait été testé avec 10000 enregistrements et très bien fonctionné, TSqliteDataset conserve toutes données en mémoire, aussi rappelez-vous de rechercher seulement les données nécessaires (principalement avec les champs Mémo).
* The same datafile (Filename property) can host several tables/datasets
+
* Le même fichier de donnée (propriété Filename) peut accueillir plusieurs tables/ensembles de données
* Several datasets (different combinations of fields) can be created using the same table simultaneously
+
* Plusieurs ensembles de données (combinaisons differentes des champs )peuvent être créés en utilisant la même table simultanément  .
* It's possible to filter the data using WHERE statements in the sql, closing and reopening the dataset (or calling RefetchData method). But in this case, the order and number of fields must remain the same
+
* Il est possible de filtrer les données en utilisant les instructions WHERE dans sql, en fermant et en réouvrant l'ensemble de données(ou en appelant la méthode RefetchData). Mais dans ce cas-ci, l'ordre et le nombre de champs doivent demeurer le même. 
* It's also possible to use complex SQL statements using aliases, joins, views in multiple tables (remember that they must reside in the same datafile), but in this case ApplyUpdates won't work. If someone wants to use complex queries and to apply the updates to the datafile, mail me and I will give some hints how to do that
+
* Il est également possible d'employer des instructions complexes de SQL en utilisant des alias, jointures, vues dans des tables multiples (se rappeler qu'ils doivent résider dans le même ficihier de données), mais dans ce cas-ci ApplyUpdates ne fonctionnera pas. Si quelqu'un veut employer des requêtes complexes et appliquer les mises à jour au fichier de données, expédiez-moi un mail et je donnerai quelques conseils sur comment à faire cela.
* Setting filename to a sqlite2.x datafile not created by TSqliteDataset and opening it is allowed but some fields won't have the correct field type detected. These will be treated as string fields.
+
* fixer un nom de fichier à un fichier de données sqlite2.x non créé par TSqliteDataset et l'ouvrir est possible mais quelques champs n'auront pas le type de champ correct détecté. Ceux-ci seront traités comme champs de chaîne de caractère.
  
Generic examples can be found at fpc/fcl/db/sqlite CVS directory
+
Des exemples génériques peuvent être trouvés dans le répertoire CVS fpc/fcl/db/sqlite  
  
 
Luiz Américo
 
Luiz Américo
 
pascalive(at)bol(dot)com(dot)br
 
pascalive(at)bol(dot)com(dot)br
  
== Lazarus and MSSQL ==
+
== Lazarus et  MSSQL ==
  
It is working with Zeoslib (latest cvs), see the links on bottom of page.
+
Cela fonctionne avec Zeoslib (dernier cvs), voir les liens sur le bas de la page .
  
== Lazarus and Interbase / Firebird ==
+
== Lazarus et Interbase / Firebird ==
  
See [[Install Packages|Install Packages]]. On this page is a first small example en explanation about how to connect to an IB or FB server.
+
Voir [[Install Packages/fr|Installer les paquets ]]. Sur cette page est un premier petit exemple d'explication à propos de la manière de se relier à un serveur IB ou FB .
  
Also work with the latest Zeoslib (from cvs).
+
fonctionne aussi avec le dernier Zeoslib (du cvs).
  
===FBLib Firebird Library===
+
===Librairie Firebird FBLib===
  
[http://fblib.altervista.org/|FBLib] is an open Source Library No Data Aware for direct access to Firebird Relational Database from Borland Delphi / Kylix, Freepascal and Lazarus.
+
[http://fblib.altervista.org/|FBLib] est une bibliothèque open Source No Data Aware for direct access to Firebird Relational Database from Borland Delphi / Kylix, Freepascal and Lazarus.
  
Current Features include:
+
Les fonctionnalités actuelles incluent:
  
* Direct Access to Firebird 1.0.x 1.5.x Classic or SuperServer
+
* Accès direct classique ou superserveur à Firebird 1.0.x 1.5.x  
* Multiplatform [Win32,Gnu/Linux,FreeBSD)
+
* Multiplatforme [Win32,Gnu/Linux,FreeBSD)
* Automatic select client library 'fbclient' or 'gds32'
+
* Bibliothèque avec choix automatique de client 'fbclient' ou 'gds32'
* Query with params
+
* Requête avec des param
* Support SQL Dialect 1/3
+
* Support du dialecte SQL 1/3
* LGPL License agreement
+
* Accord de licence LGPL
* Extract Metadata
+
* Extration de Méta-données
* Simple Script Parser
+
* Analyseur simple de manuscrit
* Only 100-150 KB added into final EXE
+
* Seulement 100-150 KB sont ajoutés dans l'EXE final
* Support BLOB Fields
+
* Support des champs BLOB
* Export Data to HTML SQL Script
+
* Exporte des données au Script HTML SQL  
* Service manager (backup,restore,gfix...)
+
* manageur de Service (backup,restore,gfix...)
* Events Alerter
+
* Alerte d'évènements
  
You can download documentation on [http://fblib.altervista.org/ FBLib's website].
+
Vous pouvez télécharger la documentation sur [http://fblib.altervista.org/ le site FBLib].
  
== Lazarus and dBase ==
+
== Lazarus et dBase ==
  
 
[[user:Tonymaro|Tony Maro]]
 
[[user:Tonymaro|Tony Maro]]
  
You might also want to visit the beginnings of the [[Lazarus Tdbf Tutorial|TDbf Tutorial page]]
+
Vous pourriez également vouloir visiter les commencements de la  [[Lazarus Tdbf Tutorial/fr|page de tutoriel TDbf]]
  
FPC includes a simple database component that is similar in function to the Delphi TTable component called "TDbf" ([http://tdbf.sourceforge.net/ TDbf Website]) that supports a very basic subset of features for dBase files. It is not installed by default, so you will first need to install the Lazarus package from the "lazarus/components/tdbf" directory and rebuild your Lazarus IDE. It will then appear next to the TDatasource in your component palette.
+
FPC inclut un composant simple de base de données  qui est semblable dans la fonction au composant TTable de Delphi appelé  "TDbf" ([http://tdbf.sourceforge.net/ Site Web de TDbf]) qui supporte un sous ensemble très basique de possibilités sur les fichiers dBase. Il n'est pas installé par défaut , ainsi vous devrez d'abord installer le paquet Lazarus à partir du répertoire "lazarus/components/tdbf" et reconstruire votre IDE Lazarus. Il apparaîtra alors à côté du composant TDatasource dans votre palette de composant.
  
The TDbf component has an advantage over other database components in that it doesn't require any sort of runtime database engine, however it's not the best option for large database applications.
+
Le composant TDbf a un avantage par rapport à d'autres composants de base de données parce qu'il n'exige aucune sorte de moteur d'exécution de base de données, cependant ce n'est pas la meilleure option pour des applications avec de grandes base de données.
  
It's very easy to use. Simply, put, drop a TDbf on your form, set the runtime path to the directory that your database files will be in, set the table name, and link it to your TDatasource component.
+
Il est très facile d'emploi. Simplement, mettre, déposer un composant TDbf sur votre fiche, placer le chemin d'exécution  dans le répertoire dans lequel seront vos fichiers de base de donnée, fixer le nom de la table, et liez le à votre composant TDatasource .
  
Real functionality requires a bit more effort, howeverIf a table doesn't already exist, you'll need to create it programmatically, unless there's a compatible table designer I'm not familiar with.
+
Une vraie fonctionnalité exige un peu plus d'effort , cependant Si une table n'existe pas déjà , vous devrez la créer programmatiquement , à moins qu'il y ait un progammeur de table compatible Je ne suis pas familié avec .
Note: Current version of OpenOffice (2.0x) contains OpenOffice Base, which can create dbf files in a somewhat user-friendly way.
+
Note: La version courante d'OpenOffice (2.0x) contient la base d'OpenOffice, ce qui peut créer des fichiers dbf d'une manière quelque peu facile à utiliser .
  
Attempting to open a non-existant table will generate an error.  Tables can be created programmatically through the component after the runtime path and table name are set.
+
Essayer d'ouvrir une table non-existante produira une erreurDes Tables peuvent être créés programmatiquement au travers de composant après le chemin et le nom de la table soient fixé.
  
For instance, to create a table called "dvds" to store your dvd collection you would drop it on your form, set the runtime path, and set the table name to "dvds". The resulting file will be called "dvds.dbf".
+
Par exemple , pour créer une table appelée « dvds » pour stocker votre collection de dvd vous devriez le déposer sur votre fiche, fixer le chemin d'exécution, et fixer le nom de table à « dvds » . Le fichier résultant s'appellera « dvds.dbf » .
  
In your code, insert the following:
+
Dans votre code, insérer le suivant :
  
 
     Dbf1.FilePathFull := '/path/to/my/database';
 
     Dbf1.FilePathFull := '/path/to/my/database';
Line 489: Line 491:
 
     Dbf1.CreateTable;
 
     Dbf1.CreateTable;
  
When this code is run, your DVD collection table will be createdAfter that, all data aware components linked through the TDatasource to this component will allow easy access to the data.   
+
Quand ce code est exécuté , votre table de collection DVD sera crééeAprès cela, tous les composants avertis de données  lié par TDatasource à ce composant  permettra un accès facile aux données.   
  
Adding indexes is a little different from your typical TTable. It must be done after the database is open. It's also the same method you use to rebuild the indexes. For instance:
+
Ajouter des index est peu un différent de votre TTable typique. Il doit être fait après que la base de données soit ouverte . C'est également la même méthode que vous employez pour reconstruire les index. Par exemple :
  
 
     Dbf1.Exclusive := True;
 
     Dbf1.Exclusive := True;
Line 499: Line 501:
 
     Dbf1.Close;
 
     Dbf1.Close;
  
The first (primary) index will be a file called "dvdsname.mdx" and the second will be a file named "rating.ndx" so in a multiple table database you must be careful not to use the same file name again.
+
Le premier index (primaire) sera un fichier appelé "dvdsname.mdx" et le second sera un fichier appelé "rating.ndx" ainsi dans une base de donnéesde table multiple vous devez faire attention à ne pas employer encore le même nom de fichier.
  
I will try to add a more detailed example at a later date, but hopefully this will get those old Delphi programmers up and running with databases in Lazarus!
+
J'essayerai d'ajouter un exemple plus détaillé à une date ultérieure, mais si tout va bien cela mettra ces vieux programmeurs en Delphi à jour avec des bases de données dans Lazarus !
  
== Related Links ==
+
== Liens relatifs  ==
*[[Databases|Creating Databases Applications with Lazarus using the DB-unit]]<br>
+
*[[Databases/fr|Créer des applications de bases de données avec Lazarus en employant DB-unit]]<br>
*[[MySQLDatabases|Creating a database application using MySQL]]<br>
+
*[[MySQLDatabases/fr|Créer une application de base de données en utilisant MySQL]]<br>
*[[Zeos_tutorial|Creating a database application using the Zeos components]]
+
*[[Zeos_tutorial/fr|Créant une application de base de données en utilisant les composants Zeos]]
*Pascal Data Objects is a database API that worked for both FPC and Delphi and utilises native MySQL libraries for version 4.1 and 5.0. It's inspired by PHP's PDO class.
+
*Pascal Data Objects est une base de données API qui fonctionne pour à la fois FPC et Delphi et utilise  des librairies MySQL natives pour les versions 4.1 et 5.0. Il est inspiré par les classes PHP's PDO .
 
https://trac.synsport.com:8000/index.php/pdo/wiki
 
https://trac.synsport.com:8000/index.php/pdo/wiki
(username/password is guest/guest)
+
(username/password est guest/guest)
 +
 
 +
[[Category:Databases/fr]]

Latest revision as of 08:24, 26 May 2016

Deutsch (de) English (en) español (es) français (fr) Bahasa Indonesia (id) italiano (it) 日本語 (ja) Nederlands (nl) português (pt) русский (ru) 中文(中国大陆)‎ (zh_CN) 中文(台灣)‎ (zh_TW)

Aperçu

Ce tutoriel à pour but de faire fonctionner Lazarus avec diverses bases de données existantes.

A son installation, Lazarus permet l'accès à plusieurs bases de données. Cependant le développeur doit installer les paquets adéquats pour chacune d'elles. Vous pouvez avoir accès à la base de données soit par du code, soit en déposant des composants sur une fiche. Les composants données représentent des champs et sont connectés en faisant pointer la propriété DataSource vers un TDataSource. Datasource représente une table et est connecté au composant de base de données (exemples : TPSQLDatabase, TSQLiteDataSet) en configurant la propriété DataSet. On trouve les composants contrôle de données dans le tab "Data Controls". Le composant Datasource et ceux contrôlant les bases de données sont situés dans l'onglet "Data Access".

Lazarus et MySQL

Faire fonctionner MySQL dans Linux ou Windows

Suivre les instructions dans le manuel de l'utilisateur de MySQL. Soyez sûr que le deamon mysqld fonctionne, et que tout les utilisateurs potentiels (incluant root, mysql, vous-même et n'importe qui d'autre pourrait le vouloir) ont autant de privilèges qu'ils ont besoin, depuis autant de serveurs centraux que cela pourrait être nécessaire(incluant 'localhost', le nom du serveur local, n'importe quel autre serveur sur votre réseau) aussi loin que c'est conforme avec la sécurité. Il est préférable que tous les utilisateurs incluant root aient des mots de passe. Tester l'action du système de base de donnée en utilisant les exemples donnés dans le manuel, et vérifier que tous les utilisateurs ont réellement des accès fiables.

Faire fonctionner MySQL pour FPC en mode texte

Il y a un répertoire avec un exemple de programme dans $(fpcsrcdir)/packages/base/mysql/. Vous pouvez trouver le répertoire source de fpc dans lazarus: menu Configurations-> Options d'environment... -> Onglet Fichier -> Répertoire des sources de FPC. Les chemins possibles pour le répertoire mysql sont /usr/share/fpcsrc/packages/base/mysql/ (rpm install) ou C:\lazarus\fpcsrc\packages\base\mysql\ (windows). Ce répertoire contient aussi les unités mysql.pp, mysql_com.pp et mysql_version.pp. Avant d’exécuter le script de test, vous devez créer une base de données appelée testdb: faire ceci en vous connectant dans le moniteur mysql (comme root avec tous les privilèges ) et en émettant la commande SQL suivante

CREATE DATABASE testdb;

ensuite soyez sur que tous les utilisateurs appropriés ont les privilèges d'accès appropriés

GRANT ALL ON testdb TO johnny-user IDENTIFIED BY 'johnnyspassword'; 

Il y a un script appelé mkdb que vous devriez maintenant essayer d'exécuter :

sh ./mkdb

Ceci échouera probablement , car le système ne permettra pas à un utilisateur anonyme d'accéder à la base de données . Aussi changer script en utilisant éditeur de sorte que la ligne appelant mysql lise:

mysql -u root -p  ${1-testdb} << EOF >/dev/null

et essayez de l'exécuter à nouveau, en entrant votre mot de passe quand on vous y invite. Avec de la chance vous pourriez être parvenus à créer la base de donnée de test: testez le (alors que vous êtes logué dans le moniteur de mysql) en émettant la commande mysql

select * from FPdev;

Vous devriez voir une table listant ID, username et email address de certains des développeurs de FPC .

Maintenant essayez d'exécuter le programme de test testdb.pp (ceci peut devoir être compilé , et échouera presque certainement sur la première tentative !!).

J'ai constaté que le programme ne pourrait pas se connecter to mysql pour plusieurs raisons :

  • Mon système (SuSE Linux v9.0) installe mysql v4.0.15, pas la version 3 pour laquelle le paquet a été conçu .
  • Le programme doit avoir des noms d'utilisateur et des mots de passe pour obtenir l'accès à la base de données .
  • Le compilateur doit savoir où trouver les bibliothèques de mysql (SI VOUS N'AVEZ PAS INSTALLÉ LES BIBLIOTHÈQUES DE DÉVELOPPEMENT DE MYSQL , FAITES LE MAINTENANT!)

J'ai créé une copie de testdb.pp appelé trydb.pp, plutôt que d'éditer l'original - ceci signifie que les fichiers originaux restent toujours fixes dans les mises à jour suivantes CVS. J'ai également copié les fichiers trouvés dans le sous-répertoire mysql/ver40/ dans le sous répertoire principal mysql/ , en les renommant mysql_v4.pp, mysql_com_v4.pp et mysql_version_v4.pp, Soyez sur de renommer les unités dans chaque fichier également. J'ai changé l'usage des instructions dans trydb.pp pour utiliser

uses mysql_v4

et l'instruction dans mysql_v4.pp pour

use mysql_com_v4

J'ai ajouté une ligne à /etc/fpc.cfg pour pointer vers mes librairies:

-Fl/lib;/usr/lib

L'étape suivante pourrait ne pas être nécessaire si les librairies de développement sont installés car les liens seront créés pour toi , mais il ne blesse jamais de vérifier . J'ai dû trouver le vrai nom de la librairie mysqlclint dans le répertoire /usr/lib et dans mon cas j'ai du émettre la commande shell:

ln -s libmysqlclient.so.12.0.0 lmysqlclient

pour faire un lien symbolique permettant à FPC de trouver la bibliothèque . Pour de bonne mesure J'ai également créé le lien

ln -s libmysqlclient.so.12.0.0 mysqlclient

et placé des liens semblables dans autres répertoires variés: pas strictement nécessaire , mais juste au cas où ...! Quelques utilisateurs pourraient devoir ajouter le lien suivant :

ln -s libmysqlclient.so.12.0.0 libmysqlclient.so

J'ai modifié trydb.pp pour inclure les détails d'utilisateur, au commencement en ajoutant un serveur central(host), l'utilisateur et le mot de passe comme constantes:

const
  host : Pchar= 'localhost';
  user : Pchar= 'myusername';
  passwd: Pchar = 'mypassword';

J'ai également trouvé que je ne pourrais pas me connecter à mysql en utilisant l'appel à mysql_connect() , mais j'ai dû employer mysql_real_connect() lequel a beaucoup plus de paramètres. Pour compliquer des choses un peu plus, le nombre de paramètres semble avoir changé entre la version 3 (où il y en a sept) et la version 4 (où il y en a huit). Avant d'utiliser mysql_real_connect J'ai dû employer mysql_init() lequel n'est pas trouvé dans le mysql.pp d'origine mais est trouvé dans mysql_v4.pp.

Ainsi le code pour se connecter à la base de données est maintenant :

{ a few extra variables}
var
  alloc : PMYSQL;
 
{main program fragment}
 
begin
 if paramcount=1 then
   begin
   Dummy:=Paramstr(1)+#0;
   DataBase:=@Dummy[1];
   end;
 
Writeln ('Allocating Space...');
 alloc := mysql_init(PMYSQL(@qmysql));
 Write ('Connecting to MySQL...');
 sock :=  mysql_real_connect(alloc, host, user, passwd, database, 0, nil, 0);
 if sock=Nil then
   begin
   Writeln (stderr,'Couldnt connect to MySQL.');
   Writeln (stderr, 'Error was: ', mysql_error(@qmysql));
   halt(1);
   end;
 Writeln ('Done.');
 Writeln ('Connection data:');
{$ifdef Unix}
 writeln ('Mysql_port      : ',mysql_port);
 writeln ('Mysql_unix_port : ',mysql_unix_port);
{$endif}
 writeln ('Host info       : ',mysql_get_host_info(sock));
 writeln ('Server info     : ',mysql_stat(sock));
 writeln ('Client info     : ',mysql_get_client_info);
 
 Writeln ('Selecting Database ',DataBase,'...');
 if mysql_select_db(sock,DataBase) < 0 then
   begin
   Writeln (stderr,'Couldnt select database ',Database);
   Writeln (stderr,mysql_error(sock));
   halt (1);
   end;
{... as original contents of testdb.pp}


Maintenant - prêt pour commencer à compiler trydb.pp?

 fpc trydb

succès ! Exécutez le maintenant :

 ./trydb

whoopee! J'ai obtenu le listing des développeurs de FPC !

Quelques améliorations supplémentaires : rendre l'entrée des détails d'utilisateur et les commandes mysql interactives , en utilisant des variables plutôt que des constantes , et en autorisant plusieurs commandes SQL a être entrées, jusqu'à ce que nous émettions la commande quit: voir le listing complet de programme, où les détails d'utilisateur sont entrés via la console , et le programme entre dans une boucle où les commandes SQL sont entrés depuis la console(sans point-virgule terminal ) et les réponses sont imprimées , jusqu'à ce que 'quit' soit entré au clavier .

Voir Exemple de listing sur la console.

Se connecter à MySQL à partir d'une application Lazarus

Ce tutoriel montre comment connecter Lazarus à la base de donnée MySQL, et exécuter des requêtes simples , en employant seulement les composants de base de Lazarus; il n'utilise aucun composants Data Aware, mais illustre les principes d' interfaçage à la base de données .

NB : Les paquets ZeosLib ou SqlDb fournissent des composants qui permettent d'utiliser MySql bien plus simplement qu'avec la méthode proposée ci-dessous.

Créer un nouveau projet dans Lazarus:

Project -> New Project -> Application

Une nouvelle forme générée automatiquement apparaîtra.

Agrandir la forme pour remplir environ la moitié de l'écran , renommer alors la forme et son Caption avec 'TryMySQL'.

A partir de l'onglet de composants standard placer trois boites d'édition sur le côté gauche supérieur de la fiche, et immédiatement au-dessus de chaque boite placez un label . Changer les noms et les captions en 'Host' (et HostLLabel,HostEdit), 'UserName' (et UserLabel, UserEdit) et 'Password' (avec PasswdLabel et PasswdEdit). Alternativement vous pourriez employer les composants LabelledEdit à partir de l'onglet additionnel.

Sélectionnez la boite d'édition Passwd et trouver la propriété PasswordChar: changer ceci en * ou un autre caractère, de sorte que quand vous saisissez un mot de passe les caractères n'apparaissent pas sur votre écran mais se font écho par une série de *s. Assurer vous que la propriété Text de chaque boite d'édition est blanche.

Placer maintenant une autre boite Edit et un label au dessus du côté droit de la fiche. Changer le label en 'Enter SQL Command' et nommez le CommandEdit.

Placer trois boutons sur la fiche : deux du côté gauche dessous les boites Edit, et un du côté droit dessous la boite de commande.

Etiqueter les boutons du côté gauche 'Connect to Database' (ConnectButton) et 'Exit' (ExitButton) et celui du côté droit 'Send Query' (QueryButton).

Placer un grand Memo Box étiqueté et nommé 'Results' (ResultMemo) sur la droite en bas , pour remplir majeure partie de l'espace disponible. Trouver sa propriété ScrollBars et choisir ssAutoBoth de sorte que les barres de défilement apparaissent automatiquement si le texte remplit l'espace. Rendre la propriété WordWrap à la valeur True.

Placer une barre de Status (à partir de l'onglet de Contrôle commun) au bas de la fiche, et appeler sa propriété SimpleText 'TryMySQL'.

Une copie d'écran de la fiche peut être vue ici: Exemple de copie d'écran Mysql

Maintenant nous devons écrire quelques procédures de traitement d’événement.

Les trois boites d'édition du côté gauche sont pour l'entrée du hostname , du username et mot de passe . Quand ceux-ci ont été entrés de manière satisfaisante, le bouton de connexion est cliqué. Le traitement de l’événement OnCLick pour ce bouton est basé sur une partie du programme FPC en mode texte ci-dessus .

Les réponses de la base de données ne peut pas maintenant être écrites en employant les instructions Pascal write ou writeln: plutôt, les réponses doivent être converties en chaînes de caractères et affiché dans la boîte Mémo . Considérant que les instructions Pascal write et writeln sont capable d'exécuter beaucoup de type conversion 'à la volée', l'utilisation d'une boîte Mémo pour la sortie de textes rend nécessaire la conversion explicite des types de données à la forme correcte de chaînes de caractères , ainsi les variables Pchar doivent être converties en chaînes de caractères en utilisant StrPas , et les nombres entiers doivent être convertis avec IntToStr.

Les chaînes de caractères sont affichées dans la boite Mémo en utilisant

procedure ShowString (S : string);
(* display a string in a Memo box *)
begin
       trymysqlForm1.ResultsMemo.Lines.Add (S)
end;

L'évent hantler ConnectButton devient ainsi:

procedure TtrymysqlForm1.ConnectButtonClick(Sender: TObject);
(* Connect to MySQL using user data from Text entry boxes on Main Form *)
var strg: string;
 
begin
 
 dummy1 :=  trymysqlForm1.HostEdit.text+#0;
 host := @dummy1[1];
 dummy2 := trymysqlForm1.UserEdit.text+#0;
 user := @dummy2[1] ;
 dummy3 := trymysqlForm1.PasswdEdit.text+#0;
 passwd := @dummy3[1] ;
 alloc := mysql_init(PMYSQL(@qmysql));
 sock :=  mysql_real_connect(alloc, host, user, passwd, database, 0, nil, 0);
 if sock=Nil then
   begin
     strg :='Couldnt connect to MySQL.'; showstring (strg);
     Strg :='Error was: '+ StrPas(mysql_error(@qmysql)); showstring (strg);
  end
   else
   begin
     trymysqlForm1.statusBar1.simpletext := 'Connected to MySQL';
     strg := 'Now choosing database : ' + database; showstring (strg);
{$ifdef Unix}
     strg :='Mysql_port      : '+ IntToStr(mysql_port); showstring (strg);
     strg :='Mysql_unix_port : ' + StrPas(mysql_unix_port); showstring (strg);
{$endif}
     Strg :='Host info       : ' + StrPas(mysql_get_host_info(sock));
     showstring (strg);
     Strg :='Server info     : ' + StrPas(mysql_stat(sock)); showstring (strg);
     Strg :='Client info     : ' + Strpas(mysql_get_client_info);  showstring (strg);
 
     trymysqlForm1.statusbar1.simpletext := 'Selecting Database ' + DataBase +'...';
 if mysql_select_db(sock,DataBase) < 0 then
 begin
   strg :='Couldnt select database '+ Database; ShowString (strg);
   Strg := mysql_error(sock); ShowString (strg);
 end
 end;
end;


La boîte de textes du côté droit permet l'entrée d'instructions SQL, sans point-virgule terminal ; quand vous êtes satisfaits de son contenu ou syntaxe , le bouton SendQuery est appuyé , et la requête est traitée , avec les résultats écrit dans la boîte ResultsMemo .

Le traitement de l'évènement SendQuery est de nouveau basé sur la version FPC en mode texte, sauf que de nouveau un type de conversion explicite doit être fait avant que les châines de caractère soient montrées dans la boîte .

Une différence avec le programme FPC en mode texte est que si une condition d'erreur est détectée, le programme ne stoppe pas et MySQL n'est pas fermé; au lieu de cela, la commande est retournée à la fiche principale et une occasion est donnée de corriger l'entrée avant la commande ne soit resoumis. L'application existe finalement(avec la fermeture de MySQL ) quand le bouton de sortie est cliqué .

Le code pour SendQuery suit :

procedure TtrymysqlForm1.QueryButtonClick(Sender: TObject);
var
 dumquery, strg: string;
begin
     dumquery := TrymysqlForm1.CommandEdit.text;
     dumquery := dumquery+#0;
     query := @dumquery[1];
     trymysqlForm1.statusbar1.simpletext := 'Executing query : '+ dumQuery +'...';
     strg := 'Executing query : ' + dumQuery; showstring (strg);
     if (mysql_query(sock,Query) < 0) then
     begin
       Strg :='Query failed '+ StrPas(mysql_error(sock)); showstring (strg);
     end
     else
     begin
       recbuf := mysql_store_result(sock);
       if RecBuf=Nil then
       begin
         Strg :='Query returned nil result.'; showstring (strg);
       end
       else
       begin
         strg :='Number of records returned  : ' + IntToStr(mysql_num_rows (recbuf));
         Showstring (strg);
         Strg :='Number of fields per record : ' + IntToStr(mysql_num_fields(recbuf));
         showstring (strg);
         rowbuf := mysql_fetch_row(recbuf);
         while (rowbuf <>nil) do
         begin
              Strg :='(Id: '+ rowbuf[0]+', Name: ' + rowbuf[1]+ ', Email : ' +
               rowbuf[2] +')';
              showstring (strg);
              rowbuf := mysql_fetch_row(recbuf);
         end;
       end;
     end;
end;


Enregistrez votre projet, et appuyez sur Run -> Run

Télécharger le code source MYSQL

Un listing complet du programme est disponible ici Exemple de code source

Lazarus et PostgreSQL

C'est un tutoriel très court pour obliger Lazarus 0.9.12 ou ultérieur à se relier à une base de données PostgreSQL, en local ou à l'extérieur, en employant TPQConnection.

Après une installation correcte, suivre ces étapes :

  • Placer un PQConnection depuis l'étiquette SQLdb
  • Placer un SQLQuery depuis l'étiquette SQLdb
  • Placer un SQLTransaction depuis l'étiquette SQLdb
  • Placer un DataSource depuis l'étiquette DataAccess
  • Placer un DBGrid depuis l'étiquette DataControls
  • Dans la PQConnection compléter:
    • La propriété transaction avec l'objet respectif SQLTransaction
    • Nom de la base de données
    • Nom de l'hôte
    • Nom de l'utilisateur + mot de passe
  • Vérifier que SQLTransaction a été automatiquement changé pour pointer vers PQConnection
  • Dans la SQLQuery compléter:
    • la propriété transaction avec l'objet respectif
    • la propriété database avec l'objet respectif
    • SQL (quelque chose comme 'select * from anytable')
  • Dans l'objet DataSource compléter la propriété DataSet avec l'objet SQLQuery
  • Dans DBGrid compléter la source de donnée comme l'objet DataSource

Mettez tout sur connecté et actif et la DBGrid devrait être complété à la conception. TDBText et TDBEdit sembler fonctionner mais (pour moi ) ils montrent seulement des données.

Pour changer le contenu dans la base de données , j'ai appelé le moteur DB directement avec le code suivant :

 try
   sql:= 'UPDATE table SET setting=1';
   PQDataBase.Connected:=True;
   PQDataBase.ExecuteDirect('Begin Work;');
   PQDataBase.ExecuteDirect(sql);
   PQDataBase.ExecuteDirect('Commit Work;');
   PQDataBase.Connected:=False;
 except
   on E : EDatabaseError do
     MemoLog.Append('DB ERROR:'+sql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Message);
   on E : Exception do
     MemoLog.Append('ERROR:'+sql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Message);
 end;


  • Notes:
    • Testé sur windows, Lazarus 0.9.12 + PgSQL 8.3.1
    • Quelques tests dans linux, Lazarus 0.9.12 et PgSQL 8.0.x


  • Installation et erreurs :
    • Dans la version testée de Lazarus 0.9.12, Les champs de type "text" et "numeric" ont des bugs
    • J'ai utilisé sans problème des caractères de taille fixe, int et float8
    • Parfois la remise en marche de Lazarus résout des erreurs stupides ...
    • Après quelques erreurs , les transactions demeurent actives et devraient être désactivées mannuellement
    • Les changements faits dans Lazarus être naturellement non visible jusqu'à ce que la transaction soit effectuée
    • Le debugger intégré semble buggé (au moins dans windows) - parfois une exécution en dehors de l'ide peut aider à trouver des erreurs
    • Dans linux certains messages d'erreur sont imprimés dans la console -- exécuter votre programme en ligne de commande , parfois il y a certaine information utile supplémentaire de correction
    • Erreur : "Can not load Postgresql client. Is it installed (libpq.so) ?"
      • Ajouter le chemin pour rechercher libpq* à partir de l'installation de PostgreSQL.
      • Dans le linux ajouter le chemin au fichier libpq.so à la section bibliothèques de votre fichier /etc/fpc.cfg. Par exemple : -Fl/usr/local/pgsql/lib
      • Dans windows, ajouter ces bibliothèques n'importe où dans la variable d'environnement Path ou dans le répertoire projet
      • Dans windows, J'ai copié tout DLLs dans le mon répertoire C:\Program Files\PostgreSQL\8.1\bin ver un autre répertoire dans le PATH
      • Ou ajouter ce répertoire postgres\bin vers le path

Lazarus et SQLite

par Luiz Américo

Aller sur la page d'accueil sqlite pour plus d'information .

Introduction

TSqliteDataset et TSqlite3Dataset sont des descendants de TDataset qui accèdent, respectivement, aux bases de données sqlite version 2.8.x et 3.2.x. Ci-dessous une liste des principaux avantages et inconvénients :

Avantages :

  • Flexible : les programmeurs peuvent choisir d'employer ou de ne pas employer le langage SQL, leur permettant de travailler avec les dispositions simples de tables ou n'importe quelle disposition complexe que SQL/sqlite permet
  • Mise à jour automatique de la base de données : aucun besoin de mettre à jour manuellement la base de données avec des instructions SQL, une méthode simple s'occupe de ça
  • Rapide : il cache les données en mémoire, rendant la navigation dans le jeux de données rapide
  • Aucune installation/configuration de serveur : simplement fournir la bibliothèque sqllite avec l'exe

Inconvénients

  • Exige des fichiers externes (Bibliothèque sqlite)

Exigences

  • Pour les bases de données sqlite2 :
    • fpc 2.0.0
    • Lazarus 0.9.10
    • la bibliothèque d'exécution sqlite 2.8.15 ou au-dessus (l'obtenir de www.sqlite.org)
  • Pour les bases de données sqlite3:
    • fpc 2.0.2
    • Lazarus 0.9.11 (svn revision 8443 ou au-dessus)
    • la bibliothèque d'exécution sqlite 3.2.1 ou au-dessus (l'obtenir de www.sqlite.org)

Avant le lancement d'un projet Lazarus , assurez vous que :

  • la bibliothèque sqlite est dans le PATH système ou dans le répertoire de l'exécutable
  • sous Linux, mettre cmem comme première unité dans la clause uses du programme principal

Comment l'employer (Utilisation de base )

Installer le paquet trouvé dans le répertoire /components/sqlite (voir les instructions ici)

Pendant la conception fixer les propriétés suivantes:

  • FileName: chemin du fichier sqlite [requis ]
  • TableName: nom de la table utilisée dans la phrase sql [requis ]
  • Sql: une phrase de sélection SQL[facultatif ]

Créer un Table (jeux de donnée)

Double cliquez sur l'icone du composant ou employer l'item 'Create Table' du menu automatique qui apparaît en cliquant le bouton de souris droit . Un simple éditeur de table parlant de lui-même sra montré.

 Voici tous les types de champ soutenus par TSqliteDataset et TSqlite3Dataset: 
 
 Integer
 AutoInc
 String
 Memo
 Bool 
 Float
 Word
 DateTime
 Date
 Time
 LargeInt
 Currency
 

Recherche des données

Après avoir créé la table ou avec une table précédemment créée ,ouvrir l'ensemble des données avec la méthode ouvrir . Si la propriété SQL n'était fixée alors tous enregistrements de tous les champs seront recherchés, la même chose si vous fixiez le SQL à :

 SQL:='Select * from TABLENAME'; 

Application des changements au fichier de donnée sous-jacent

Pour utiliser la fonction ApplyUpdates, l'ensemble de données doit contenir au moins un champ qui remplit les conditions pour une clef primaire (les valeurs doivent être UNIQUES et NON NULLES )

C'est possible de faire cela de deux manières :

  • Fixer la propriété PrimaryKey avec le nom du champ clef primaire
  • Ajouter un champ AutoInc (C'est plus facile puisque TSqliteDataSet le manipule automatiquement comme clef primaire )

Si une des deux conditions est fixée alors appeler juste

 ApplyUpdates;

PS1: Si les deux conditions sont fixées, le champ correspondant à PrimaryKey est employé pour appliquer les mises à jour .

PS2: Le réglage de PrimaryKey à un champ qui n'est pas une clef primaire mènera à la perte de données si ApplyUpdates est appellé, aussi assurez vous que le champ choisi contient des valeurs non nulles et uniques avant de l'employer .

Remarques

  • Bien que cela ait été testé avec 10000 enregistrements et très bien fonctionné, TSqliteDataset conserve toutes données en mémoire, aussi rappelez-vous de rechercher seulement les données nécessaires (principalement avec les champs Mémo).
  • Le même fichier de donnée (propriété Filename) peut accueillir plusieurs tables/ensembles de données
  • Plusieurs ensembles de données (combinaisons differentes des champs )peuvent être créés en utilisant la même table simultanément .
  • Il est possible de filtrer les données en utilisant les instructions WHERE dans sql, en fermant et en réouvrant l'ensemble de données(ou en appelant la méthode RefetchData). Mais dans ce cas-ci, l'ordre et le nombre de champs doivent demeurer le même.
  • Il est également possible d'employer des instructions complexes de SQL en utilisant des alias, jointures, vues dans des tables multiples (se rappeler qu'ils doivent résider dans le même ficihier de données), mais dans ce cas-ci ApplyUpdates ne fonctionnera pas. Si quelqu'un veut employer des requêtes complexes et appliquer les mises à jour au fichier de données, expédiez-moi un mail et je donnerai quelques conseils sur comment à faire cela.
  • fixer un nom de fichier à un fichier de données sqlite2.x non créé par TSqliteDataset et l'ouvrir est possible mais quelques champs n'auront pas le type de champ correct détecté. Ceux-ci seront traités comme champs de chaîne de caractère.

Des exemples génériques peuvent être trouvés dans le répertoire CVS fpc/fcl/db/sqlite

Luiz Américo pascalive(at)bol(dot)com(dot)br

Lazarus et MSSQL

Cela fonctionne avec Zeoslib (dernier cvs), voir les liens sur le bas de la page .

Lazarus et Interbase / Firebird

Voir Installer les paquets . Sur cette page est un premier petit exemple d'explication à propos de la manière de se relier à un serveur IB ou FB .

fonctionne aussi avec le dernier Zeoslib (du cvs).

Librairie Firebird FBLib

[1] est une bibliothèque open Source No Data Aware for direct access to Firebird Relational Database from Borland Delphi / Kylix, Freepascal and Lazarus.

Les fonctionnalités actuelles incluent:

  • Accès direct classique ou superserveur à Firebird 1.0.x 1.5.x
  • Multiplatforme [Win32,Gnu/Linux,FreeBSD)
  • Bibliothèque avec choix automatique de client 'fbclient' ou 'gds32'
  • Requête avec des param
  • Support du dialecte SQL 1/3
  • Accord de licence LGPL
  • Extration de Méta-données
  • Analyseur simple de manuscrit
  • Seulement 100-150 KB sont ajoutés dans l'EXE final
  • Support des champs BLOB
  • Exporte des données au Script HTML SQL
  • manageur de Service (backup,restore,gfix...)
  • Alerte d'évènements

Vous pouvez télécharger la documentation sur le site FBLib.

Lazarus et dBase

Tony Maro

Vous pourriez également vouloir visiter les commencements de la page de tutoriel TDbf

FPC inclut un composant simple de base de données qui est semblable dans la fonction au composant TTable de Delphi appelé "TDbf" (Site Web de TDbf) qui supporte un sous ensemble très basique de possibilités sur les fichiers dBase. Il n'est pas installé par défaut , ainsi vous devrez d'abord installer le paquet Lazarus à partir du répertoire "lazarus/components/tdbf" et reconstruire votre IDE Lazarus. Il apparaîtra alors à côté du composant TDatasource dans votre palette de composant.

Le composant TDbf a un avantage par rapport à d'autres composants de base de données parce qu'il n'exige aucune sorte de moteur d'exécution de base de données, cependant ce n'est pas la meilleure option pour des applications avec de grandes base de données.

Il est très facile d'emploi. Simplement, mettre, déposer un composant TDbf sur votre fiche, placer le chemin d'exécution dans le répertoire dans lequel seront vos fichiers de base de donnée, fixer le nom de la table, et liez le à votre composant TDatasource .

Une vraie fonctionnalité exige un peu plus d'effort , cependant . Si une table n'existe pas déjà , vous devrez la créer programmatiquement , à moins qu'il y ait un progammeur de table compatible Je ne suis pas familié avec . Note: La version courante d'OpenOffice (2.0x) contient la base d'OpenOffice, ce qui peut créer des fichiers dbf d'une manière quelque peu facile à utiliser .

Essayer d'ouvrir une table non-existante produira une erreur. Des Tables peuvent être créés programmatiquement au travers de composant après le chemin et le nom de la table soient fixé.

Par exemple , pour créer une table appelée « dvds » pour stocker votre collection de dvd vous devriez le déposer sur votre fiche, fixer le chemin d'exécution, et fixer le nom de table à « dvds » . Le fichier résultant s'appellera « dvds.dbf » .

Dans votre code, insérer le suivant :

   Dbf1.FilePathFull := '/path/to/my/database';
   Dbf1.TableName := 'dvds';
   With Dbf1.FieldDefs do begin
       Add('Name', ftString, 80, True);
       Add('Description', ftMemo, 0, False);
       Add('Rating', ftString, 5, False);
   end;
   Dbf1.CreateTable;

Quand ce code est exécuté , votre table de collection DVD sera créée. Après cela, tous les composants avertis de données lié par TDatasource à ce composant permettra un accès facile aux données.

Ajouter des index est peu un différent de votre TTable typique. Il doit être fait après que la base de données soit ouverte . C'est également la même méthode que vous employez pour reconstruire les index. Par exemple :

   Dbf1.Exclusive := True;
   Dbf1.Open;
   Dbf1.AddIndex('dvdsname','Name',[ixPrimary, ixUnique, ixCaseInsensitive]);
   Dbf1.AddIndex('rating.ndx', 'Rating', [ixCaseInsensitive]);
   Dbf1.Close;

Le premier index (primaire) sera un fichier appelé "dvdsname.mdx" et le second sera un fichier appelé "rating.ndx" ainsi dans une base de donnéesde table multiple vous devez faire attention à ne pas employer encore le même nom de fichier.

J'essayerai d'ajouter un exemple plus détaillé à une date ultérieure, mais si tout va bien cela mettra ces vieux programmeurs en Delphi à jour avec des bases de données dans Lazarus !

Liens relatifs

https://trac.synsport.com:8000/index.php/pdo/wiki (username/password est guest/guest)