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 :

Invalid variant type conversion


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Points : 60
    Points
    60
    Par défaut Invalid variant type conversion
    salut

    j'ai ce message d'erreur lors de la lecture des retours d'une requête dans une base access, avec ce code :

    if Query.Rs.Fields['truc'].Value = '' then

    delphi étant un peu loin, je me souviens plus comment afficher des informations sur un objet, comme son type, etc. je peux même pas faire un RichEdit1.Lines.Add de mon field, ça me sort la même erreur, donc je peux pas savoir quel est son contenu

    comment ça marche ces variants ?

  2. #2
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    Je dirais que ton Value doit être à null.

    Le problème c'est qu'un Null c'est une valeur... dont on ne connait pas la valeur. Donc tu ne peux pas le convertir en string pour tester si la chaîne est vide.

    Dans Delphi tu as la fonction VarIsNull pour tester si le variant est à Null.

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Un ancien Phidels !

    Cette syntaxe me surprend
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Query.Rs.Fields['truc'].Value = '' then
    Query ? Quel Lib ?
    Rs ? C'est Quoi ?

    c'est soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Query.Fields[0].Value = '' then
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Query.FieldValues['truc'] = '' then
    utilise FieldByName pour accéder au TField qui te prosera AsString, IsNull ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Query.FieldByName('truc').IsNull or (Query.FieldByName('truc').AsString = '') then

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Points : 60
    Points
    60
    Par défaut
    c'est une classe que je me suis faite, qui facilite les requête dans les bases access (ouai je sais ...)

    c'est basé sur Connection15 pour la connexion, et RecordSet15 pour la partie record (Rs).

    je n'ai pas accès à des méthodes bien intéressantes sur le RecordSet15, pas de asString ou autres, ormi Value (de type OleVariant) c'est pas ce que je veux.

    j'avoue les OleVariant je galère un peu

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Ah, c'est ta propre couche ! Fallait nous le dire Avant !
    Je suis parti sur un TDataSet standard !

    Effectivement dans l'unité Variants (D7) comme l'indique Franck SORIANO, tu peux utiliser VarIsNull ou VarIsEmpty
    Je serais toi, j'inverserais mes condition pour utiliser VarIsStr, c'est toujours plus simple de gérer l'unique bon cas, tous les autres étant considérés comme faux !
    Ensuite VarType() te renverra une énumération TVarType si tu veux gérer type par type !

Discussions similaires

  1. invalid variant type convertion
    Par rec82 dans le forum Bases de données
    Réponses: 6
    Dernier message: 24/12/2008, 14h26
  2. VARIANT type, solution facile ?
    Par the_jol dans le forum MFC
    Réponses: 2
    Dernier message: 17/01/2006, 17h28
  3. [JDBC]Invalid Operation : Type de ResultSet
    Par zizou771 dans le forum JDBC
    Réponses: 7
    Dernier message: 10/10/2005, 11h56
  4. [XMLRAD] invalid character type
    Par Sylvain James dans le forum XMLRAD
    Réponses: 4
    Dernier message: 10/12/2002, 07h47
  5. Convertion de type VARIANT à type CString
    Par j_grue dans le forum MFC
    Réponses: 2
    Dernier message: 07/11/2002, 14h18

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