jeudi 2 janvier 2025

Comment configurer le composant SQLQuery(Lazarus) pour qui'il fonctionne comme un composant ADOTable(Delphi)

Dans ce tutoriel  nous allons voir comment configurer SQLQuery dans Lazarus pour qu'il fonctionne comme un composant ADOTable de Delphi

Voici les deux composants :



 

1. Dans la propriété "DataBase" du composant SQLQuery(Lazarus), on choisit ODBCConnection1 qui est connecté à la base données Microsof Access "Materiels_Informatique.accdb" (Voir comment se connecter à une base de données Access avec ODBCConnection1), ensuite :

 

Dans la propriété "Transaction" du composant SQLQuery(Lazarus), on choisit  SQLTransaction1


Dans la propriété "Database" du composant SQLTransaction, on choisit ODBCConnection1, et dans la propriété "Action" on choisit caCommit.



- Dans l’éditeur SQL de la propriété SQL on saisit la requête qui suit, avec quoi afficher toutes les lignes de la table "types" avec la procédure SQLQuery.Open;   :

SELECT * FROM types


 

- Dans l’éditeur SQL de la propriété InsertSQL on saisit la requête qui suit, avec quoi insérer des données dans la table "types" avec la procédure SQLQuery.Insert;  :

INSERT INTO types(lib_type) VALUES(:lib_type)


 

- Dans l’éditeur SQL de la propriété UpdateSQL on saisit la requête qui suit, avec quoi modifier les données de la table "types" avec la procédure SQLQuery.Edit;  :

UPDATE types SET id_type=:id_type lib_type=:lib_type 

WHERE id_type=:old_id_type

on ajoute le préfixe "OLD_" pour avoir la possibilité de modifier la valeur du champ clé primaire "num_id_type" comme :


 

- Dans l’éditeur SQL de la propriété DeleteSQL on saisit la requête qui suit, avec quoi supprimer des lignes de la table "types" avec la procédure SQLQuery.Delete;  :

DELETE FROM types WHERE id_type=:id_type


 

 2. Dans la propriété "Options" du composant SQLQuery(Lazarus), on met la valeur de "sqoKeepOpenOnCommit" à True, pour que SQLQuery reste activé après exécution des requêtes avec des instructions comme INSERT, UPDATE, DELETE au niveau du DataSet (SQLQuery) c'est à dire au niveau de l'ensemble de données chargé dans SQLQuery depuis la base de données, 

SQLQuery.Options:=[sqoKeepOpenOnCommit]; 

- Mettre la propriété "UsePrimaryKeyAsKey" à False, dans le cas d'une base de données Microsoft Access en cas d’erreurs.



3. Pour insérer, modifier ou supprimer un enregistrement, on utilise les procédures qui suit:

procedure TForm1.btn_ajouterClick(Sender: TObject);
begin
  SQLQuery.Insert;    //Pour insérer un nouvel enregistrement
end;

SQLQuery.Edit;    //Pour modifier un enregistrement

SQLQuery.Delete;    //Pour supprimer un enregistrement

Et pour valider les changement au niveau de la base de données après exécutions des instructions comme INSERT, UPDATE, DELETE :

Méthode 1 :  on peut utiliser les procédures qui suit avec un "Bouton Valider" par exemple:

procedure TForm1.btn_validerClick(Sender: TObject);
begin
  try
    SQLQuery.Post; //Appliquer les changements au niveau du "Dataset"
    SQLQuery.ApplyUpdates(); //Appliquer les changements au niveau de la base de données
    SQLQuery.Refresh;    //Actualiser pour recharger les nouveaux changement des données au niveau de la base de données

   Except on E:exception do
      ShowMessage(E.Message); 
//En cas d'erreur afficher le message
   end
end


Méthode 2 :  ou bien on peut ajouter ces procédures aux événements du composant SQLQuery "AfterPost" et "AfterDelete", et comme ça la mise à jours des données au niveau de la base de données se fera automatiquement après chaque ajout, modification ou suppression d'un enregistrement :


procedure TForm1.SQLQueryAfterPost(DataSet: TDataSet);
begin

  SQLQuery.ApplyUpdates(); //Appliquer les changements au niveau de la base de données après ajout ou modification
  SQLQuery.Refresh;    //Actualiser pour recharger les nouveaux changement des données au niveau de la base de données

end;

procedure TForm1.SQLQueryAfterDelete(DataSet: TDataSet);
begin

  SQLQuery.ApplyUpdates(); //Appliquer les changements au niveau de la base de données après suppression
  SQLQuery.Refresh;    //Actualiser pour recharger les nouveaux changement des données au niveau de la base de données

end; 

.

lundi 30 décembre 2024

Lazarus - Login à une Base de Données Access protégée par mot de passe

 

Description :

Exemple d'une application créée avec Lazarus qui permet de se connecter à une base de données Microsoft Office Access protégée par un mot de passe de sécurité.

Exemple 1 : Débutant V1



Exemple simple, pour ça il faut définir manuellement le chemin vers la base de données "Materiels_Informatique.mdb" ou "Materiels_Informatique.accdb" dans les propriétés du composant ADOConnection1 comme suite :

- Pour base de données Access 2002-2003 (*.mdb) et 2007 (*.accdb)  :

with dm.ODBCConnection1 do

begin

Close;

LoginPrompt:=false;

KeepConnection:=true;

Driver:='Microsoft Access Driver (*.mdb, *.accdb)';

{dm.ODBCConnection1.Params : Paramètres de ODBCConnection1}

params.Clear;

Params.Add('DBQ='+ExtractFilePath(Application.ExeName)+'Materiels_Informatique.accdb'); //Chemin vers la base de données Access (.mdb ou .accdb)

Params.Add('Locale Identifier=1031');

Params.Add('PWD='+Edit_MotDePasse.Text); //Mot de passe de la base de données

end;{with dm.ODBCConnection1}

 

 

Dans l’unité « Project1 », la forme « F_login » doit être la forme qui se créer en premier, pour que lorsque on lance l’application c’est la forme « F_login » qui va s’afficher en premier et sera la forme principale du projet Lazarus, comme suite :

 

Exemple 2 : Débutant V2

 


Liens pour télécharger les codes sources des projets Lazarus :

Débutant V1 + V2 : Télécharger depuis (Google Drive)

 

dimanche 29 décembre 2024

Delphi - Comment connecter ADOConnection1 à une base de données Microsoft Access protégée par un mot de passe de sécurité

1. On double clique sur le composant ADOConnection1

2 . Dans la fenêtre qui va s'afficher, on clique sur le bouton "Build" pour construire la chaîne de connecxion


 3. Dans l'onglet "Fournisseur" on choisit :

- "Microsoft Jet 4.0 OLE DB Provider" pour se connecter à une base de données Access 2002-2003 (.mdb)

- "Microsoft Office 12.0 Access Database Engine OLE DB Provider" pour se connecter à une base de données Access 2007 (.accdb)

Dans cet exemple on va choisir "Microsoft Jet 4.0 OLE DB Provider" et on clique sur le bouton Suivant.



 4. Dans l'onglet "Connexion" on clique sur le petit bouton pour chercher et sélectionner la base de données Access 

Remarque : Si la base de données n'est pas protégée par un mot de passe on clique directement sur le bouton "Tester la connexion", sinon on doit définir le mot de passe dans l'onglet "Toutes"


 

5. On clique sur l'onglet "Toutes" et on cherche la propriété "JET OLEDB:Database Password" et on clique sur le bouton "Modifier la valeur"


6. Dans la fenêtre qui va s'afficher, on saisit le mot de passe de la base de données Access et on clique sur le bouton OK


 

7. On retourne vers l'onglet "Connexion" et on clique sur le bouton "Tester la connexion", Si le test de connexion à réussi alors on clique sur le bouton OK pour valider et fermer la fenêtre suivante


8. On clique sur OK pour valider

 

9. Et au finale on termine par :

Mettre la propriété "LoginPrompt" à False

Mettre la propriété "Connected" à True





samedi 28 décembre 2024

Lazarus - Comment connecter ODBCConnection1 à une base de données Microsoft Access protégée par un mot de passe de sécurité

 

1. On sélectionne le composant ODBCConnection1, ensuite :

- Ajouter « Microsoft Access Driver (*.mdb, *.accdb) » à la propriété Driver du composant ODBCConnection1

- Mettre KeepConnection à True

- Mettre LoginPrompt à False



 

2.

On clique sur le bouton de la propriété Params du composant ODBCConnection1, et dans la fenêtre qui va s’afficher on saisi comme dans la figure :

DBQ=.\Nom_Base_Données.accdb

PWD=Mot_De_Passe

DBQ=.\Nom_Base_Données.accdb -- On précède le nom de la base de données par « .\ » si elle se trouve dans le même emplacement que celui de l’exécutable « Project1.exe », sinon on doit spécifier le chemin comme D:\Database\Nom_Base_Données.accdb

 

Et au finale, on met : 

Connected à True

dimanche 22 décembre 2024

Delphi - Login à une Base de Données Microsoft Access protégée par mot de passe

Description :

Exemples d'une application créée avec Borland Delphi 7 qui permet de se connecter à une base de données Microsoft Office Access protégée par un mot de passe de sécurité. 

Exemple 1 : Débutant V1

Exemple simple, pour ça il faut définir manuellement le chemin vers la base de données "Materiels_Informatique.mdb" ou "Materiels_Informatique.accdb" dans les propriétés du composant ADOConnection1 comme suite :

with dm.ADOConnection1 do
 begin
  Close;
  LoginPrompt:=false;
  ConnectionString:='';
  dm.ADOConnection1.Provider:='Microsoft.Jet.OLEDB.4.0';    //Pour base de données Access 2002-2003 (*.mdb)
  //dm.ADOConnection1.Provider:='Microsoft.ACE.OLEDB.12.0';  //Pour base de données Access 2007 (*.accdb)

     {dm.ADOConnection1.Properties : Propriétés de ADOConnection}
   Properties['Data Source'].Value:=ExtractFilePath(Application.ExeName)+ 'Materiels_Informatique.mdb';    //Chemin de la BD
   Properties['Persist Security Info'].Value:=False;
   Properties['Jet OLEDB:Database Password'].Value:=Edit_MotDePasse.Text;

  end;{with ADOConnection1}

- Dans l’unité « Project1 », la forme « F_login » doit être la forme qui se créer en premier, pour que lorsque on lance l’application c’est la forme « F_login » qui va s’afficher en premier et sera la forme principale du projet Delphi, comme suite :


Exemple 2 : Débutant V2

Lorsque on lance pour la première fois cette application on doit spécifier le chemin d’accès à la base de données "Materiels_Informatique.mdb" ou "Materiels_Informatique.accdb".Et lorsque on se connecte avec cette application à la base de données "Materiels_Informatique.mdb" par exemple, et que la connexion est établi avec succès, un fichier de configuration "Config.ini" se créer automatiquement dans le même répertoire que celui de l’exécutable qui va stocker le chemin d’accès vers la base de données "Materiels_Informatique.mdb" et comme ça la spécification du chemin d'accès à la base de données "Materiels_Informatique.mdb" ne sera pas demandé à chaque tentative de connexion.

- Dans l’unité « Project1 », la forme « F_login » doit être la forme qui se créer en premier, pour que lorsque on lance l’application c’est la forme « F_login » qui va s’afficher en premier et sera la forme principale du projet Delphi, comme suite :


 

Voir : Comment se connecter avec ADOConnection à une base de données Microsoft Access protégée par un mot de passe de sécurité dans Delphi

 

Lien de téléchargement des codes sources :

Débutant V1 : Télécharger depuis (Google Drive)

Débutant V2 :  Télécharger depuis (Google Drive)



samedi 7 décembre 2024

Delphi - login à une base de données MS SQL Server (Débutant)

 Exemple 1 : Débutant V1



  Exemple 2 : Débutant V2

Description :

Application créée avec Borland Delphi 7 qui permet de se connecter à une base de données Microsoft SQL Server (Microsoft SQL Server Express Edition) avec une authentification SQL Server.

Au lancement de cette application une fenêtre de connexion (login) s'affiche en premier qui nécessite d'introduire un nom d'utilisateur et un mot de passe valides afin de se connecter à la base de données SQL Server.

1- On doit exécuter le script "Script_creation_BD_Tables_Utilisateurs.sql" avec "SQL Server Management Studio" pour créer le la base de données "BD_materielsInformatiques" et l'utilisateur "admin" (mot de passe= admin) fournit avec le projet.


 
2- Dans l'unité U_login du projet : on va definir les valeurs des propriétés du composants "ADOConnection1" comme suite:

..
...
with dm.ADOConnection1 do
    begin
     .......
     ......
     ConnectionString:='';
      dm.ADOConnection1.Provider:='SQLOLEDB.1';
     {dm.ADOConnection1.Properties :}
      Properties['User ID'].Value:=Edit_utilisateur.Text;
      Properties['Password'].Value:=Edit_MotDePasse.Text;
      Properties['Initial Catalog'].Value:='BD_materielsInformatiques'//Nom de la base de données
      Properties['Data Source'].Value:=Edit_NomServeur.Text;
      Properties['Persist Security Info'].Value:=False;

    end;{with ADOConnection1}
...
..

Exemple:
 
NomDeVotreServeurSQLServer = NomOrdinateur\SQLExpress comme : (Poste-02\SQLExpress ) Si c'est la version Express Edition. Lors de l'installation de SQL Server Express par defaut le nom de l'instance est SQLExpress, mais il y a aussi la possibilité de changer le nom de l'instance.
 

 
Dans le fichier de projet "Project1.dpr", c'est la forme "F_login" qui doit se créer en premier au lancement de l'application avant la création de la forme principale "F_principale".
 


 
Liens du téléchargement du code source du projet :
 
 
 
Avancé : bientôt














jeudi 18 juillet 2019

Delphi: Procédure Supprimer les lignes vides et les blancs du debut et de fin de chaque ligne d'un Memo


Cette procédure permet de supprimer les lignes vides et les blancs du début et de fin de chaque ligne d'un Memo.

Lien de téléchargement de l'exemple d'une application delphi:  Télécharger
Lien de Téléchargement de l'exécutable: Télécharger

//-----------------------------------------------------------------------
procedure suppr_lignevide_esp(Memo:TMemo);
   var StringList:TStringList;
         i:integer;
begin
    StringList:=TStringList.Create;
    StringList.AddStrings(Memo.Lines);  //Copier les lignes du Memo1 dans StringList
    try
      for i:=StringList.Count-1 downto 0 do
        begin
        StringList[i]:=Trim(StringList[i]);
          if Trim(StringList[i])='' then
            begin
              StringList.Delete(i);
            end;
         Application.ProcessMessages;
        end;
          Memo.Lines.BeginUpdate;
          Memo.Lines.Assign(StringList);
          Memo.Lines.EndUpdate;
     finally
          StringList.Free;
     end;
end;
//----------------------------------------------------------------------

//Utilisation de la procédure
procedure TForm1.Button1Click(Sender: TObject);
begin
   suppr_lignevide_esp(Memo1);
end;


Delphi: Ajuster la largeur des colonnes du composant DBGrid au contenu

Cette procédure permet d'ajuster la largeur des colonnes du composant DBGrid au contenu.

 

 //--------------------------------------------------------------------------------------------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
   TForm1 = class(TForm)

   .....
   .....
   DBGrid1: TDBGrid;
   Procedure AutoSizeColDBGrid(DBGrid:TDBGrid); // <---- Déclaration de La procédure ici
   private

     { Private declarations }
   public
     { Public declarations }
   end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//TForm1.AutoSizeColDBGrid(DBGrid:TDBGrid); pour qu'on puisse appeler cette procédure depuis d'autres unités du projet

Procedure TForm1.AutoSizeColDBGrid(DBGrid:TDBGrid);
var i, ColWidth, ColTextWidth:integer;
begin
if DBGrid.DataSource.DataSet.Active then
 begin
  DBGrid.DataSource.DataSet.DisableControls;
  for i:= 0 to DBGrid.Columns.Count-1 do
    begin
       ColWidth:=DBGrid.Canvas.TextWidth(DBGrid.Columns[i].Field.DisplayLabel);
             DBGrid.DataSource.DataSet.First;
             while not DBGrid.DataSource.DataSet.EOF do
               begin
                ColTextWidth:=DBGrid.Canvas.TextWidth(DBGrid.Columns[i].Field.DisplayText);
                  if (ColTextWidth>ColWidth) then
                   begin
                    ColWidth:=ColTextWidth;
                   end;
                 DBGrid.DataSource.DataSet.Next;
               end;{while}
       DBGrid.Columns[i].Width:=ColWidth+30;
  end;{for}
  DBGrid.DataSource.DataSet.EnableControls;
  DBGrid.DataSource.DataSet.First;
 end;
end;

//-----------------------------------------------------------------------------------------

On doit appeler la procédure
[Procedure AutoSizeColDBGrid(DBGrid:TDBGrid);] après chaque ajout d’un nouvel enregistrement, modification d’un enregistrement, suppression d’un enregistrement, filtrage des données pour l’affichage des enregistrements spécifiques , ou d’exécution des requêtes SQL qui permettent de faire les recherches sur les données de la base de données, Exemples:

//Appeler cette procédure depuis l'unité en cours unit1 {Form1} après l'ajout ou la modification d'un enregistrement
procedure TForm1.ADOTable1AfterPost(DataSet: TDataSet);
begin
    AutoSizeColDBGrid(DBGrid1);
end

//Appeler cette procédure qui se trouve dans unit1 {Form1} depuis une autre unité du projet après la suppression d'un enregistrement
procedure TForm2.ADOTable2AfterDelete(DataSet: TDataSet);
begin
   Form1.AutoSizeColDBGrid(DBGrid1);
end;