IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

MySQL et Lazarus [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut MySQL et Lazarus
    Bonjour

    Il y a une plus d'une dizaine d'années j'ai développé une application de gestion pour une antenne locale du SPF
    Lors de la migration annuelle il est apparu que l'application ne répond plus parfaitement aux besoins il manque des infos d'autres ont changé les méthodes de calcul ont évoluées etc etc etc

    Cette appli avait été développée avec Delphi 7 s'appuyant sur Mysql
    J'utilisais les composants propres à Delphi entre autres des Ttable DbNavigator et des requêtes mysql.

    Pour info les sources de l'appli ont été perdues lors d'une migration et les sauvegardes laissées à l'antenne du SPF sont illisibles (apparement à cause d'un virus) je dois donc repartir à zéro.

    Avec Lazarus impossible d’utiliser les Ttable et je me retrouve incapable de gérer correctement les requêtes SQL je m'appuie sur les précieux documents rédigés par Alcatiz et je grapille aussi par ci par là des infos pour valider mes tests avant de m’attaquer à l'appli mais pour l'instant j'accumule les déconvenues.

    Je maîtrise relativement bien le langage SQL et les docs sont nombreuses quand je suis en panne.
    Avec Delphi 7 j'utilisais le composant TTable et le DbNavigator pour les tables simples (civilité département, Type de colis, type d'aide etc etc... ) pour les tables complexes Bénéficiaires, distributions je travaillais avec des requêtes SQL.

    Mes tests me laissent perplexe

    Lazarus est il assez mûr pour ce type d'appli (10 tables à gérer et de très nombreuses règles, beaucoup d'affichages venant de la synthèse de multiples tables beaucoup de warning en fonction de la situation de la famille etc etc etc )

    table famille bénéficiaire table fille personnes rattachées)
    Entête de distribution lignes de distribution
    Entête dettes lignes dettes
    Entete projet lignes projet

    Bref une petite Gescom adaptée à une antenne du Secours Populaire

    Je cherche si cela est trouvable une doc détaillée sur l'utilisation d'une base MySQL ajout modif suppression suivant précédent table mère table fille DbComboBox

    Actuellement je trouve des fragments par ci pa là mais rien de complet me permettant d'avoir un point de vue objectif de l'utilisation de Lazarus avec MySQL

    D'avance merci à celles ou ceux qui pourront m'indiquer des pistes de recherches .
    Meilleurs voeux à toutes et tous.
    Eric
    Dernière modification par Alcatîz ; 19/01/2020 à 11h10.

  2. #2
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 369
    Points : 9 701
    Points
    9 701
    Par défaut
    Bonjour,

    qu'est-ce que tu appelles les TTables ?

    J'utilises les composants ZeosDBO pour le lien avec les bases de données, et je n'ai aucun soucis pour gérer des TTables (enfin des TZQuery). Mais je pense que cela doit être réalisable avec les composants standards de Lazarus.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Le TTable permettait de gérer une table avec un Dbnavigator un peu comme le TDbf (pour dbase) actuel sour Lazarus

    Je ne connais pas ZeosDBO je viens d'aller sur le site et cela semble correspondre à mon attente par contre je suis preneur de docs ou conseils pour travailler avec les TSQLQuery car là je bute sur un problème de rafraîchissement des données après leur modification et je ne veux pas commencer le dev avant d'avoir assimiler le fonctionnement et l'utilisation de TSQLQuery

    Merci

    Eric

  4. #4
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bonjour, merci et meilleurs voeux à toi également

    Citation Envoyé par Eric4362 Voir le message

    Lazarus est il assez mûr pour ce type d'appli (10 tables à gérer et de très nombreuses règles, beaucoup d'affichages venant de la synthèse de multiples tables beaucoup de warning en fonction de la situation de la famille etc etc etc )
    Oui tu peux parfaitement pour exemple Gestinux (code source dispo sur SF) par Tintinux membre de dvp

    Citation Envoyé par Eric4362 Voir le message
    Bref une petite Gescom adaptée à une antenne du Secours Populaire

    Je cherche si cela est trouvable une doc détaillée sur l'utilisation d'une base MySQL ajout modif suppression suivant précédent table mère table fille DbComboBox

    Actuellement je trouve des fragments par ci pa là mais rien de complet me permettant d'avoir un point de vue objectif de l'utilisation de Lazarus avec MySQL

    D'avance merci à celles ou ceux qui pourront m'indiquer des pistes de recherches .
    Meilleurs voeux à toutes et tous.
    Eric
    La BDD importe peu tout se fera par des TSQLQuery et les commandes adéquates.

    Citation Envoyé par Eric4362 Voir le message

    Je ne connais pas ZeosDBO je viens d'aller sur le site et cela semble correspondre à mon attente par contre je suis preneur de docs ou conseils pour travailler avec les TSQLQuery car là je bute sur un problème de rafraîchissement des données après leur modification et je ne veux pas commencer le dev avant d'avoir assimiler le fonctionnement et l'utilisation de TSQLQuery

    Merci

    Eric
    Les composants ZEOS sont excellent (je les préfères à ceux fournis nativement)
    Ton problème vient surement de la transaction non effectuée un "Dataset.Refresh;" ou fermer et réouvrir la BDD devrait corriger le probleme( voir aussi la propriété "AutoCommit"
    Si tu n'est pas allergique à l'anglais tu pourras piocher beaucoup d'infos sur le forum anglais dédié aux BDD aussi bien sur ZEOS. que surc les composants natif.

    En plus du tutoriel d'Alcatîz il y a aussi celui-ci (si tu es allé fouiller dans la rubrique tutoriel, tu as du le voir)

    Tu peux aussi lire les derniers billets super intéressant de Tourlourou sur SQLite

    Sur youtube tu peux voir ce tuto pour ZEOS (pour Delphi, mais la démarche est la même avec Lazarus)
    Tu as le wiki également pour débuter avec ZEOS



    Voila, si jamais mets tes petits projets test en zip ou le code source qui te poses problème. Et je suis sûre que quelqu'un pourra t'aider

    EDIT sur le forum Delphi il y a des experts en BDD qui pourront t'aiguiller

    A+
    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Invité
    Invité(e)
    Par défaut
    Un grand merci d'avoir pris le temps de me répondre
    Je regarde tout cela

    Bonne fin de journée à vous.
    Eric

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ouah !!!!

    La programmation ce n'est pas comme la natation ou le vélo après 10 ans il y a beaucoup de réflexes qui ont disparu !!!


    Merci vos docs et conseils qui m'ont été d'un précieux secours

    Je suis parvenu à réaliser des tests qui semblent concluants mais pour l'instant toujours dans l'expectative (en attendant vos remarques)

    Je vous donne ci-après le code source de mes premiers tests faute de maitriser la technique multi fenêtres j'affiche un onglet par élément du menu pas très propre d'autant que le code va très très vite grossir et donc le programme sera de moins en moins lisible

    Conclusion :
    Si mon approche est correcte je ne vais utiliser que des TSQLquery et des TDbNavigator ainsi que les composants mis à disposition dans l'onglet DataControl de Lazarus.

    Je regrette d'avoir perdu mes sources Delphi 7 car j'avais à l'époque résolu quasiment toutes les difficultés et j'avais aussi des collègues experts en Delphi !

    Je ne suis pas parvenu à utiliser des unités Exemple
    unit_article
    unit_param
    unit_stock
    ...
    dans lesquelles je place l'ensemble des commandes SQL (un peu comme des sous programmes mais je bloque).

    Soyez indulgents le code est celui d'un nouveau débutant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
     
    unit f_princ;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      SysUtils, mysql57conn, sqldb, db, Forms, Controls, Graphics, Dialogs, Menus,
      ExtCtrls, ComCtrls, StdCtrls, DBCtrls, DBGrids, DBExtCtrls, Buttons,
      pas_sgbd_fede, Classes;
     
    type
     
      { Tform_princ }
     
      Tform_princ = class(TForm)
        bt_quitte_article: TButton;
        bt_quitte_param1: TButton;
        db_art_peremtion: TDBDateEdit;
        db_edit_telephone: TDBEdit;
        db_art_reference: TDBEdit;
        db_art_desig: TDBEdit;
        db_art_max_distrib: TDBEdit;
        db_art_max_famille: TDBEdit;
        db_art_prix: TDBEdit;
        db_nav_article: TDBNavigator;
        db_art_stock: TDBText;
        db_grid_articles: TDBGrid;
        db_nav_fede: TDBNavigator;
        db_edit_courriel: TDBEdit;
        db_edit_nom_fede: TDBEdit;
        db_edit_px_colis_1: TDBEdit;
        db_edit_px_colis_10: TDBEdit;
        db_edit_px_colis_11: TDBEdit;
        db_edit_px_colis_12: TDBEdit;
        db_edit_mt_ratio_1: TDBEdit;
        db_edit_mt_ratio_5: TDBEdit;
        db_edit_mt_ratio_2: TDBEdit;
        db_edit_mt_ratio_6: TDBEdit;
        db_edit_mt_ratio_3: TDBEdit;
        db_edit_mt_ratio_7: TDBEdit;
        db_edit_mt_ratio_4: TDBEdit;
        db_edit_px_colis_2: TDBEdit;
        db_edit_mt_ratio_8: TDBEdit;
        db_edit_mt_ratio_9: TDBEdit;
        db_edit_mt_ratio_10: TDBEdit;
        db_edit_mt_ratio_11: TDBEdit;
        db_edit_mt_ratio_12: TDBEdit;
        db_edit_px_colis_3: TDBEdit;
        db_edit_px_colis_4: TDBEdit;
        db_edit_px_colis_5: TDBEdit;
        db_edit_px_colis_6: TDBEdit;
        db_edit_px_colis_7: TDBEdit;
        db_edit_px_colis_8: TDBEdit;
        db_edit_px_colis_9: TDBEdit;
        db_edit_ville: TDBEdit;
        ds_fede: TDataSource;
        ds_article: TDataSource;
        Image1: TImage;
        Image2: TImage;
        Image3: TImage;
        Label1: TLabel;
        Label10: TLabel;
        Label11: TLabel;
        Label12: TLabel;
        Label13: TLabel;
        Label14: TLabel;
        Label15: TLabel;
        Label16: TLabel;
        Label17: TLabel;
        Label18: TLabel;
        Label19: TLabel;
        Label2: TLabel;
        Label20: TLabel;
        Label21: TLabel;
        Label22: TLabel;
        Label23: TLabel;
        Label24: TLabel;
        Label25: TLabel;
        Label26: TLabel;
        Label27: TLabel;
        Label28: TLabel;
        Label29: TLabel;
        Label3: TLabel;
        Label30: TLabel;
        Label31: TLabel;
        Label32: TLabel;
        Label33: TLabel;
        Label34: TLabel;
        Label35: TLabel;
        Label36: TLabel;
        Label37: TLabel;
        Label38: TLabel;
        Label39: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        label_fede: TLabel;
        label_fede1: TLabel;
        label_fede2: TLabel;
        label_fede3: TLabel;
        MenuItem1: TMenuItem;
        MenuItem2: TMenuItem;
        menu_stock: TMenuItem;
        menu_fich_art: TMenuItem;
        menu_articles: TMenuItem;
        menu_dossiers: TMenuItem;
        menu_sauvarde: TMenuItem;
        menu_quitter: TMenuItem;
        menu_param: TMenuItem;
        menu_distrib_ouvre: TMenuItem;
        menu_distrib_ferme: TMenuItem;
        menu_distrib_saisie: TMenuItem;
        menu_distrib: TMenuItem;
        menu_benef: TMenuItem;
        menu_fichier: TMenuItem;
        menu_princ: TMainMenu;
        Panel1: TPanel;
        Panel2: TPanel;
        Panel3: TPanel;
        Panel4: TPanel;
        Panel5: TPanel;
        Panel9: TPanel;
        panel_article: TPanel;
        Panel7: TPanel;
        Panel8: TPanel;
        sgbd: TMySQL57Connection;
        onglets: TPageControl;
        panel_fede: TPanel;
        sql_articles: TSQLQuery;
        sql_fede: TSQLQuery;
        sql_transact: TSQLTransaction;
        StatusBar1: TStatusBar;
        TabSheet1: TTabSheet;
        tab_benef: TTabSheet;
        tab_distrib: TTabSheet;
        tab_param: TTabSheet;
        tab_article: TTabSheet;
        Timer1: TTimer;
        procedure bt_quitte_articleClick(Sender: TObject);
        procedure ds_articleStateChange(Sender: TObject);
        procedure ds_fedeStateChange(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure menu_distrib_saisieClick(Sender: TObject);
        procedure menu_dossiersClick(Sender: TObject);
        procedure menu_fich_artClick(Sender: TObject);
        procedure menu_paramClick(Sender: TObject);
        procedure menu_quitterClick(Sender: TObject);
        procedure menu_sauvardeClick(Sender: TObject);
        procedure sql_articlesAfterPost(DataSet: TDataSet);
        procedure sql_fedeAfterPost(DataSet: TDataSet);
        procedure Timer1Timer(Sender: TObject);
     
      private
        procedure applic_changement(var_sql:TSQLQuery) ;
      public
     
      end;
     
    var
      form_princ: Tform_princ;
     
    implementation
     
    {$R *.lfm}
     
    { Tform_princ }
    {********************************************************************
     ********************************************************************
               Création et premier affichage
     ********************************************************************
     ********************************************************************}
    procedure Tform_princ.FormCreate(Sender: TObject);
    begin
       try
         sgbd.Connected := True;
         sql_transact.Active := True;
       except
         on e: EDatabaseError do
           begin   (* Erreur de connexion : fin de programme *)
             MessageDlg('Erreur de connexion à la base de données.'#10#13'Le mot de passe est peut-être incorrect ?'#10#10#13'Fin de programme.', mtError, [mbOk], 0);
             Close;
           end;
       end;
       onglets.Visible:=False;
       StatusBar1.Panels.Items[0].Text:='Nous sommes le ' + DateToStr(Date);
    end;
     
    {********************************************************************
     ********************************************************************
                Timer affichage heure
     ********************************************************************
     ********************************************************************}
    procedure Tform_princ.Timer1Timer(Sender: TObject);
    begin
       StatusBar1.Panels.Items[1].Text:='Il est ' + FormatDateTime('hh:mm:ss', Now);
    end;
     
     
    {********************************************************************
     ********************************************************************
                Affichage de l'onglet correspondant
     ********************************************************************
     ********************************************************************}
    procedure Tform_princ.menu_distrib_saisieClick(Sender: TObject);
    begin
       onglets.Visible:=True;
       onglets.ActivePageIndex:=1;
    end;
    procedure Tform_princ.menu_dossiersClick(Sender: TObject);
    begin
       onglets.Visible:=True;
       onglets.ActivePageIndex:=0;
    end;
    procedure Tform_princ.menu_fich_artClick(Sender: TObject);
    begin
      onglets.Visible:=True;
      onglets.ActivePageIndex:=3;
    end;
    procedure Tform_princ.menu_paramClick(Sender: TObject);
    begin
        onglets.Visible:=True;
        onglets.ActivePageIndex:=2;
        label_fede.Caption:='   Antenne ' + db_edit_nom_fede.Caption + '      '  +  db_edit_ville.Caption + '   ';
        db_edit_nom_fede.SetFocus;
    end;
    procedure Tform_princ.menu_quitterClick(Sender: TObject);
    begin
      Application.Terminate;
    end;
    procedure Tform_princ.menu_sauvardeClick(Sender: TObject);
    begin
     
    end;
    {*****************************************
    ********   Fin Affichage onglets   *******
    *****************************************}
     
     
    {********************************************************************
     ********************************************************************
                Procédures SQL
     ********************************************************************
     ********************************************************************}
    procedure Tform_princ.sql_articlesAfterPost(DataSet: TDataSet);
    begin
      applic_changement(sql_articles);
    end;
     
    procedure Tform_princ.sql_fedeAfterPost(DataSet: TDataSet);
    begin
      applic_changement(sql_fede);
      panel_fede.Color:=$0080FFFF;
      menu_paramClick(Nil);
    end;
     
    // ****  Là j'ai un doute ... cela suffit il ****//
    procedure Tform_princ.applic_changement(var_sql:TSQLQuery);
    begin
      if sql_transact.Active
       then
         try
           var_sql.ApplyUpdates;
         except
           on e: EDatabaseError do
             begin
               MessageDlg('Erreur sur la base de données les modifications n''ont pas été enregistrées', mtError, [mbOk], 0);
             end;
         end;
    end;
     
    // ** Appli utilisée par des personnes souvent néophites en informatiques
            donc aide visuelle maximum   **// 
    procedure Tform_princ.ds_fedeStateChange(Sender: TObject);
    begin
       If ds_fede.State=dsEdit Then panel_fede.Color:=$008080FF;
       If ds_fede.State=dsBrowse Then panel_fede.Color:=$0080FFFF
    end;
     
    procedure Tform_princ.ds_articleStateChange(Sender: TObject);
    begin
       If (ds_article.State=dsEdit) Or (ds_article.State=dsInsert) Then panel_article.Color:=$008080FF;
       If ds_article.State=dsBrowse Then panel_article.Color:=$0080FFFF
    end;
     
    {********************************************************************
     ********************************************************************
            Fermeture de l'onglet (commun à l'ensemble des onglets)
     ********************************************************************
     ********************************************************************}
    procedure Tform_princ.bt_quitte_articleClick(Sender: TObject);
    begin
      If (ds_article.State=dsEdit)
      Or (ds_article.State=dsInsert)
      Or (ds_fede.State=dsEdit)
      Then ShowMessage('Impossible de quitter cet écran vous insérez ou modifiez un enregistrement. Merci de valider ou annuler votre travail')
      Else onglets.Visible:=False;
    end;
     
    end.

    Je continue de tester ce multi fenetres

    Bon week end

    Eric

  7. #7
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Lazarus et MySQL fonctionnent très bien ensemble et en utilisant les composants Zeos ça marche comme sous Delphi.
    Je me permet de te renvoyer au petit article que j'avais rédigé (https://remi-gouyon.developpez.com/t...ere-appli-bdd/) .C'est extrêmement basique mais tu y trouvera peut être quelques astuces.
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  8. #8
    Invité
    Invité(e)
    Par défaut
    Merci de vos réponses et de vos conseils

    Voici les premiers écrans










    Le développement est effectué avec les composants Lazarus d'origine

    Insertion et modification sont effectués de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
          // Création du mouvement de stock
          With sql_insertion do Begin
            Close;
            SQL.Clear;
            SQL.Add('INSERT INTO `db_mvt_stock` ' +
            '( `mvt_art_ref`, `mvt_art_designation`, `mvt_prix_achat`, `mvt_prix_vente`,'+
            '  `mvt_entree_stock`, `mvt_sortie_stock`, `mvt_date_mouvement`, `mvt_type_mvt`)' +
            ' VALUES ( ''' + sql_rech_art.FieldByName('art_ref').AsString + '''' +
            ', ''' + sql_rech_art.FieldByName('art_designation').AsString + '''' +
            ', ''' + FloatToStr(sql_rech_art.FieldByName('art_prix').AsFloat) + '''' +
            ', ''' + FloatToStr(sql_rech_art.FieldByName('art_prix').AsFloat) + '''' +
            ', ''' + IntToStr(qte_entree) + '''' +
            ', ''' + IntToStr(qte_sortie) + '''' +
            ', ''' + formatdatetime('YYYY',edit_date_mvt_stock.Date)+
            '-' + formatdatetime('MM',edit_date_mvt_stock.date) +
            '-' + formatdatetime('DD',edit_date_mvt_stock.Date) + '''' +
            ', ''' + type_mvt + ''')') ;
            Try
              ExecSQL;
            Except
              Showmessage('Problème sur la création d''un mouvement de stock ' + #13 + sql_insertion.SQL.Text);
            End;
          end;
     
          // Maj de la quantité stock de l'article //
          If radio_grp_entree_sortie.ItemIndex=0  // Entrée de stock
          Then nouveau_stock:= sql_rech_art.FieldByName('art_qte_stock').AsInteger  + edit_qte_mvt_stock.Value
          Else nouveau_stock:= sql_rech_art.FieldByName('art_qte_stock').AsInteger  - edit_qte_mvt_stock.Value;
          With sql_self_service do begin
            Close;
            Active:=False;
            sql.Clear;
            Sql.Add('UPDATE `db_articles` SET `art_qte_stock`= '+ '''' + IntToStr(edit_qte_mvt_stock.Value)+ '''' +
            ' WHERE `art_recid`= '' ' + IntToStr(sql_rech_art.FieldByName('art_recid').AsInteger) + ''''  );
            Try
              ExecSQL;
            Except
              Showmessage('Problème sur la mise à jour de la valeur stock dans la fiche article' + #13 + sql_insertion.SQL.Text);
            End;
          end;
    Voilà le tout début reste le plus difficile la gestion des bénéficiaires et des distributions.
    J'avais il y a dix ans réalisé un générateur de code SQL s'appuyant sur les composants posés sur la fiche mais hélas j'ai perdu les sources.
    Bonne fin de semaine.
    Eric

  9. #9
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut bon début, tu as juste un faute d’orthographe "péremtion" --> "péremption"

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  10. #10
    Invité
    Invité(e)
    Par défaut
    Merci erreur corrigée

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gouyon Voir le message
    Lazarus et MySQL fonctionnent très bien ensemble et en utilisant les composants Zeos ça marche comme sous Delphi.
    Je me permet de te renvoyer au petit article que j'avais rédigé (https://remi-gouyon.developpez.com/t...ere-appli-bdd/) .C'est extrêmement basique mais tu y trouvera peut être quelques astuces.
    Une aide précieuse votre tutoriel sur Zéos
    J'ai finalement changé mon fusil d'épaule et décidé d'utiliser Zéos c'est un énorme gain de temps reste à trouver comment faire une vérification de la valeur des champs avant de poster et éventuellement annuler la mise à jour de la table. Avant je passais par des requêtes SQL c'était plus simple mais avec le Ztable je continue de tester.

    D'autre part sachant que l'appli pourra être déployée sur un serveur sans le modèle de données je teste aussi la création de celui ci ... pas évident après 10 ans sans développer !!!


    Eric

  12. #12
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Eric4362 Voir le message
    Une aide précieuse votre tutoriel sur Zéos
    J'ai finalement changé mon fusil d'épaule et décidé d'utiliser Zéos c'est un énorme gain de temps reste à trouver comment faire une vérification de la valeur des champs avant de poster et éventuellement annuler la mise à jour de la table. Avant je passais par des requêtes SQL c'était plus simple mais avec le Ztable je continue de tester.

    D'autre part sachant que l'appli pourra être déployée sur un serveur sans le modèle de données je teste aussi la création de celui ci ... pas évident après 10 ans sans développer !!!


    Eric
    Salut fouilles dans le forum Delphi tu devrais y trouver les réponses que tu cherches

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Nom : 2020-01-28_14-04-12.png
Affichages : 575
Taille : 20,3 Ko

    Sympa ce composant TDBRadioGroup mais je ne parviens pas à afficher tout de manière horizontale

    Alors si quelqu'un a résolu le problème d'avance merci
    Sinon le projet avance
    Fédération OK
    Articles OK
    Stock OK
    Familles OK
    Membres familles en cours
    et encore plein de choses ensuite

    Je n'ai pas encore fait la partie permettant de créer le SGBD donc pas évident de vous donner de quoi tester je vous envoie rapidement des copies écran.

    A plus

    Eric

  14. #14
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut ajoutes simplement un TPanel avec align=alTop puis ajoutes tes RadioGroups dedans avec align = alLeft et alCLient pour le dernier. Tu peux te servir de la propriétés BorderSpacing pour ajuster le placement

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  15. #15
    Invité
    Invité(e)
    Par défaut
    Merci Jérôme mais j'ai mal formulé ma question
    Je souhaite aligner les deux radios boutons sur la même ligne que le texte voir copie écran modifiée avec Gimp je souhaite un affichage comme pour
    le TDBRadioGroup Soutien scolaire

    Nom : 2020-01-28_14-04-12-vcorrigee.png
Affichages : 555
Taille : 33,4 Ko

    A plus tard
    Eric

  16. #16
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut

    simple, ne met pas de titre dans ton TRadioGroup et pour chaque "TRadioGroup" tu prend un TPanel (align = alTop) dedans tu places un TLabel(align = alLeft, layout = tlCenter, alignment = taRightJustify, autosize = false) puis ton TRadioGroup (align : alClient) et tu DEVRAS joue avec les propriétés borderspacing pour aligner le tout convenablement (sur avec le Label).

    Le probleme c'est qu'avec les TGroupBox, TradioGroup, tu ne peux pas enlever la bordure. Le seul moyen c'est d’utiliser 2 RadioButton a la place, mais in il n'existe pas de TRadioButton pour les BDD


    EDIT : Sinon plutôt que d'utiliser des TRadioGroup utilises simplement une TDBCheckbox (et tu changes le libellé en fonction par exemple)
    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  17. #17
    Invité
    Invité(e)
    Par défaut
    Merci problème réglé


    Un autre surgit
    Je fais le module de connexion SGBD et de création des tables si pas de modèle de données intallé

    Afin de rendre le code plus lisible je souhaite utiliser une nouvelle fiche mais impossible
    J'ai suivi ce tuto http://cours.thirion.free.fr/Cours/P...-Fenetrage.php

    et voici le message : Nom : 2020-02-01_10-34-37.png
Affichages : 550
Taille : 6,6 Ko

    Et le code associé dans customform.inc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {------------------------------------------------------------------------------
      procedure TCustomForm.Show;
    ------------------------------------------------------------------------------}
    procedure TCustomForm.Show;
    begin
      if Application.Scaled and Scaled and (Monitor.PixelsPerInch<>PixelsPerInch) then
        AutoAdjustLayout(lapAutoAdjustForDPI, PixelsPerInch, Monitor.PixelsPerInch,
          Width, MulDiv(Width, Monitor.PixelsPerInch, PixelsPerInch));
     
      Visible := True;
      BringToFront;
    end;
    Je vais faire des tests dans une nouvelle appli

    Merci de vos conseils

    Eric

  18. #18
    Invité
    Invité(e)
    Par défaut
    Problème réglé

    La fiche n'était pas créée

    Je suis allé dans les options du projet dans l'onglet Fiches, j'ai remonté la fiche créée automatiquement et maintenant c'est ok


    Nom : 2020-02-01_12-02-18.png
Affichages : 547
Taille : 27,4 Ko

    Bon étape suivante me connecter manuellement au serveur mysql

    Bon WE

    Eric

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Bien grâce à vous et aussi grâce au composant Zeos je me sens capable de poursuivre ; la reprise est difficile mais je me sens à nouveau à l'aise.

    Internet (dont vous sur ce forum) remplace les collègues qui il y a dix ans m'ont assisté.

    J'ai retrouvé un dossier papier dans lequel j'avais noté pas mal de choses dont cette astuce pour simplifier les opérations de calcul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    Je me base soit sur le type de composant déposés sur un panel  soit sur le tag des composants
     
    // Procédure de calcul commune à toutes les ressources
    // var_tot_charges  et var_tot_ressources  sont des variables globales 
     
    procedure Tform_princ.db_salaireChange(Sender: TObject);
    Var
       i , total_energie  : Integer ;
    begin
      var_tot_charges:=0;
      var_tot_ressources:=0;
      total_energie:=0;
      // calcul solde ressources
      for i := 0 to pred(panel_ressources_famille.ControlCount) do
      Begin
         if (panel_ressources_famille.Controls[i] is TDBedit) Then
         Begin
           If trim((panel_ressources_famille.Controls[i] as TDBEdit).Text ) <> '' Then
           var_tot_ressources:=var_tot_ressources + StrToInt((panel_ressources_famille.Controls[i] as TDBEdit).Text) ;
         End;
         label_ressources_mensuelles.Caption:=' Ressources mensuelles : ' + IntToStr(var_tot_ressources);
      end;
     
     
      // calcul solde charges
      for i := 0 to pred(panel_charges_famille.ControlCount) do
      Begin
         if (panel_charges_famille.Controls[i] is TDBedit) Then
         Begin
           If trim((panel_charges_famille.Controls[i] as TDBEdit).Text ) <> '' Then
           var_tot_charges:=var_tot_charges + StrToInt((panel_charges_famille.Controls[i] as TDBEdit).Text) ;
           If ((panel_charges_famille.Controls[i] as TDBEdit).Tag  = 999) And
              (trim((panel_charges_famille.Controls[i] as TDBEdit).Text ) <> '') Then
           total_energie:=total_energie + StrToInt((panel_charges_famille.Controls[i] as TDBEdit).Text) ;
         End;
         label_charges_mensuelles.Caption:=' Charges mensuelles : ' + IntToStr(var_tot_charges);
         label_tot_energie.Caption:='Total Eau / Energie : ' + IntToStr(total_energie);
      end;
     
      panel_solde_mens_dispo.Caption:=' Solde mensuel disponible : ' + IntToStr(var_tot_ressources - var_tot_charges) ;
    end;
    Après beaucoup de réflexion je repars quasiment à zéro car plutôt que d'utiliser un onglet pour gérer mes différents écrans je vais passer par des fiches cela rendra le code plus lisible

    La fenêtre principale comme dans Gestinux contiendra le menu chaque fenêtre fille sera dédiée à une seule fonction Famille distribution paramétrage articles stock etc etc etc
    Pour info impossible d'installer gestutils que je n'ai pas su trouver

    J'avais cette nuit découvert un article intéressant dans lequel était expliqué la manière de simuler le fonctionnement d'un onglet avec des forms filles qui venaient se placer dans la form mère et ce de manière transparente sans barre de titre correctement centrée etc etc

    Je recherche depuis ce matin cet article sans succès si l'un de vous le trouve je suis preneur.

    Autres conseils dont je suis preneur les composants additionnels Zeos est une perle j'ai aussi installé Lazreport et la série de composants RX tools .. controls dbawre ... le choix est vaste alors votre expérience est des plus précieuse pour moi.

    Pour info une fois terminé le programme sera mis à disposition de la communauté le modèle de données est adapté à la gestion d'une association caritative devant gérer des bénéficiaires; des distributions et devant aussi assurer un suivi.

    A plus tard.

    Eric
    Dernière modification par Invité ; 02/02/2020 à 09h38.

  20. #20
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut Eric,

    Citation Envoyé par Eric4362 Voir le message
    Bonjour,

    Bien grâce à vous et aussi grâce au composant Zeos je me sens capable de poursuivre ; la reprise est difficile mais je me sens à nouveau à l'aise.

    Internet (dont vous sur ce forum) remplace les collègues qui il y a dix ans m'ont assisté.

    J'ai retrouvé un dossier papier dans lequel j'avais noté pas mal de choses dont cette astuce pour simplifier les opérations de calcul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    Je me base soit sur le type de composant déposés sur un panel  soit sur le tag des composants
     
    // Procédure de calcul commune à toutes les ressources
    // var_tot_charges  et var_tot_ressources  sont des variables globales 
     
    procedure Tform_princ.db_salaireChange(Sender: TObject);
    Var
       i , total_energie  : Integer ;
    begin
      var_tot_charges:=0;
      var_tot_ressources:=0;
      total_energie:=0;
      // calcul solde ressources
      for i := 0 to pred(panel_ressources_famille.ControlCount) do
      Begin
         if (panel_ressources_famille.Controls[i] is TDBedit) Then
         Begin
           If trim((panel_ressources_famille.Controls[i] as TDBEdit).Text ) <> '' Then
           var_tot_ressources:=var_tot_ressources + StrToInt((panel_ressources_famille.Controls[i] as TDBEdit).Text) ;
         End;
         label_ressources_mensuelles.Caption:=' Ressources mensuelles : ' + IntToStr(var_tot_ressources);
      end;
     
     
      // calcul solde charges
      for i := 0 to pred(panel_charges_famille.ControlCount) do
      Begin
         if (panel_charges_famille.Controls[i] is TDBedit) Then
         Begin
           If trim((panel_charges_famille.Controls[i] as TDBEdit).Text ) <> '' Then
           var_tot_charges:=var_tot_charges + StrToInt((panel_charges_famille.Controls[i] as TDBEdit).Text) ;
           If ((panel_charges_famille.Controls[i] as TDBEdit).Tag  = 999) And
              (trim((panel_charges_famille.Controls[i] as TDBEdit).Text ) <> '') Then
           total_energie:=total_energie + StrToInt((panel_charges_famille.Controls[i] as TDBEdit).Text) ;
         End;
         label_charges_mensuelles.Caption:=' Charges mensuelles : ' + IntToStr(var_tot_charges);
         label_tot_energie.Caption:='Total Eau / Energie : ' + IntToStr(total_energie);
      end;
     
      panel_solde_mens_dispo.Caption:=' Solde mensuel disponible : ' + IntToStr(var_tot_ressources - var_tot_charges) ;
    end;
    Il me semble que c'est possible de faire la somme ou d'autres calcul avec les commandes SQL voir cette discussion, celle-ci et celle-là

    Sinon une autre solution, sans SQL est présenté ici

    Citation Envoyé par Eric4362 Voir le message
    Après beaucoup de réflexion je repars quasiment à zéro car plutôt que d'utiliser un onglet pour gérer mes différents écrans je vais passer par des fiches cela rendra le code plus lisible

    La fenêtre principale comme dans Gestinux contiendra le menu chaque fenêtre fille sera dédiée à une seule fonction Famille distribution paramétrage articles stock etc etc etc
    Pour info impossible d'installer gestutils que je n'ai pas su trouver
    C'est un paquet ??? une unité ??? de Gestinux ???

    Citation Envoyé par Eric4362 Voir le message
    J'avais cette nuit découvert un article intéressant dans lequel était expliqué la manière de simuler le fonctionnement d'un onglet avec des forms filles qui venaient se placer dans la form mère et ce de manière transparente sans barre de titre correctement centrée etc etc

    Je recherche depuis ce matin cet article sans succès si l'un de vous le trouve je suis preneur.
    Regardes dans l'historique de ton navigateur, si tu le conserve. Sinon il y a les Frames.

    Sinon avec une Form si je me souvient bien :

    - BorderStyle = bsNone
    - Align = alClient
    - Parent = Panel

    Mais il semble qu'il y a encore un truc à faire, mais je m'en souviens plus

    Citation Envoyé par Eric4362 Voir le message
    Autres conseils dont je suis preneur les composants additionnels Zeos est une perle j'ai aussi installé Lazreport et la série de composants RX tools .. controls dbawre ... le choix est vaste alors votre expérience est des plus précieuse pour moi.


    Pour ma part j'essayes de me servir le plus possible des composants natifs, qui sont suffisant dans la majorité des cas.
    Le problème avec des bibliothèques tierces c'est que l'on n'a pas forcément envie (de polluer notre EDI) de les installer, surtout pour une seule application et surtout si on s'en sert jamais

    De plus si l'on cherche à avoir un comportement spéciale, les événements sont là.
    Et si jamais j'ai besoin d'un seul composant spécial, et que ce n'est pas possible via les événements, j'essayes de le coder moi même et je l'incorpore dans un paquet (ou au mieux, je fournis juste l'unité et je crée ce composant en "runtime" dans mon application)

    Par exemple si tu utilises les RX Tools dans ton projet, je regarderai le code source, vite fait, mais je ne le compilerai jamais (pas envie d'installer une usine à gaz, supplémentaire). J'essayerai de trouver ou te demanderai la version compilée tout simplement

    Citation Envoyé par Eric4362 Voir le message
    Pour info une fois terminé le programme sera mis à disposition de la communauté le modèle de données est adapté à la gestion d'une association caritative devant gérer des bénéficiaires; des distributions et devant aussi assurer un suivi.

    A plus tard.

    Eric
    Cool tu pourras le placer directement dans la section téléchargement de DVP

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Lazarus] Problèmes SQLQuery MySQL et Lazarus 1.4.4 FPC 2.6.4
    Par Philippe_2010 dans le forum Lazarus
    Réponses: 9
    Dernier message: 18/01/2016, 09h35
  2. [Lazarus] Problème MySql et lazarus
    Par Biobytes dans le forum Lazarus
    Réponses: 2
    Dernier message: 07/04/2015, 21h15
  3. [Lazarus] Lazarus, Zeos, MySql et les champs autoincrémentés
    Par tintinux dans le forum Lazarus
    Réponses: 16
    Dernier message: 23/05/2010, 14h04
  4. [Lazarus] tMysqlConnection avec Mysql Embeddeb
    Par SkyWalker dans le forum Lazarus
    Réponses: 0
    Dernier message: 25/10/2007, 12h17
  5. Réponses: 5
    Dernier message: 19/05/2006, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo