Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Je recherche l'équivalent de la fonction IN en SQL pour l'appliquer dans un de mes filtres.
Connaissez vous si elle existe? (j'ai recherché dans la lsite des fonctions proposées dans le painter de filtre mais je ne l'ai pas trouvé)
Merci de vos réponses
Dernière modification par Nephtis (06-09-2007 10:32:00)
Hors ligne
Bonjour, colonne IN (valeur1, valeur2) fonctionne.
Hors ligne
Salut!
Tu ne trouveras pas l'équivalent du IN.
Par contre je te conseille de regarder le CASE...WHEN. Cela doit répondre à ton besoin (tu peux mettre plusieurs valeurs dans un when)
Hors ligne
oups! savais pas
Hors ligne
Je viens de tester dans le painter de filtre et l'expression est incorrecte.
mon expression : id_titre IN (2185)
NB : Pour l'exemple je n'ai qu'une seule valeur dans la liste de valeurs possibles mais dans l'absolu il y en aura plusieurs (de toutes façon même en mettant deux valeurs ça plante à la verification)
Dernière modification par Nephtis (06-09-2007 09:25:50)
Hors ligne
ce que je fais :
if lds_reservation.rowcount() > 0 then ls_filtre = "code_position <> '"+lds_reservation.getitemstring(1,"code_position") +"'" if lds_reservation.rowcount() > 1 then for i = 2 to lds_reservation.rowcount() ls_filtre = ls_filtre + " and code_position <> '"+lds_reservation.getitemstring(i,"code_position")+"'" next end if end if
Et c'est l'equivalent d'un
Where code_position NOT IN (01,02,03 etc.....
Donc pour faire un IN, tu remplaces "<>" par "="
Dernière modification par hellkinder (06-09-2007 09:40:15)
Hors ligne
le in fonctionne tres bien sur le filter de la datawindow
Hors ligne
hellkinder a écrit:
ce que je fais :
Code: pb
if lds_reservation.rowcount() > 0 then ls_filtre = "code_position <> '"+lds_reservation.getitemstring(1,"code_position") +"'" if lds_reservation.rowcount() > 1 then for i = 2 to lds_reservation.rowcount() ls_filtre = ls_filtre + " and code_position <> '"+lds_reservation.getitemstring(i,"code_position")+"'" next end if end if
Et c'est l'equivalent d'un
Where code_position NOT IN (01,02,03 etc.....
Donc pour faire un IN, tu remplaces "<>" par "="
tu remplaces "<>" par "=" et "and" par "or"
mais en principe le IN fonctionne...
Hors ligne
eRaSorZ a écrit:
et "and" par "or"
Exact ! Heureusement que y'en a qui suivent!
Hors ligne
Nephtis a écrit:
Je viens de tester dans le painter de filtre et l'expression est incorrecte.
mon expression : id_titre IN (2185)
NB : Pour l'exemple je n'ai qu'une seule valeur dans la liste de valeurs possibles mais dans l'absolu il y en aura plusieurs (de toutes façon même en mettant deux valeurs ça plante à la verification)
id_titre est du type char ? des fois ?
Hors ligne
Nephtis a écrit:
Je viens de tester dans le painter de filtre et l'expression est incorrecte.
mon expression : id_titre IN (2185)
et id_titre IN ('2185') ?
Hors ligne
J'avais bien cette solution mais je sais pas pourquoi je préférais m'enteter à faire marcher le IN (il est présent dans l'aide de powerbuilder)
Mais bon faut quand même avancer dans le travail
Voilà le script pour simuler un IN:
// identifiant IN (val1, val2, ...) // est équivalent à // (identifiant = val1 OR identifiant = val2 OR ...) // // Les parenthèses sont obligatoires si vous voulez combiner plusieurs expressions // Exemple : un_autre_champ = une_autre_valeur AND (identifiant = val1 OR identifiant = val2 OR ...) // Sans les parenthèses cela reviendrait à ecrire : // un_autre_champ = une_autre_valeur AND identifiant = val1 OR (identifiant = val2 OR ...) // L'expression que l'on souhaite appliquer comme filtre ls_mon_filtre = "" // La taille du tableau qui contient les différentes valeurs que l'on veut tester li_taille_tableau = UpperBound (la_mon_tableau) // Si la taille de mon tableau est nulle alors on laisse l'expression à vide If (li_taille_tableau > 0) Then // Mon tableau contient au moins un élément donc on peut commencer à alimenter l'expression // Il faut englober son expression avec des parenthèses pour ne pas avoir de conflit avec les mots // clefs " OR " qui constituent un IN ls_mon_filtre = ls_mon_filtre + " (identifiant = " + String(la_mon_tableau[1]) // Ensuite il va falloir regarder si il y a plus d'une valeur dans le tableau // Si il n'y en avait qu'une alors on ne rentre pas dans la boucle for et donc on a fini // Si il en avait au moins deux alors il faut rajouter les autres tests en les separant par le mot clef // " OR " For li_curseur = 2 To li_taille_tableau ls_mon_filtre = ls_mon_filtre + " OR identifiant = " + String(la_mon_tableau[li_curseur]) Next // Il ne faut pas oublier de femer la parenthèse ls_mon_filtre = ls_mon_filtre + ") " End If
Hors ligne
pick ouic a écrit:
Nephtis a écrit:
Je viens de tester dans le painter de filtre et l'expression est incorrecte.
mon expression : id_titre IN (2185)
NB : Pour l'exemple je n'ai qu'une seule valeur dans la liste de valeurs possibles mais dans l'absolu il y en aura plusieurs (de toutes façon même en mettant deux valeurs ça plante à la verification)id_titre est du type char ? des fois ?
Non non id_titre n'est pas de type char
Que je soit pendu haut et court le champ est bien de type char
Bon je remet mon bonet d'âne
Dernière modification par Nephtis (10-09-2007 09:00:32)
Hors ligne