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

  1. #1
    Membre émérite
    Comment cacher des colonnes dont le résultat est "null" ?
    Bonjour

    Une procédure stockée renvoie un tableau de colonnes (champs) et parmi ces colonnes y'en a qui sont à "null" alors pour éviter d'exposer des colonnes vides je cherche un moyen de les rendre "invisible". En cherchant sur le net j'ai pas trouvé une piste qui puisse me guider alors je me retourne vers vous.

    Merci d'avance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  2. #2
    Rédacteur/Modérateur

    Bonjour,

    je n'ai pas la moindre idée de ce qui est demandé ! et répondre que COALESCE est là pour ce genre de cas me semble trop simple.
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  3. #3
    Membre émérite
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    je n'ai pas la moindre idée de ce qui est demandé ! et répondre que COALESCE est là pour ce genre de cas me semble trop simple.
    Merci pour la réponse mais COALESCE ne me semble pas satisfaire ma demande. Si je ne veux pas avoir une colonne avec des "null" partout c'est que je ne veux pas non plus voir des "/" à la place
    en d'autres termes, je veux cacher les colonnes qui ne rendent aucune information mais je crois que c'est un peu difficile de l'imaginer, car le remplissage des lignes se fait séquentiellement mais si tout se passe dans la mémoire alors là c'est possible.

    Dans ce cas, faut il avoir un "boolean" qui nous dit si toutes les lignes d'une colonne ont la valeur "null" ou pas. Donc, si une seule ligne n'est pas "null" l'affichage se fait.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  4. #4
    Membre expérimenté
    Bonjour

    C'est le rôle de l'application (en delphi, C++, etc) qui gère l'interface et permet d'afficher, ou non, les colonnes.
    La PS ou la requête va afficher les colonnes qui lui sont demandées sans préjugée de leur contenu.

    a+
    olivier
    Merci d'ajouter un sur les tags qui vous ont aidé

  5. #5
    Membre émérite
    Bonjour ... oui c'est une piste mais quand une requête retourne, sous réseau, plusieurs dizaine de milliers d'enregistrements, le réglage au niveau de l'application se sent lourd je présume.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  6. #6
    Membre expérimenté
    1 - Faire une requête qui compte de nombre de valeur pour chaque colonne,
    2 - dans l'appli construire la requête qui n’inclura que les colonnes non vides.

    Mais je ne suis pas sûr que cela soit économe en temps ..
    Merci d'ajouter un sur les tags qui vous ont aidé

  7. #7
    Membre émérite
    Citation Envoyé par dehorter olivier Voir le message
    1 - Faire une requête qui compte de nombre de valeur pour chaque colonne,
    2 - dans l'appli construire la requête qui n’inclura que les colonnes non vides.

    Mais je ne suis pas sûr que cela soit économe en temps ..
    Tant que c'est au niveau du SGBDR je suis d'accord avec vous ... et merci pour l'astuce.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  8. #8
    Rédacteur/Modérateur

    Citation Envoyé par dehorter olivier Voir le message

    Mais je ne suis pas sûr que cela soit économe en temps ..
    cela ne risque pas étant donné qu'il faut rechercher dans la table autant de fois que de colonnes
    Toutefois c'est faisable à l'intérieur d'une procédure grâce a des EXECUTE STATEMENT
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    SET TERM ^ ;
    CREATE PROCEDURE BUILDNONNULLSQL (
        TABLENAME CHAR(31) )
    RETURNS (
        NOTNULLCOLUMNS VARCHAR(2024) )
    AS
    DECLARE VARIABLE F VARCHAR(31);
    DECLARE VARIABLE STMT VARCHAR(256); 
    DECLARE VARIABLE N INTEGER; 
    BEGIN
    NOTNULLCOLUMNS='';
    FOR  select f.rdb$field_name
      from rdb$relation_fields f
      join rdb$relations r on f.rdb$relation_name = r.rdb$relation_name
     and r.rdb$view_blr is null 
     and (r.rdb$system_flag is null or r.rdb$system_flag = 0)
     WHERE f.RDB$RELATION_NAME=:TABLENAME
     order by 1, f.rdb$field_position INTO :F
    DO BEGIN
      STMT='SELECT COUNT(1) FROM '||:TABLENAME||' WHERE '||:F||'IS NOT NULL';
      EXECUTE STATEMENT STMT INTO :N;
      IF (N>0) THEN
       BEGIN
        IF (CHARACTER_LENGTH(TRIM(NOTNULLCOLUMNS))>0) THEN NOTNULLCOLUMNS=TRIM(NOTNULLCOLUMNS)||', ';
        NOTNULLCOLUMNS=NOTNULLCOLUMNS||:F; 
       END
    END     
    NOTNULLCOLUMNS='SELECT '||TRIM(NOTNULLCOLUMNS)||' FROM '||:TABLENAME;
    SUSPEND; 
     
    END^
    SET TERM ; ^


    AMHA l'intérêt est comme les colonnes : NULL
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  9. #9
    Expert éminent sénior
    Citation Envoyé par Just-Soft Voir le message
    Merci pour la réponse mais COALESCE ne me semble pas satisfaire ma demande. Si je ne veux pas avoir une colonne avec des "null" partout c'est que je ne veux pas non plus voir des "/" à la place
    en d'autres termes, je veux cacher les colonnes qui ne rendent aucune information mais je crois que c'est un peu difficile de l'imaginer, car le remplissage des lignes se fait séquentiellement mais si tout se passe dans la mémoire alors là c'est possible.

    Dans ce cas, faut il avoir un "boolean" qui nous dit si toutes les lignes d'une colonne ont la valeur "null" ou pas. Donc, si une seule ligne n'est pas "null" l'affichage se fait.
    Le souci c'est que la ou les colonne(s) nulles peuvent varier en fonction des lignes, du coup les valeurs affichées ne tomberont plus en face des entête de colonne de votre formulaire
    du coup une solution à base de COALESCE me semble la plus raisonable

  10. #10
    Membre émérite
    Citation Envoyé par escartefigue Voir le message
    Le souci c'est que la ou les colonne(s) nulles peuvent varier en fonction des lignes
    C'est ce que je disais ... c'est juste, d'où la difficulté.

    Citation Envoyé par escartefigue Voir le message
    du coup les valeurs affichées ne tomberont plus en face des entête de colonne de votre formulaire
    pour cela je n'ai pas de problème j'ai un affichage dynamique, je l'ai réglé au niveau applicatif.

    Citation Envoyé par escartefigue Voir le message
    du coup une solution à base de COALESCE me semble la plus raisonable
    J'aimerais bien voir la recette par l'exemple.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress