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

Langage Delphi Discussion :

DBExpress et problème de type après montée de version de Delphi.


Sujet :

Langage Delphi

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut DBExpress et problème de type après montée de version de Delphi.
    Bonjour

    J'ai repris pour un client une application utilisant DCOM et DBExpress. J'en avais déjà parlé ici en début d'année pour un problème que j'avais pu régler.
    Après une conversion assez rapide, tout semblait bien aller jusqu'à ce que je teste de nouvelles parties de code et que je découvre certains problèmes de types de données qui n'apparaissaient pas dans la version précédente.
    Le principe est le suivant:

    ProgA est le client qui se connecte au serveur DCOM.
    Pour réaliser certaines opérations, le client appelle parfois des fonctions du server en lui passant une chaîne représentant la requête et un tableau de variants contenant les paramètres.
    Hier, sur un test, je reçois une erreur m'indiquant que le pilote dbExpress ne supporte pas le type de données TDBXTypes.UINT8.
    En tirant chaque ficelle de code , je suis arrivé sur une ligne ou un paramètre du tableau de paramètres était assigné comme suit:

    parms[20] := 1;

    Par chance, ce paramètre est le seul ajouté au tableau dans le cas d'une certaine directive de compilation.
    Sinon, le tableau fait un élément de moins et ce paramètre n'est pas utilisé.
    Ceci explique que dans la version n'utilisant pas ce paramètre, aucune erreur n'est déclenchée.

    Pour confirmer la source du problème, j'ai casté le paramètre en integer:

    parms[20] := integer(1);

    Et là, magie, plus de bug !

    Sauf que ......

    Le même genre de problème se produit ailleurs mais avec le type de données TDBXTypes.UNKNOWN.
    Ce type existe pourtant bien.
    J'en déduis que dans certains cas, des valeurs non fournies pour des paramètres ne sont pas supportées si on ne définit pas explicitement leur type.

    Comme il y a beaucoup trop de lignes de code pour passer partout, et que l'environnement utilisé ne permet pas le debug ligne à ligne (j'y peux rien, c'est comme ça ), j'espère qu'il y a une solution plus globale pour éliminer ce genre de situation. Un peu comme avec Firedac et le mapping de types.


    Est-ce que ce genre de cas vous parle et pensez-vous à une solution pour me sortir de cette m...ouille ?

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    mon aversion pour DBExpress je ne la cache pas
    AMHA les types de tes paramètres ne sont pas définis (param.datatype:=ftxxxxxx) c'est ce qui doit poser problème
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    Je sais ... dbexpress c'est pas ma tasse de thé non plus mais le progamme est ainsi fait et je ne peux rien y changer.

    Effectivement, le problème vient bien de là.
    Dans le cas que j'ai trouvé, j'ai résolu le problème en allant voir le texte de la requête, trouver les paramètres, chercher leur type et rajouter les lignes de code pour définir le datatype de chacun.
    Et là, plus de souci.

    Sauf qu'il y a environ 300 cas possibles comme celui-là!
    Donc, soit je trouve une solution globale, soit je vais devoir prendre chaque requête contenant des paramètres et chercher ou le texte est utilisé.
    Pour chacun il faudra que je trouve le type de paramètre en vérifiant dans la structure de la base de données et en rajoutant le code pour définir le type de chacun.

    Ce que je ne comprends pas, c'est que les versions compilées avec l'ancienne version n'ont pas ce problème.
    Il y a donc forcément eu une évolution par rapport à la version Delphi en cours.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Il y a donc forcément eu une évolution par rapport à la version Delphi en cours.
    Taille des entiers ? Comportement des variants ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    Je pencherai plutôt pour les variants mais ça reste une supposition.

    Je pense que je vais tranquillement reprendre chaque requête et faire le nécessaire.
    Même si c'est fastidieux, je suis au moins certain que ça fonctionnera.

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Et si tu essayais avec Paramcheck=false ? C'est un peu limite mais ...
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    J'avais tenté de jouer sur ce paramètre mais sans réel succès.

    Ça a été long et fastidieux mais j'ai fais comme prévu.
    Recherche de chaque utilisation des requêtes et définition du type de paramètre attendu.
    Problème réglé mais travail barbant

    Merci pour le coup de main


    juste pour compléter, je ne suis pas le seul à avoir eu le problème :

    http://www.delphisources.ru/forum/sh...ad.php?t=29051

    J'avais aussi trouvé un autre en cache Google qui n'avait jamais reçu de réponse.

Discussions similaires

  1. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  2. Problème de type chaîne
    Par champijulie dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 12/05/2005, 20h23
  3. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  4. [Sybase] Problème de type sous ASE
    Par Hotchotte dans le forum Sybase
    Réponses: 1
    Dernier message: 18/12/2004, 11h04
  5. Problèmes d'espaces après requete SQL
    Par innosang dans le forum Bases de données
    Réponses: 7
    Dernier message: 29/04/2004, 16h47

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