Difference between revisions of "Lazarus Database Tutorial/fr"

From Lazarus wiki
Jump to navigationJump to search
Line 391: Line 391:
 
'''Recherche des données '''
 
'''Recherche des données '''
  
Après avoir créé la 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===
 
===Remarks===

Revision as of 07:03, 16 June 2007

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 une diversité de 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.

Lazarus et MySQL

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.

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'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

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 loggué dans le moniteur de mysql) en émettant la phrase 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 phrases dans trydb.pp pour utiliser

uses mysql_v4

et la phrase dans mysql_v4.pp pour

utiliser 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'orige 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 - pret pour commencer à compiler trydb.pp?

 fpc trydb

succès ! Executez 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 plusieur 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; it uses no Data Aware components, mais illustre les principes d'interfacage à la base de données .

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 bites 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 procedures 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 connection 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 listinge complet du programme est disponible ici Exemple de code source

Lazarus and 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.

After correct install, follow these steps:

  • Place a PQConnection from the SQLdb tab
  • Place a SQLQuery from the SQLdb tab
  • Place a SQLTransaction from the SQLdb tab
  • Place a DataSource from the DataAccess tab
  • Place a DBGrid from the DataControls tab
  • In the PQConnection fill in:
    • transaction property with the respective SQLTransaction object
    • Database name
    • HostName
    • UserName + password
  • Check that the SQLTransaction was automatically changed to point to the PQConnection
  • In the SQLQuery fill in:
    • transaction property with the respective object
    • database property with respective object
    • SQL (something like 'select * from anytable')
  • In the DataSource object fill in the DataSet property with the SQLQuery object
  • In the DBGrid fill in the datasource as the DataSource Object

Turn everything to connected and active and the DBGrid should be filled in design time. TDBText and TDBEdit seem to work but (for me) they only _show_ _data_.

To change contents in the database, I called the DB Engine direct with the following code:

 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:
    • Tested on windows, Lazarus 0.9.12 + PgSQL 8.3.1
    • Some tests in linux, Lazarus 0.9.12 and PgSQL 8.0.x


  • Instalation and errors:
    • In the tested version of Lazarus .12, fields of type "text" and "numeric" have bugs
    • I used with no problems char fixed size, int and float8
    • Sometimes restarting Lazarus solves stupid errors...
    • After some errors, the transactions remain active and should be deactivated mannually
    • Changes made in Lazarus are of course not visible until transaction commited
    • The integrated debugger seems buggy (at least in windows) - sometimes running outside of the IDE may help to find errors
    • 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
    • Error: "Can not load Postgresql client. Is it installed (libpq.so) ?"
      • Add the path to seach libpq* from the PostgreSQL installation.
      • 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
      • In windows, add these libs anywhere in the Path environment variable or project dir
      • I windows, I copied all the DLLs in my C:\Program Files\PostgreSQL\8.1\bin dir to another dir in the PATH
      • Or add this postgres\bin dir to the path

Lazarus et SQLite

par Luiz Américo

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

Introduction

TSqliteDataset et 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:

Advantages:

  • 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
  • Automatic database update: no need to update the database manually with SQL statements, a single method take cares of it
  • Fast: it caches the data in memory, making browsing in the dataset fast
  • No server instalation/configuration: just ship together with sqlite dynamic library

Disavantages

  • Requires external file (sqlite library)

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 sqlite2:
    • 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 le temps de 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 .

Remarks

  • 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).
  • The same datafile (Filename property) can host several tables/datasets
  • Several datasets (different combinations of fields) can be created using the same table simultaneously
  • 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
  • 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
  • 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.

Generic examples can be found at fpc/fcl/db/sqlite CVS directory

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

Lazarus and MSSQL

It is working with Zeoslib (latest cvs), see the links on bottom of page.

Lazarus and Interbase / Firebird

See Install Packages. On this page is a first small example en explanation about how to connect to an IB or FB server.

Also work with the latest Zeoslib (from cvs).

FBLib Firebird Library

[1] is an open Source Library No Data Aware for direct access to Firebird Relational Database from Borland Delphi / Kylix, Freepascal and Lazarus.

Current Features include:

  • Direct Access to Firebird 1.0.x 1.5.x Classic or SuperServer
  • Multiplatform [Win32,Gnu/Linux,FreeBSD)
  • Automatic select client library 'fbclient' or 'gds32'
  • Query with params
  • Support SQL Dialect 1/3
  • LGPL License agreement
  • Extract Metadata
  • Simple Script Parser
  • Only 100-150 KB added into final EXE
  • Support BLOB Fields
  • Export Data to HTML SQL Script
  • Service manager (backup,restore,gfix...)
  • Events Alerter

You can download documentation on FBLib's website.

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'emploie . Simplement , mettre, déposer un composant TDbf sur votre fiche, 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.

Real functionality requires a bit more effort, however. If 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. Note: Current version of OpenOffice (2.0x) contains OpenOffice Base, which can create dbf files in a somewhat user-friendly way.

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.

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

In your code, insert the following:

   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;

When this code is run, your DVD collection table will be created. After that, all data aware components linked through the TDatasource to this component will allow easy access to the data.

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:

   Dbf1.Exclusive := True;
   Dbf1.Open;
   Dbf1.AddIndex('dvdsname','Name',[ixPrimary, ixUnique, ixCaseInsensitive]);
   Dbf1.AddIndex('rating.ndx', 'Rating', [ixCaseInsensitive]);
   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.

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!

Liens relatifs

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