Aller à la ligne ! [Résolu]

lap2 36 Messages postés mardi 3 août 2004Date d'inscription 9 novembre 2007 Dernière intervention - 20 janv. 2007 à 12:29 - Dernière réponse : jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention
- 20 janv. 2007 à 14:36
Salut à tous,

J'ai un problème idiot : je dois écrire une ligne de code qui dépasse le nombre de caractères maximum et impossible de la couper en allant à la ligne. J'ai essayé de couper avec & _ mais rien à faire. Que faut-il faire ?

@+

Lap2
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 20 janv. 2007 à 12:37
3
Merci
Pas besoin du "&", un simple _ dans la ligne suffit (à moins qu'il s'agisse d'une chaîne de caractère, là il faut arrêter ta chaîne, puis la concaténer avec la nouvelle ligne.

Mais de toute façon, un code qui dépasse la longueur maxi d'une ligne, c'est qu'il est mal pensé ! Il vaux mieux le découper en une dizaine de lignes plus petites, et surtout, plus lisibles !

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 20 janv. 2007 à 12:43
3
Merci
oui, et bien penser a laisser un espace avant le _

Renfield
Admin CodeS-SourceS- MVP Visual Basic

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Renfield
Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 20 janv. 2007 à 13:10
3
Merci
Moins efficace, oui, mais bon, je pense quand même que c'est négligeable au vu de la perte de lisibilité !

Pour une chaine de caractère déjà, à part les requêtes SQL assez lourdes, j'ai jamais atteint la limite de taille d'une ligne de code !

Par contre, un :
res = a + b + c * (c + b) * (d - a) / (((1 - a) + 3 * 2) * 4) * ((((a + b) * (b - 1) / 2) * 4) + 5) - 2)

(et ceci sur la longueur d'une ligne de code !!!)

C'est quand même moins lisible que :
res = c * (c + b) * (d - a) / (((1 - a) + 3 * 2) * 4)
res = res * ((((a + b) * (b - 1) / 2) * 4) + 5) - 2)
res = res + a + b

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 20 janv. 2007 à 13:55
3
Merci
Il s'agit de la longueur de la fenêtre de saisie de vb.

Pour les requête SQL, perso, je préfère découper ainsi :

"SELECT ..."
"FROM ... INNER JOIN "
" TABLE ... ON ... LEFT JOIN "
" TABLE ... ON ... INNER JOIN "
...
" WHERE ... "
"GROUP BY ..."
"ORDER BY ..."

Ainsi c'est bien plus clair, surtout lorsque les requêtes font dans les 1000-2000 caractères !

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 20 janv. 2007 à 13:57
3
Merci
Au lieu de faire :
Adodc1.recordSource = "SELECT Registre.DateEnl AS [Date d'enlèvement],
Registre.DechID AS [Code déchet], Registre.DesignDech AS [Désignation
déchet], Registre.Tonnage AS [Qté en tonne], Registre.BSDDID AS
[N°bordereau], Registre.TranspNom AS [Transporteur],
Registre.TranspSIREN AS [N°SIREN tr], Registre.TranspVoie AS [Adresse
tr], Registre.TranspVille AS [Ville tr], Registre.TranspCP AS [CP tr],
Registre.DateEntFin AS [Date d'entrée sur site final],
Registre.InstFinaleNom AS [Installation finale],
Registre.InstFinaleSIRET AS [N°SIRET InsFin],Registre.InstFinaleVoie,
Registre.InstFinaleVille, Registre.InstFinalCP, Registre.PrestationID,
Registre.DesignPrest, Registre.TraitID, Registre.DesignTrait,
Registre.InstInterNom, Registre.InstInterSIRET, Registre.InstInterVoie,
Registre.InstInterVille, Registre.InstInterCP, Registre.NegocNom,
Registre.NegocSIRET, Registre.NegocVoie, Registre.NegocVille,
Registre.NegocCP FROM Registre order by DateENl;"

Fait plutôt :
Dim requete as string
requete = "SELECT Registre.DateEnl AS [Date d'enlèvement],
Registre.DechID AS [Code déchet], Registre.DesignDech AS [Désignation
déchet], Registre.Tonnage AS [Qté en tonne], Registre.BSDDID AS
[N°bordereau], Registre.TranspNom AS [Transporteur],
Registre.TranspSIREN AS [N°SIREN tr], Registre.TranspVoie AS [Adresse
tr], Registre.TranspVille AS [Ville tr], Registre.TranspCP AS [CP tr],
Registre.DateEntFin AS [Date d'entrée sur site final],
Registre.InstFinaleNom AS [Installation finale],
Registre.InstFinaleSIRET AS [N°SIRET InsFin],"
requete = requete & "Registre.InstFinaleVoie,
Registre.InstFinaleVille, Registre.InstFinalCP, Registre.PrestationID,
Registre.DesignPrest, Registre.TraitID, Registre.DesignTrait,
Registre.InstInterNom, Registre.InstInterSIRET, Registre.InstInterVoie,
Registre.InstInterVille, Registre.InstInterCP, Registre.NegocNom,
Registre.NegocSIRET, Registre.NegocVoie, Registre.NegocVille,
Registre.NegocCP"
requete = requete & "FROM Registre order by DateENl"

Adodc1.recordSource = requete

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 20 janv. 2007 à 14:01
3
Merci
Note : vu que tu ne fais pas de liaison entre table, tu peux enlever tout les "Registe." dans ta requete, ce qui éclaircit déjà par mal :
requete = "SELECT DateEnl AS [Date d'enlèvement], DechID AS [Code déchet], DesignDech AS [Désignation
déchet], Tonnage AS [Qté en tonne], BSDDID AS
[N°bordereau], TranspNom AS [Transporteur], TranspSIREN AS [N°SIREN tr], TranspVoie AS [Adresse
tr], TranspVille AS [Ville tr], TranspCP AS [CP tr], DateEntFin AS [Date d'entrée sur site final], InstFinaleNom AS [Installation finale], InstFinaleSIRET AS [N°SIRET InsFin],"
requete = requete
& "InstFinaleVoie, InstFinaleVille, InstFinalCP, PrestationID, DesignPrest, TraitID, DesignTrait, InstInterNom, InstInterSIRET, InstInterVoie, InstInterVille, InstInterCP, NegocNom, NegocSIRET, NegocVoie, NegocVille, NegocCP"
requete = requete & "FROM Registre order by DateENl"

En même temps, mettre autant de champs dans une seule table, j'ai peur que ta structure de table soit loin d'être optimisée !!!

Surtout lorsque je vois :
DateEnl AS [Date d'enlèvement] (=> une ligne par date d'enlèvement)
TranspNom AS [Transporteur], TranspSIREN AS [N°SIREN tr], TranspVoie AS [Adresse
tr], TranspVille AS [Ville tr], TranspCP AS [CP tr] (=> le même transporteur répété NbLivraisons fois !!!)

Enfin là c'est à toi de voir, mais ta base de données va vite exploser en complexité de recherche et de stockage ! Tu as intérêt d'indexer un maximum les champs de recherche !!!

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 20 janv. 2007 à 12:33
0
Merci
Salut,

Et le code ? Faut nous le montrer. Sans lui on ne peut pas savoir.






__________
Kenji
Commenter la réponse de Charles Racaud
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 20 janv. 2007 à 12:58
0
Merci
Je rejoins ce qu'en ont dit DARKSIDIOUS et RenField :

S'il s'afit d'une chaîne de caractères :
toto = "aaa"
toto = toto & "bbb"
etc...

sera toujours plus lisible ....

l'utilisation du " _" ne devrait être faite que pour éviter d'avoir des lignes trop longues à l'écran, notamment pour des déclarations ou des appels avec de nombreux paramètres à passer .
Commenter la réponse de jmfmarques
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 20 janv. 2007 à 13:00
0
Merci
Plus lisible, mais moins efficace.....

toto = "aaa" & _
           "bbb"

n'est pas illisible, tout de même .......

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 20 janv. 2007 à 13:15
0
Merci
Bonjour,
Effectivement cela est plus clair et plus compréhensible
A+
Exploreur
Commenter la réponse de cs_Exploreur
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 20 janv. 2007 à 13:16
0
Merci
sur, plus clair et plus facile a debugger ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 20 janv. 2007 à 13:42
0
Merci
Et quelqu'un connait-il justement cette limitation ???

Personellement j'ai déjà eu l'occasion d'écrire des lignes de plus de 450 caractères sans aucun problèmes sous VB6 (dans le cas de requettes SQL ou la lisibilité de la ligne n'était pas importante et ou au contraire le découpage nuisait à la lisibilité du code)

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
lap2 36 Messages postés mardi 3 août 2004Date d'inscription 9 novembre 2007 Dernière intervention - 20 janv. 2007 à 13:50
0
Merci
En fait il s'agit d'une requette SQL qui renseigne un DataGrid. Comme il y a plein de champs et que je veux remplacer les noms de champs par des Alias pour les en-têtes de colonne cela donne une ligne interminable :

Private Sub Command1_Click()
Adodc1.ConnectionString = "provider=" & "microsoft.jet.oledb.4.0;" & "data source=" & App.Path & "\Registre.mdb"


Adodc1.recordSource = "SELECT Registre.DateEnl AS [Date d'enlèvement], Registre.DechID AS [Code déchet], Registre.DesignDech AS [Désignation déchet], Registre.Tonnage AS [Qté en tonne], Registre.BSDDID AS [N°bordereau], Registre.TranspNom AS [Transporteur], Registre.TranspSIREN AS [N°SIREN tr], Registre.TranspVoie AS [Adresse tr], Registre.TranspVille AS [Ville tr], Registre.TranspCP AS [CP tr], Registre.DateEntFin AS [Date d'entrée sur site final], Registre.InstFinaleNom AS [Installation finale], Registre.InstFinaleSIRET AS [N°SIRET InsFin],Registre.InstFinaleVoie, Registre.InstFinaleVille, Registre.InstFinalCP, Registre.PrestationID, Registre.DesignPrest, Registre.TraitID, Registre.DesignTrait, Registre.InstInterNom, Registre.InstInterSIRET, Registre.InstInterVoie, Registre.InstInterVille, Registre.InstInterCP, Registre.NegocNom, Registre.NegocSIRET, Registre.NegocVoie, Registre.NegocVille, Registre.NegocCP FROM Registre order by DateENl;"

Ca bloque partir de là mais il y a encore la suite à caser plus quelques Alias .....


WHERE DateEnl between # " & Format(DTPicker1.Value, "mm/dd/yyyy") & " # and # " & Format(DTPicker2.Value, "mm/dd/yyyy") & " # order by DateEnl;"




Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
DataGrid1.Refresh
End Sub

@+

Lap2
Commenter la réponse de lap2
lap2 36 Messages postés mardi 3 août 2004Date d'inscription 9 novembre 2007 Dernière intervention - 20 janv. 2007 à 13:58
0
Merci
Il s'agit effectivement d'une requette et comme je veux encore ajouter des Alias ...

Private Sub Command1_Click()
Adodc1.ConnectionString = "provider=" & "microsoft.jet.oledb.4.0;" & "data source=" & App.Path & "\Registre.mdb"

Début de la ligne :


Adodc1.recordSource = "SELECT Registre.DateEnl AS [Date d'enlèvement], Registre.DechID AS [Code déchet], Registre.DesignDech AS [Désignation déchet], Registre.Tonnage AS [Qté en tonne], Registre.BSDDID AS [N°bordereau], Registre.TranspNom AS [Transporteur], Registre.TranspSIREN AS [N°SIREN tr], Registre.TranspVoie AS [Adresse tr], Registre.TranspVille AS [Ville tr], Registre.TranspCP AS [CP tr], Registre.DateEntFin AS [Date d'entrée sur site final], Registre.InstFinaleNom AS [Installation finale], Registre.InstFinaleSIRET AS [N°SIRET InsFin],Registre.InstFinaleVoie, Registre.InstFinaleVille, Registre.InstFinalCP, Registre.PrestationID, Registre.DesignPrest, Registre.TraitID, Registre.DesignTrait, Registre.InstInterNom, Registre.InstInterSIRET, Registre.InstInterVoie, Registre.InstInterVille, Registre.InstInterCP, Registre.NegocNom, Registre.NegocSIRET, Registre.NegocVoie, Registre.NegocVille, Registre.NegocCP FROM Registre order by DateENl;"


WHERE DateEnl between # " & Format(DTPicker1.Value, "mm/dd/yyyy") & " # and # " & Format(DTPicker2.Value, "mm/dd/yyyy") & " # order by DateEnl;"




Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
DataGrid1.Refresh
End Sub

@+

Lap2
Commenter la réponse de lap2
lap2 36 Messages postés mardi 3 août 2004Date d'inscription 9 novembre 2007 Dernière intervention - 20 janv. 2007 à 14:04
0
Merci
Merci, à toi Darksidious, je vais tenter le découpage,

Bonne prog à tous,

Lap2
Commenter la réponse de lap2
lap2 36 Messages postés mardi 3 août 2004Date d'inscription 9 novembre 2007 Dernière intervention - 20 janv. 2007 à 14:13
0
Merci
Pour la petite histoire, cette table sert juste à stocker des enregistrements en plein texte. J'en sors un registre ou doivent apparaître tous ces champs... C'est légal.
Il y aura peu de lignes, environ 200 par an pendant cinq an.

Merci encore,

Lap2
Commenter la réponse de lap2
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 20 janv. 2007 à 14:25
0
Merci
Maintenant que vous avez fini votre discussion :

J'ose à peine vous dire que je laisse à l'utlisateur, via une interface "enquête" utilisant les mêmes textboxes que celles qui servent à afficher les résultats et celles qui servent à modifier, ajouter, etc...., le soin de renseigner son enquête comme il l'entend. La SQL se construit seule et, tout le long, l'utilisateur est guidé (notamment s'il commet une erreur d'expression)....
Il a de surcroît la possibilité d'enregistrer une requête afin de s'en servir à nouveau ..., à 2 niveaux : un niveau "perso" et un niveau "validé par le gestionnaire comme étant utile"...avec, alors, un titre explicatif et l'apparition de ce titre dans un "menu" (également à 2 niveaux"...

Le tout fonctionne un peu à la manière d'Informix : un seul écran, des textboxes qui servent à tout, des fonctionnalités diverses (dont l'enquête) ... toujours avec les mêmes textboxes....
Les enquêtes peuvent être complexes et inclure les ET, les OU, les ET globaux et les OU globaux, et être assorties de tris hierarchiques...
Genre d'enquête possible (pas la plus complexe, mais juste pour expliquer) par l'utilisateur, sans changer d'écran :

Toutes les dames âgées de 25 à 36 ans habitant dans la ville A ou la ville B et dont le nom contient "BAL" ainsi que tous les messieurs exerçant la professioàn de coiffeur ou de boulanger et dont le numéro de téléphone se termine par 14258 mais dont le patronyme ne saurait commencer par la lettre C ... etc... etc....

Alors, les problèmes de _ plutôt que de & dans les SQL ne sont plus les miens depuis belle lurette ...

voilà !


 


 
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 20 janv. 2007 à 14:36
0
Merci
Juste pour vous donner une idée :
Voilà le fichier d'aide dont dispose l'utilisateur, à sa demande, en position "Enquête":

Vous avez là l'exemple en français (l'outil est trilingue) :

   ====>>>    LES  CARACTERES  SPECIAUX   suivants sont utilisables dans les critères de recherche :
                 *   remplace toute  chaîne de caractères                         ?  remplace tout caractère(alphabétique ou chiffre) unique
                 #  remplace n'importe quel chiffre unique (de 0 à 9)



                                                     ====>>>    LES  DATES   doivent, dans les requêtes, revêtir la forme jj-mm-aa
Les formes jj mm aa, et jj/mm/aa, satisfaisantes dans la plupart des cas, ne sont pas tolérées dans celui de l'expression   <expr1 expr2> (voir  plus bas).
Il est dans ces condions préférable d'exprimer systématiquement les dates sous la forme jj-mm-aa



                                                                       ====>>>     PLAGES  DE  CARACTERES     entre crochets [ ]  :
                                      une plage est définie par un caractère de début et un caractère de fin, séparés par le signe -.
 Le caractère de début doit être plus petit que le caractère de fin. EXEMPLES : [P-U] signifie tout caractère compris entre P et U   -    [3-9] signifie tout
 caractère compris entre 3 et 9. Il est précisé que les caractères spéciaux *, [, #, ], et ? ne peuvent figurer à l'intérieur d'une plage de caractères
     Outre les plages ainsi définies par 2 caractères séparés par le signe -, on peut définir une liste de caractères entre crochets.
Ainsi   [AzE]    signifie le caractère A ou le caractère z ou le caractère E.
     Si la plage entre crochets est précédée du signe !, cela veut dire qu'elle concerne tout caractère non contenu dans la plage
EXEMPLES :    [!C-E]    signifie tout caractère qui n'est ni C, ni D, ni E   et    [!AzE]    signifie tout caractère qui n'est ni un A, ni un z, ni un E.
  Si un caractère à rechercher est un caractère spécial, il convient de le mettre lui même entre crochets.
(Exemple :   a[*]b      trouvera a*b, alors que   a*c    trouverait tout ce qui commence par a et se termine par c)



 TOUTES  LES  COMBINAISONS  DE  CHAINES,  DE CARACTERES  SPECIAUX  ET  DE  PLAGES  DE CARACTERES  SONT  PERMISES  DANS  LES  ENQUETES



                 ====>>>        +   exprime que le champ en cause DOIT NECESSAIREMENT CONTENIR UNE DONNEE
                 ====>>>        -   exprime que le champ en cause DOIT NECESSAIREMENT ETRE VIDE
Le critère - (champ vide) PEUT ETRE CONJUGUE avec des critères OU (voir plus bas).  Ex : *inconnu*\- recherchera les champs contenant
la chaîne ''inconnu'' ou  qui sont vides



  ====>>>   Les  COMPARATEURS  LOGIQUES   < (plus petit que),              <= (plus petit ou égal à),         > (plus grand que),
                                          >= (plus grand ou égal à)   et   <>(différent de)                  sont également disponibles.
                                                                                       Exemples ci - après:
<= 900  recherche tout ce qui est plus petit ou égal à 900
> A     recherche tout ce qui est plus grand que A (mais pas seulement tout ce qui  commence par une lettre supérieure à  A puisque  Aa, Az sont supérieurs
        à A ). Pour rechercher ce qui commence au moins par la lettre B, il vaut mieux utiliser > Az ou, mieux encore, >= B
<> Dupont  recherche tout ce qui n'est pas Dupont
IMPORTANT : Lorsque ces comparateurs sont utilisés pour un champ, l'enquête sur ce champ doit se limiter à cette comparaison et ne saurait souffrir l'emploi
des caractères spéciaux *, #, [, ? et ], à quelque endroit que ce soit dans l'expression de tels critères.
L 'ordre croissant des caractères est celui de leur valeur décimale. Ainsi, celui des chiffre est 0,1,2,3,4,5,6,7,8,9
et celui des caractères alphabétiques est A,B,C,......Y,Z,a,b,c,.....,y,z,à,...é...



                                                          ====>>>     <Expr1 Expr2>   =   ENTRE  LES  VALEURS  OU  CHAINES   Expr1  et Expr2.
Par Ex :  <DU FAN>  trouvera DUPONT, DURAND  et FAILLE mais ignorera DENIS, ROGER et FARINA (puisque FARINA a une valeur supérieure à FAN)
De même <99 201>  trouvera 101, 183 et 200 mais ignorera 95, 202 et 800
  La condition inverse (QUI N'EST PAS COMPRIS ENTRE Expr1 et Expr2) s'exprime par le signe ! placé devant Expr1.
Par exemple :  <!DOR DUR>   ignorera DORE(PUISQUE DORE est plus grand que DOR) ou DUPIN (puisque DUPIN est plus petit que DUR) mais
trouvera DOME (plus petit que DOR) ou DUVAL  (plus grand que DUR)
 IMPORTANT :    1)  expr1 et Expr2 doivent être séparées par un espace
                2) L'emploi des caractères spéciaux *, # et ? n'est pas alliable à cette expression (jusqu'au prochain ou (/) ou et (&)



                                                     ====>>>      AUCUN  CRITERE    = champ pouvant contenir n'importe quelle chaine ou pouvant être vide
(A noter qu'une enquête déclenchée sans aucun critère pour l'ensemble des champs serait inutile puisqu'elle aboutirait à une sélection déjà disponible
 à l'écran :  tous les enregistrements)



                                                        ====>>>             Critères  ET  et   OU  exprimés pour un champ
   Le crière  ET  s'exprime par le signe  &                                                           Le critère  Ou s'exprime par le signe  /
                                                      Ces signes doivent séparer les expressions d'autres critères
Exemples  :   *ab*/co/ad??    signifie que seront sélectionnés les articles dont ce champ contient la chaîne ab ou n'est composé que de la chaîne co ou est
composé de la chaîne ad suivie de deux seuls caractères .
       <M O>&*S/R*/  = tout ce qui commence par un M, se termine par  un S, et est plus petit que ME ou plus grand que MI.



                                                         ====>>>        LES  EXPRESSIONS  COMPLEXES  (Imbrications de  ET  et de  OU)
     Il vous est possible de générer, sur chaque champ, des enquêtes pouvant être très complexes, par utilisation conjuguée de tous les outils, définis
ci-dessus, à la condition toutefois de bien comprendre la hiérarchie du OU et du ET, du ET OU et du OU ET.
     Cette hiérarchie devra dans la plupart des cas être clarifiée par l'emploi de parenthèses permettant d'exprimer si l'on veut établir des conditions ET
dans une condition OU ou des conditions OU dans une condition ET.
      IL DOIT ETRE CLAIR QUE DE TELLES EXPRESSIONS NECESSITENT UNE IDEE NON MOINS CLAIRE DE CE QUE L'ON VEUT EXPRIMER !
                        LES EXEMPLES CI-DESSOUS SONT PARLANTS :
(<MA MO>&(*E?/*OS))/<RA RO>  = ce qui est compris entre MA et MO et dont l'avant-dernière lettre est E ou les 2 dernières  lettres sont OS, mais aussi
 tout ce qui est compris entre RA et RO
<MA MO>&*E?/(*OS/<RA RO>)    = ce qui est compris entre MA et MO avec E pour avant-dernière lettre, mais aussi  tout ce qui  se termine par OS ainsi que
tout ce qui est compris entre RA et RO
(<!MA MO>&(*E?/*OS))/!RA RO> = ce qui, n'étant pas compris entre MA et MO a pour avant dernière lettre est un E, ou se termine par OS, ainsi que ce qui
est compris entre RA et RO
<MA MO>&(*E?/*OS/<RA RO>)   = ce qui, étant compris entre MA et MO, a pour avant dernière-lettre E, ou se termine par OS ou encore est compris entre RA
et RO (contradictoire puisqu'une chaine ne peut être à la fois comprise entre MA et MO et entre RA et RO !)
Toutes les expressions convenablement imbriquées à l'aide de parenthèses, qui peuvent être multiples, (parenthèses dans des
parenthèses) sont permises.



                                                                              ====>>>             LES  ''OU''  GLOBAUX
Dans certains cas de figure, les requêtes peuvent nécessiter des ''OU'' autres que ceux exprimés dans un champ. Imaginez par exemple que vous vouliez
rechercher les médecins d'un quartier ou les chirurgiens d'un autre quartier ! Cette possibilité vous est offerte : lorsque vous exécuter une sélection, une
boite de dialogue vous permet de choisir de compléter par une sélection différente répondant au principe : sélection1 OU sélection2 OU ........ OU sélection n



                                                                              ====>>>           COMMENT  EXPRIMER  LES  TRIS ? :
Lorsque vous demandez l'exécution de votre sélection, une boite de dialogue vous offre la possibilité de procéder à un tri des résultats. Si vous choisissez
cette fonction, vous devrez définir la hiérarchie de votre tri en plaçant, dans les champs concernés, un chiffre représentant cette hiérarchie (1 pour le
1er tri, 2 pour le tri secondaire dans le 1er tri, etc...)
Un chiffre non suivi d'un signe provoquera un tri ascendant sur ce champ
Un chiffre suivi du signe - provoquera un tri descendant
     VOUS NE POUVEZ BIEN SUR PAS DONNER LE MEME RANG DE TRI  A PLUSIEURS  CHAMPS. Si toutefois vous donnez le rang 1 à un champ et le
rang 3 à un autre champ sans avoir attribué un rang 2, l'outil comprendra que le 1er tri est à faire sur le champ de rang 1 et le 2ème
sur le champ de rang 3  (Il traitera les rangs dans leur ordre croissant sans se préoccuper des solutions de continuité pouvant résulter d'une étourderie éventuelle)
Commenter la réponse de jmfmarques

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.