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 :

Forcer un type de champ créé par SQL


Sujet :

Langage Delphi

  1. #1
    Membre expert

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut Forcer un type de champ créé par SQL
    Bonjour

    Il y a quelque chose qui gène dans mon projet actuel.

    Éléments :
    • Une base Interbase 2017
    • Une table dans la base et dans cette table un champ de type FLOAT
    • Un TSQLConnection
    • Un TSQLQuery pour y faire des requêtes.


    Les champs existent dans le composant TSQLQuery et l'un d'eux est de type TFloatField, ce qui correspondre en tous points au champ FLOAT de la table cible.
    Pourtant, à l'ouverture de la requête, Delphi jure comme un malpropre en disant que le champ est de type float et qu'il attend un single.
    Pour régler la chose, j'ai modifié le type du champ dans le DFM pour le en TSingleField et maintenant tout se passe bien.

    La question est : Pourquoi un TFloatField n'arrive pas à gérer un champ FLOAT Interbase ?

    Avec Firedac, je pourrais jouer avec les "mapping", mais avec le TQSQLConnection, pas possible.
    Ou alors, j'ai raté une configuration cachée.

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 531
    Points : 464
    Points
    464
    Par défaut
    bonjour,
    d'après ma petite expérience, ce problème se met en évidence, soit:
    1- à votre première utilisation du ado votre champs était de type entier et par la suite vous l'avez changé en réel.
    pour ce cas là: il faut supprimer le champs du TADO compiler l'application et par la suite l'ajouter de nouveau et recompiler
    2- vous avez effectuer une opération dans la requête pour obtenir le champs.
    là il faut revérifier votre requête.
    Bonne chance.

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 671
    Points
    41 671
    Billets dans le blog
    64
    Par défaut
    Bonjour,
    @Hocine il ne s'agit pas de ADO mais de DBExpress

    @Papy214 "mais qu'allait-il donc faire dans cette galère ?" dixit Molière
    Plus sérieusement pourquoi utiliser DBExpress, du datasnap qui se cache derrière tout ça ?
    Hocine à raison sur un point tu as déclaré les champs quelque part ou fait un prepare avant d'ouvrir la requête ? À moins que ce soit une requête au runtime ?
    Quid de forcer le type dans ta Requête via un CAST :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST(mavaleur as NUMERIC(10,2)) mavaleur from table
    reste qu'il faut trouver les bons "poids" (longeur et précision) pour DBExpress et voir si le type DECIMAL/NUMERIC n'a pas son mot à dire

  4. #4
    Membre expert

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Tout d'abord, merci à vous deux de vos remontées sur le sujet !

    Qu'est-ce que je vais faire dans cette galère ?
    Shaï m'a déjà fait la remarque ! C'est un projet existant qu'un client nous a confié pour une migration depuis un ancien Delphi.
    Je me serais volontiers passé de DBExpress et de DCOM qui m'ont posé pas mal de problème.

    Le type du champ dans Delphi existant avant la migration et celui dans la base aussi.
    La seule différence se situe dans la version Delphi qui a évolué de D6 à 10.2 et la version de la base de données qui est passée de IB6 à IB2017.
    La version précédente toujours en cours d'utilisation en attendant la fin de la migration fonctionne bien.
    J'imagine donc qu'il y a eu une évolution quelque part.

Discussions similaires

  1. [Lazarus] SQlite3 - Types de champs - création par code
    Par OR34a dans le forum Lazarus
    Réponses: 2
    Dernier message: 14/02/2014, 13h45
  2. [DOM] [INPUT text] Forcer le type du champ
    Par Nicomart dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 24/07/2007, 14h20
  3. Réponses: 5
    Dernier message: 10/05/2006, 16h47
  4. [SQL SERVER 2000]taille et type des champs
    Par Franck2mars dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 09/05/2006, 12h59
  5. Réponses: 2
    Dernier message: 25/01/2006, 22h25

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