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 ?
Partager