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 12: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 11: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 11: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, ...) // (identifiant = val1 OR identifiant = val2 OR ...) // // Exemple : un_autre_champ = une_autre_valeur AND (identifiant = val1 OR identifiant = val2 OR ...) // 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 = "" li_taille_tableau = UpperBound (la_mon_tableau) If (li_taille_tableau > 0) Then // 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 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 11:00:32)
Hors ligne