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 :

Tutoriel pour apprendre à gérer une base de données MySQL avec les composants natifs de Lazarus, par Alcatîz


Sujet :

Lazarus Pascal

  1. #21
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Merci thewolf... En procédant comme vous l'indiquez, la DLL est bien trouvée. Mais le message d'erreur suivant apparaît : "TMySql50C connection can not work with the installed MySql client version: Expected (5.0), got (5.7.14)...

  2. #22
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 340
    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 340
    Points : 9 599
    Points
    9 599
    Par défaut
    Citation Envoyé par Alcatîz Voir le message
    Petite précision : en principe, le répertoire System32 contient les bibliothèques 64 bits et SysWOW64 les bibliothèques 32 bits.
    C'est pas le contraire ?
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  3. #23
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par Alcatîz Voir le message
    Petite précision : en principe, le répertoire System32 contient les bibliothèques 64 bits et SysWOW64 les bibliothèques 32 bits.
    Oui, c'est a priori cela (inversé), j'ai copié la dll dans les 2 répertoires pour être sûr que cela fonctionne (!) et aussi parce que, utilisant Lazarus 1.6.4 (32 bits), je veux aussi tester la 1.8 ORC4 en 64 bits.

  4. #24
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par YGUIET Voir le message
    Merci thewolf... En procédant comme vous l'indiquez, la DLL est bien trouvée. Mais le message d'erreur suivant apparaît : "TMySql50C connection can not work with the installed MySql client version: Expected (5.0), got (5.7.14)...
    J'ai aussi la 5.7.14 et d'après le tutoriel, il faudrait utiliser le connecteur correspondant c'est-à-dire estampillé 57.

    Or, dans Lazarus 1.6.4 que j'utilise, cela s'arrête au 56. Je n'ai pas essayé de l'utiliser.

    J'ai donc installé la version 1.8 qui elle contient un connecteur "57".

  5. #25
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par thewolf Voir le message
    Or, dans Lazarus 1.6.4, cela s'arrête au 56.
    Je ne sais pas s'il y a une possibilité de mise à jour pour ajouter le connecteur dédié à la version 5.7

  6. #26
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jon Shannow Voir le message
    Citation Envoyé par Alcatîz Voir le message
    Petite précision : en principe, le répertoire System32 contient les bibliothèques 64 bits et SysWOW64 les bibliothèques 32 bits.
    C'est pas le contraire ?
    Hé non, d'ailleurs "WOW64" signifie "Win32 On Win64".
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  7. #27
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par thewolf Voir le message
    Je ne sais pas s'il y a une possibilité de mise à jour pour ajouter le connecteur dédié à la version 5.7
    Il existe un patch pour Lazarus 1.6.4 : http://www.bononiadocta.it/Lazarus/Sqldb.tar.bz2.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  8. #28
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par Alcatîz Voir le message
    Il existe un patch pour Lazarus 1.6.4 : http://www.bononiadocta.it/Lazarus/Sqldb.tar.bz2.
    Merci. J'ai réussi à l'installer et magie, TMySQL57Connection est apparu dans l'onglet Sqldb.

    Donc petit essai de connexion à la base location et là, l'erreur "Can not load default MySql library ("libmysql.dll" or"libmysql.dll") Check your installation" que je pensais avoir résolue en copiant libmysql.dll dans les deux sous-répertoires réapparaît.

    Donc en résumé :
    Windows 10 64 bits + Wamp 64 bits

    Lazarus 1.6.4 32 bits : problème
    Lazarus 1.8 64 bits : OK

  9. #29
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 340
    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 340
    Points : 9 599
    Points
    9 599
    Par défaut
    Citation Envoyé par Alcatîz Voir le message
    Hé non, d'ailleurs "WOW64" signifie "Win32 On Win64".
    Sont tordus chez Microsoft ...

    Merci, en tout cas de ces précisions, me coucherait moins bête ce soir (bon, c'est pas compliqué non plus... )
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  10. #30
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 172
    Points
    172
    Par défaut Point à l'issue de l'exemple 2 : quelques remarques ou questions
    Dans l'exemple 1, il faudrait ajouter "Dans l'inspecteur d'objets, renommez la fiche principale (Form1 par défaut) en MainForm." comme c'est le cas dans l'exemple 2.

    Dans III-A :
    HostName
    192.168.0.1 (dans ma configuration) ou localhost (si votre serveur MySQL tourne sur votre machine)
    Pour suivre ce tutoriel, j'utilise localhost mais à quoi correspond exactement "192.168.0.1", je suppose que c'est si la base est sur un site distant. Cela m'intéresserait d'en savoir un peu plus, au cas où ...

    IV-A : il faut ajouter l'unité db à la clause uses sinon EDatabaseError n'est pas reconnu.

    IV-C : tel que le code est proposé, à l'ouverture du programme, le dbgrid affiche la liste des tables (ce qui est logique puisque c'est la requête sql en cours et que l'événement lbTablesSelectionChange n'est pas encore déclenché).
    Pour contourner ce problème, j'ai ajouté la ligne suivante à la fin de la procédure ShowTables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if SQLQuery1.RecordCount > 0 then lbTables.ItemIndex:= 0;
    procedure lbTablesSelectionChange : je pense que la commande "DBGrid1.Clear;" n'est pas utile, je me trompe ?
    Telle que la procédure est proposée, j'ai un comportement bizarre : quand je change de table, le grid affiche une première colonne vierge en plus de la table demandée.
    Ce n'est pas le cas en inversant les deux premières commandes (close en premier puis clear) ! ou en supprimant le clear.

    IV-D : en jouant avec le TDBNavigator, l'utilisation du dernier bouton (refresh) déclenche l'exception
    "Must apply updates before refreshing data."

    procedure CommitChanges : manque la double apostrophe à "d'enregistrement"
    Est-il possible d'avoir un peu plus d'explications sur le fonctionnement des 3 contrôles nécessaires à la connexion du programme à la base de données (j'ai l'habitude d'utiliser sqlite avec un seul composant : TSqlite3Dataset et c'est bien plus simple). D'où notamment ici :
    - "if SQLTransaction1.Active" : pourquoi vérifier la transaction et pas la connexion ?
    - "SQLQuery1.ApplyUpdates;" : je suppose que cela applique les changements ... mais à quoi ?
    - "SQLTransaction1.Commit;" : du coup, que fait cette commande ?


    Bon, me voila arrivé au bout de l'exemple 2, encore merci pour cet excellent tutoriel. Reste à travailler sur l'application complète !

  11. #31
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Voilà le genre de remarques qui vont permettre d'améliorer ou corriger le tutoriel.

    Citation Envoyé par thewolf Voir le message
    Dans l'exemple 1, il faudrait ajouter "Dans l'inspecteur d'objets, renommez la fiche principale (Form1 par défaut) en MainForm." comme c'est le cas dans l'exemple 2.
    Bonne idée, c'est fait.

    Citation Envoyé par thewolf Voir le message
    Dans III-A :

    Pour suivre ce tutoriel, j'utilise localhost mais à quoi correspond exactement "192.168.0.1", je suppose que c'est si la base est sur un site distant. Cela m'intéresserait d'en savoir un peu plus, au cas où ...
    Mon réseau local fonctionne (comme 90% des réseaux domestiques, sans doute) dans la plage d'adresses 192.168.0. Mon serveur Apache/MySQL a comme IP fixe 192.168.0.1 et distribue à mon PC de travail (et à tous les PC connectés, d'ailleurs) une adresse 192.168.0.xxx. Tu peux éventuellement simuler un réseau local et monter un serveur sur une machine virtuelle.

    Citation Envoyé par thewolf Voir le message
    IV-A : il faut ajouter l'unité db à la clause uses sinon EDatabaseError n'est pas reconnu.
    En effet ! C'est fait.

    Citation Envoyé par thewolf Voir le message
    IV-C : tel que le code est proposé, à l'ouverture du programme, le dbgrid affiche la liste des tables (ce qui est logique puisque c'est la requête sql en cours et que l'événement lbTablesSelectionChange n'est pas encore déclenché).
    Pour contourner ce problème, j'ai ajouté la ligne suivante à la fin de la procédure ShowTables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if SQLQuery1.RecordCount > 0 then lbTables.ItemIndex:= 0;
    C'est extrêmement fugace et la solution de contournement n'y change rien, en fait (sans vouloir te froisser). La solution est de lier le DBGrid au DataSource après l'appel à ShowTables. Mais la remarque est bonne et mérite que j'ajoute un petit encadré.

    Citation Envoyé par thewolf Voir le message
    procedure lbTablesSelectionChange : je pense que la commande "DBGrid1.Clear;" n'est pas utile, je me trompe ?
    On dirait bien, en effet. Je l'ai retirée.

    Citation Envoyé par thewolf Voir le message
    Telle que la procédure est proposée, j'ai un comportement bizarre : quand je change de table, le grid affiche une première colonne vierge en plus de la table demandée.
    Ce n'est pas le cas en inversant les deux premières commandes (close en premier puis clear) ! ou en supprimant le clear.
    Je n'observe personnellement pas cette colonne supplémentaire. Toutefois, ayant enlevé le clear, je suppose que le souci n'en est plus un pour toi ?

    Citation Envoyé par thewolf Voir le message
    IV-D : en jouant avec le TDBNavigator, l'utilisation du dernier bouton (refresh) déclenche l'exception
    "Must apply updates before refreshing data."
    Mince, c'est vrai, le refresh nécessite que la méthode ApplyUpdates du SQLQuery ait été exécutée. Comme ce bouton n'a pas de fonction dans l'exemple, il peut être supprimé dans les propriétés du DBNavigator. Je modifie le chapitre en conséquence.

    Citation Envoyé par thewolf Voir le message
    procedure CommitChanges : manque la double apostrophe à "d'enregistrement"
    Bien vu ! C'est corrigé (et c'était correct dans le code complet à la fin du chapitre).

    Citation Envoyé par thewolf Voir le message
    Est-il possible d'avoir un peu plus d'explications sur le fonctionnement des 3 contrôles nécessaires à la connexion du programme à la base de données (j'ai l'habitude d'utiliser sqlite avec un seul composant : TSqlite3Dataset et c'est bien plus simple). D'où notamment ici :
    - "if SQLTransaction1.Active" : pourquoi vérifier la transaction et pas la connexion ?
    - "SQLQuery1.ApplyUpdates;" : je suppose que cela applique les changements ... mais à quoi ?
    - "SQLTransaction1.Commit;" : du coup, que fait cette commande ?
    Sur le wiki, il y a un diagramme expliquant la hiérarchie et les liens entre les différents composants : http://wiki.freepascal.org/SQLdb_Pro...re_des_classes.

    • "if SQLTransaction1.Active" : ce test évite de déclencher une exception "Operation cannot be performed on an inactive dataset".
    • "SQLQuery1.ApplyUpdates" : le SQLQuery mémorise tous les changements dans son dataset interne ; exécuter ApplyUpdates permet d'envoyer les modifications vers le serveur.
    • "SQLTransaction1.Commit" : par défaut, MySQL travaille en mode autocommit, c'est-à-dire que toute requête entraîne des modifications directes dans la base de données. Mais pas avec les composants SQLdb, qui utilisent des transactions. C'est en quelque sorte le composant TSQLTransaction qui décide si les modifications doivent être appliquées (commit), annulées (rollback), etc.
      Un petit saut vers la FAQ MySQL pourrait peut-être t'éclairer mieux que moi ?

    Je te remercie en tout cas pour toutes tes remarques. Je t'ai d'ailleurs rajouté à la liste des relecteurs techniques du tutoriel.

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  12. #32
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 172
    Points
    172
    Par défaut
    Bonjour.

    C'est extrêmement fugace et la solution de contournement n'y change rien, en fait (sans vouloir te froisser). La solution est de lier le DBGrid au DataSource après l'appel à ShowTables. Mais la remarque est bonne et mérite que j'ajoute un petit encadré.
    Cela n'a rien de fugace, l'affichage est permanent jusqu'à je que je clique sur une des tables dans le listbox. Lier le DBGrid au DataSource après l'appel à ShowTables n'y change rien comme je m'y attendais (à part l'affichage "fugace" de la liste des tables, que je ne remarque pas, ma machine étant rapide).

    C'est normal car, quand on remplit par code un listbox, aucune entrée n'est sélectionnée donc l'événement lbTablesSelectionChange n'est pas déclenché ... or c'est dans cet événement que la requête est mise à jour !

    Je crois que tu es sous Linux et peut-être que le comportement de TListbox est différent ?

  13. #33
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par thewolf Voir le message
    Je crois que tu es sous Linux et peut-être que le comportement de TListbox est différent ?
    Clairement, il faut que j'aille voir sous Windows. J'avoue avoir fait moins de tests sous cet OS.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  14. #34
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Effectivement, sous Windows il n'y a pas de sélection automatique du premier élément, donc j'ai modifié le code source comme tu le proposais.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  15. #35
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par Alcatîz Voir le message
    Effectivement, sous Windows il n'y a pas de sélection automatique du premier élément
    Bizarre et dommage d'avoir un comportement différent suivant le système d'exploitation. Cela ne va pas dans le sens de Lazarus (Write once, compile anywhere) !

    Donc si j'ai bien compris, sous Linux l'événement onSelectionChange est déclenché à chaque ajout d'un item dans le listbox. Ce qui rend indispensable le déplacement de l'affectation au grid de son datasource. Sinon, chaque table est chargée à tour de rôle ce qui serait gênant pour des tables de grande taille !

  16. #36
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par thewolf Voir le message
    Donc si j'ai bien compris, sous Linux l'événement onSelectionChange est déclenché à chaque ajout d'un item dans le listbox. Ce qui rend indispensable le déplacement de l'affectation au grid de son datasource. Sinon, chaque table est chargée à tour de rôle ce qui serait gênant pour des tables de grande taille !
    Non, je viens de vérifier sous Linux, l'événement onSelectionChange n'est déclenché qu'une seule fois et l'ajout d'éléments à la listbox ne change pas l'élément sélectionné.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  17. #37
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 172
    Points
    172
    Par défaut
    je ne comprends pas : qu'est-ce qui le déclenche ?

  18. #38
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Je n'ai pas de réponse, même après avoir tracé l'événement et scruté le code source du composant. La différence est peut-être tout simplement à chercher entre GDI et GTK ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  19. #39
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 172
    Points
    172
    Par défaut Exemple 3 - Premières questions
    Bonjour.

    Tant que nous sommes dans l'inspecteur d'objets, nous allons définir les différents champs de la table Voitures dans les propriétés de SQLQueryVoitures. Repérez la propriété FieldDefs et ...
    A quoi cela sert-il de définir ainsi les champs, cela a été fait lors de la création de la table et le query va donc récupérer ces informations ... D'ailleurs, que se passerait-il si on fait une erreur et introduit une incohérence (ordre différent, nom mal orthographié, erreur de type, mauvaise taille) ?

    Pour l'anecdote, ayant cliqué par mégarde sur le champ "DataField" d'un contrôle alors que son datasource était renseigné, j'ai effectivement été bloqué et ai eu le message comme quoi c'était impossible de récupérer les champs ... mais cela a aussi effacé tout ce que j'avais saisi dans le query !
    Du coup, n'ayant pas le courage de recommencer, j'ai continué sans et cela fonctionne parfaitement ainsi !

    V-C-1. TDBGrid

    Width + MaxWidth
    pas de MaxWidth chez moi mais un MaxSize ! Je suppose que c'est équivalent ?


    V-C-5
    Pourquoi créer une "property Enregistre" avec FEnregistre, la procedure SetEnregistre ?
    J'aurais tout simplement déclaré une variable globale au début de la partie implementation.
    J'en profite pour cette question : quelle est la différence entre "strict private" et "private" ?

  20. #40
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par thewolf Voir le message
    A quoi cela sert-il de définir ainsi les champs, cela a été fait lors de la création de la table et le query va donc récupérer ces informations ... D'ailleurs, que se passerait-il si on fait une erreur et introduit une incohérence (ordre différent, nom mal orthographié, erreur de type, mauvaise taille) ?
    La définition des champs peut enlever toute ambiguïté par rapport aux types utilisés dans la base de données. Il est vrai qu'avec les types basiques utilisés dans l'exemple, on pourrait franchement s'en passer et laisser le dataset récupérer automatiquement les définitions de champs dans la base de données. En cas d'erreur de nom de champ, celui-ci est tout simplement ignoré. Par curiosité, on pourrait expérimenter le mélange des champs (je ne suis pas sûr que cela ait une incidence), des erreurs de taille...

    Citation Envoyé par thewolf Voir le message
    Pour l'anecdote, ayant cliqué par mégarde sur le champ "DataField" d'un contrôle alors que son datasource était renseigné, j'ai effectivement été bloqué et ai eu le message comme quoi c'était impossible de récupérer les champs ... mais cela a aussi effacé tout ce que j'avais saisi dans le query !
    Pour que Lazarus puisse aller récupérer les champs dans la base de données, il faudrait que la connexion soit active au moment de la conception, ce qui impliquerait de temporairement assigner les propriétés HostName, DatabaseName, UserName et Password.

    Citation Envoyé par thewolf Voir le message
    V-C-1. TDBGrid

    Width + MaxWidth
    pas de MaxWidth chez moi mais un MaxSize ! Je suppose que c'est équivalent ?
    Non, c'est bien MaxSize. Je corrige.

    Citation Envoyé par thewolf Voir le message
    V-C-5
    Pourquoi créer une "property Enregistre" avec FEnregistre, la procedure SetEnregistre ?
    J'aurais tout simplement déclaré une variable globale au début de la partie implementation.
    Le principe d'une variable globale me semble sortir de la philosophie du tout-objet ?

    Citation Envoyé par thewolf Voir le message
    J'en profite pour cette question : quelle est la différence entre "strict private" et "private" ?
    Comme l'explique Gilles Vasseur dans son tutoriel sur les principes fondamentaux de la POO :

    • strict private : l'élément n'est visible que par un élément de la même classe dans l'unité de la déclaration ;
    • private : l'élément n'est visible que par un élément présent dans l'unité de la déclaration.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/08/2008, 10h49
  2. créer une boulce pour lire dans une base de donnéé MySQL
    Par pierrot10 dans le forum Administration
    Réponses: 1
    Dernier message: 26/07/2006, 15h21
  3. gérer une base de donnée MySql via C++
    Par thiane dans le forum Bibliothèques
    Réponses: 9
    Dernier message: 19/05/2005, 17h19

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