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 :

Remplacer le ‘Vide’ par un ‘O’


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    J'aime la programmation avec Delphi
    Inscrit en
    Avril 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : J'aime la programmation avec Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 227
    Points : 132
    Points
    132
    Par défaut Remplacer le ‘Vide’ par un ‘O’
    bonjour

    J’ai une requête SQL via adoquery ci-dessous :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select COLONNE1, Count(*) NB_Appel 
    from BROADCAST.STATISTICS 
    where substr(COLONNE5,46,1)='1' 
    and COLONNE1 
    between '09/05/2011' and '11/05/2011' 
    GROUP BY COLONNE1

    Mais j’ai un petit souci concernant le vide, quand le résultat est nul (aucun résultat) SQL me renvoi rien uniquement mes deux colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    COLONNE1/ NB_Appel
       **            **
    Comment je peux afficher le résultat avec mon intervalle entre (date1 et date2) plus si le compteur est vide écrire un ‘0’ on utilise requête SQL ou Avec un Code ?

    COLONNE1/ NB_Appel
    09/05/2011     0
    10/05/2011     0
    11/05/2011     0
    Merci pour votre habituel support.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Comment je peux forcer le résultat avec mon intervalle entre (date1 et date2) plus si le compteur est vide écrire un ‘0’ ?
    en français cela donne quoi ?
    Cette phrase n'est pas très claire !

    Quel pourrait être l'utilité de cela ?
    IsEmpty ou RecordCount t'indique que ton DataSet est vide, suffit de le gérer !
    Surtout mis si tu pouvais écrire 0 que mettrais-tu comme date ? date1 ? date2 NULL ?

    Si la problématique est un affichage, tu dois utiliser un composant comme un TStringGrid, remplir toi même la colonne avec les Dates entre Date1 et Date2 (une boucle et IncDay), et lors du remplissage, tu consulte le DataSet pour savoir si la Date est présente (via un Locate), si oui tu prends la valeur, si non, tu affiche le 0
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre habitué
    Homme Profil pro
    J'aime la programmation avec Delphi
    Inscrit en
    Avril 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : J'aime la programmation avec Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 227
    Points : 132
    Points
    132
    Par défaut
    Merci ShaiLeTroll pour ta repense pour plus de précision après ma requête je récupère le Query dans un champs d’une (Memory table)
    Je me demande comment je peux gérer s’il y a aucune repense je met le ‘0’ et ne pas le ‘Vide’

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    kmtable1.Insert;
    kmtable1.FieldByName('Date').asstring:=
    adoquery1.FieldByName('COLONNE1').asstring;
    kmtable1.FieldByName('Nb_Rejeté').asstring:=
    adoquery1.FieldByName('count(*)').asstring;
    kmtable1.Post;

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Teste IsNull et force un '0'
    Sinon, AsInteger sur un champ null, si le champ est bien entier à la base, cela renvoie un Zéro
    une COUNT(*) renvoie zéro, jamais NULL
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre habitué
    Homme Profil pro
    J'aime la programmation avec Delphi
    Inscrit en
    Avril 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : J'aime la programmation avec Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 227
    Points : 132
    Points
    132
    Par défaut
    salut

    j'ai fais que vous me disiez (champs du table type integer) mais le souci persiste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    kmtable1.FieldByName('Nb_Rejeté').asinteger:=
    adoquery1.FieldByName('count(*)').asinteger;
    j'ai vérifier la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    adoquery1.FieldByName('count(*)').asinteger
    avec un showmessage strtoint(adoquery1....) il me donne un '0'.

    mais dont l'insertion rien

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par louay02 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    adoquery1.FieldByName('count(*)').asinteger
    Je doute que cela fonctionne.
    En général dans la requête on ecrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select count(*) as Resultat from LaTable
    Et après on récupère

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    adoquery1.FieldByName('Resultat').asinteger
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Je doute que cela fonctionne.
    +1

    C'est sûr même. "Count(*)" est un nom de champ invalide.
    D'après le premier post, ce champ s'appelle NB_Appel.

    @+

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    C'est sur ? euh non pas du tout !

    "COUNT(*)" aussi bizarre que l'on pourrait le penser est géré parfaitement par le TADOQuery en tout cas et s'affiche dans un TDBGrid

    Il l'était aussi avec le TMyQuery de Devart\CoreLab MyDAC pour MySQL

    Il n'est évidemment pas supporté lors de Query volatile, avec des TField Persistant cela ne passerait pas !

    Par contre si "COUNT(*)" est sous l'alias NB_Appel !
    Tu devrais avoir une Exception genre FieldNotFound !

    Tu n'aurais pas options sur ton DataSet ou tes Objets visuels comme ZeroIsNull, ZeroAsNull ou encore ZeroAsEmpty comme chez TMS, Dev Express

    As-tu essayé de mettre une valeur en dur, pour tester ?
    Sinon, "Nb_Rejeté", il y a un é essaye sans l'accent, là encore, cela pourrait poser des problèmes
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    :"COUNT(*)" aussi bizarre que l'on pourrait le penser est géré parfaitement par le TADOQuery
    J'aurais juré du contraire.

    En l'absence d'alias défini sur la requête, le SBGD n'est-il pas censé nommer ce champ ce qui donnerait COUNT ou SUM, etc ?

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Je viens de tester en Sybase, ça me renvoie COUNT(*) !
    En MySQL, je ne m'en rappele plus, je mets un alias systématiquement !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Je viens de tester en Sybase, ça me renvoie COUNT(*) !
    Ben m#@!de !!

    Enfin bon ce n'est pas orthodoxe comme façon de faire.
    Merci pour l'info.

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

Discussions similaires

  1. Remplacer valeur vide par date
    Par sniper75 dans le forum SAS Base
    Réponses: 1
    Dernier message: 05/03/2013, 21h06
  2. Remplacer le vide par un ' 0 ' zéro
    Par sniper75 dans le forum SAS Base
    Réponses: 6
    Dernier message: 26/01/2012, 16h33
  3. [VxiR2] Remplacer cellules vides par une valeur
    Par mouhib dans le forum Webi
    Réponses: 7
    Dernier message: 01/12/2010, 09h53
  4. Remplacer des vides par des zéros
    Par Hoopsy dans le forum Langage
    Réponses: 5
    Dernier message: 26/11/2008, 21h42
  5. [XSLT] remplacer valeur vide par espace
    Par Anubis dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 13/02/2008, 09h46

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