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

Bases de données Delphi Discussion :

RecNo : différence entre paradox et mysql ?


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Par défaut RecNo : différence entre paradox et mysql ?
    Re-bonjour,

    Voilà que je me heurte à un truc bizarre.
    Dans l'application que je suis en train de migrer, j'ai l'habitude de changer la couleur de fond de la dbgrid une ligne sur deux pour une meilleure lisibilité.
    Le code est relativement simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm3.DBGrid1DrawcolumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
     
    begin
    if odd(dbgrid1.datasource.dataset.RecNo) then
       begin
       if  not (gdfocused in state) then       
          begin
          dbgrid1.Canvas.Brush.color:=vertamande;
          end;
       end;
     
    etc ...
    Donc, normalement quand RecNo est impair la ligne est sur fond vert, sinon c'est le fond normal.

    Cela fait 20 ans que ça marche avec les tables paradox, mais lorsque j'essaye avec une base mysql, RecNo est toujours égal à 1 ....
    Est ce que je n'utilise pas la bonne méthode ? Comment récupérer le numéro d'un enregistrement dans une base Mysql ?

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 638
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    tombé du lit, ce post m'interpelle.
    Cela fait tellement longtemps que je n'utilise plus VCL pour les nouveaux programmes que mon premier reflexe a été "utiliser la propriété alternatingrowbackground".
    De plus j'ai toujours été très frileux avec recno.

    Du coup j'ai voulu tenter l'expérience tout d'abord avec une table MySQL comme demandé, avec constatation du même résultat. Ce n'est qu'après avoir défiler dans la grille que j'ai l'attendu !
    Puis avec une table Firebird en me disant que j'allais d'abord vérifier mon code. Même résultat au démarrage

    Du coup je me suis penché sur la version de Delphi. Comme je savais que c'était avec la version 10.4 grâce à , non pas ma boule de cristal mais, la mémoire de la discussion précédente.
    (N.B. Il est bon de rappeller ça à chaque nouvelle discussion)
    la version 10.3 donne le résultat conforme aux espérances , la 11 aussi j'en déduit qu'il y a une régression quelque part, malheureusement je n'ai pas les 10.4.0, 10.4.1 pour vérifier quand celle-ci a eu lieu

    Bon, alors en attendant une putative correction comment s'en sortir ?

    Après avoir constaté qu'il s'agit bien d'un problème de recno, peut-être due à une "amélioration" non lue dans les notes de versions et tester que sur une colonne entiere de la base le problème ne se posait pas je suggère d'oublier les FDTables (de toute façon c'était déjà plus ou moins écrit par ShaiLeTroll sur la discussion "migration") et de les remplacer par des FDQuerys exprimés ainsi
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *,row_number() OVER () AS RECNO FROM <table>
    bien sûr * sera remplacé par le nom des colonnes voulues, si un order by est indiqué il faudra aussi l'indiquée dans OVER (enfin il me semble que)
    et le test se fera sur le champ ainsi obtenu
    MySQL 8.0 et + sinon lire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Odd(TDBGrid(Sender).DataSource.DataSet.FieldByName('Recno').AsInteger) then ....

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Par défaut
    Merci pour ces tests et la solution que je vais essayer de ce pas.
    Si tu n'utilises plus la vcl, tu utilises quoi ? J'ai dû louper un truc ...

    si ça marche sur la 10.3 je vais essayer ;o) et je te dirai

    c'est quoi la propriété alternatingrowbackground ?

    Comment signaler cette anomalie à embarcadero ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 638
    Billets dans le blog
    65
    Par défaut
    Bonjour
    Citation Envoyé par navyg Voir le message
    Si tu n'utilises plus la vcl, tu utilises quoi ?
    Je suis passé à FMX (multi-plateforme) , même pour des programmes windows. A mon avis (mais après beaucoup d'efforts et un changement assez radical d'habitudes VCL) c'est mieux que VCL

    J'ai dû louper un truc ...
    le ciblage multi-plateforme, un petit truc de rien

    c'est quoi la propriété alternatingrowbackground ?
    une propriété de FMX.TGrid qui sans une once de code de notre part permet d'avoir l'effet recherché (alternance de couleur) selon le style (apparance) utilisé
    si ça marche sur la 10.3
    j'ai fait l'essai avec 10.3.2 donc oui, je n'ai pas mis d'image pour le prouver

    Comment signaler cette anomalie à embarcadero ?
    pour l'instant j'ai signalé le fait à Patrick (pprem) qui est MVP Embarcadero. Je serai bien en peine d'indiquer ce bogue sur le portail Qualité de manière efficace, en général Patrick a plus d'écoute que moi sur ce portail. Les signalements que j'ai pu faire sont le plus souvent restés lettre morte (même en indiquant quelques fois comment solutionner)

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Par défaut
    alors je viens d'essayer en 10.3.3 et ça ne marche pas non plus, cela veut dire qu'il y a peut-être une configuration particulière pour que ça fonctionne ???

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 638
    Billets dans le blog
    65
    Par défaut
    Pourtant

    Nom : Capture.PNG
Affichages : 330
Taille : 36,7 Ko

    bon ok, c'est avec une query et firebird. Je vais rapidement changer le programme pour MySQL et une table

    effectivement "il y a quelque chose de pourri au royaume du Danemark" en utilisant TTable
    Nom : Capture_1.PNG
Affichages : 301
Taille : 9,8 Ko

    mais avec une requête c'est ok (sans même jouer avec la fonction de fenêtrage ROW_NUM)

    du coup j'ai fait le test suivant (un affichage avec un TTable, l'autre avec TQuery)
    Nom : Capture.PNG
Affichages : 309
Taille : 43,4 Ko

    du coup mon mail à Patrick est peut-être un peu moins bien rapporté.
    Je l'ai dit je suis de moins en moins à l'aise avec VCL et Table, cela se confirme !

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Par défaut
    alors la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *,row_number() OVER () AS RECNO FROM <table>
    ça ne marchait pas car je suis sur un mariadb 5 et que row_number n'apparaît que dans mariadb10

    donc j'ai mis mariadb 10 en route sur le nas, j'ai testé (non sans quelques difficultés car l'interprétation de la chaine SQL dans le query change selon que je saute à la ligne après *, ou pas ... va comprendre)

    donc, ça pourrait fonctionner comme ça, sauf que je ne voudrai pas que la colonne apparaisse dans le dbgrid mais on doit pouvoir filtrer ?
    je vais tester aussi avec un query sans row_number

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/07/2020, 18h39
  2. Trouver différence entre 2 tables mysql
    Par zoocoral dans le forum Requêtes
    Réponses: 1
    Dernier message: 12/10/2016, 20h48
  3. [MySQL-5.5] Différence entre Round() sous MySQL et PHP
    Par alainyvan dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/01/2015, 12h28
  4. différence entre paradoxe et les autres
    Par sofianoo dans le forum Bases de données
    Réponses: 1
    Dernier message: 06/03/2007, 15h31
  5. [pb MD5 MySql et C#]Différence entre les chaines
    Par ludovic85 dans le forum C#
    Réponses: 1
    Dernier message: 31/01/2007, 21h11

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