Sign in Join
Wiki copytemporary

Lazarus Database Tutorial/fr

Bahasa Indonesia · Deutsch · English · Español · Français · Italiano · Nederlands · Português · Русский · 中文(中国) · 中文(台灣) · 日本語

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

text
CREATE DATABASE testdb;

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

text
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 :

text
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:

text
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

text
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 :

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

pascal
uses mysql_v4

et l'instruction dans mysql_v4.pp pour

text
use mysql_com_v4

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

text
-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:

text
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

text
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 :

text
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:

pascal
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 :

pascal
{ 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,'Couldn''t 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,'Couldn''t 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?

text
 fpc trydb

succès ! Exécutez le maintenant :

text
 ./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:

text
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

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

L'évent hantler ConnectButton devient ainsi:

pascal
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] ;
pascal
 alloc := mysql_init(PMYSQL(@qmysql));
 sock :=  mysql_real_connect(alloc, host, user, passwd, database, 0, nil, 0);
 if sock=Nil then
   begin
     strg :='Couldn''t 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 :='Couldn''t 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 :

pascal
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 :

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 :

pascal
 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;

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 :

Inconvénients

Exigences

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

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:

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

text
 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 à :

pascal
 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 :

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

text
 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

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:

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 :

pascal
   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 :

pascal
   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)


From the Free Pascal wiki, page "Lazarus Database Tutorial/fr", as it stood on 2016-05-26 after a change by Tintinux, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 3, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.