Bonjour,
Je ne vois pas bien la différence entre un "TBSCAN tab ARGLIST(val1)"
et un "TBSARG tab ARGLIST(val1)" puis un "TBSCAN tab"
Ne pourrait-on pas utiliser toujours le "TBSCAN tab ARGLIST(val1)" ??
merci pour vos retours
Bonjour,
Je ne vois pas bien la différence entre un "TBSCAN tab ARGLIST(val1)"
et un "TBSARG tab ARGLIST(val1)" puis un "TBSCAN tab"
Ne pourrait-on pas utiliser toujours le "TBSCAN tab ARGLIST(val1)" ??
merci pour vos retours
La différence se situe plutôt dans une gestion de type curseur.
Pour une recherche simple, le TBSCAN suffit. On va plutôt utiliser un TBSARG (pour 'poser' la recherche), + une boucle TBSCAN dans un cas dans le genre :
Attention, Les arguments dans un TBSCAN se donnent différemment. Par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 "ISPEXEC TBVCLEAR MYTABLE" DATA1 = ????’ DATA2= ‘????’ "ISPEXEC TBSARG MYTABLE NAMECOND(DATA1, EQ, DATA2, EQ)" DO WHILE RC=0 "ISPEXEC TBSCAN MYTABLE" SAY ........ éléments de la table END
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 "ISPEXEC TBSCAN MYTABLE ARGLIST(DATA1,DATA2) CONDLIST(EQ,EQ)" , "ROWID(MYROW)" "ISPEXEC TBTOP MYTABLE" "ISPEXEC TBSKIP MYTABLE ROW("MYROW")"
ok, si j'ai bien compris :
- le TBSARG + TBSCAN pour une recherche de plusieurs occurences
- le TBSCAN seul pour rechercher 1 occurrence
Faut-il systématiquement se repositionner avec un TBTOP avant de faire un TBSCAN pour trouver l'élément recherché dans la table ?
Oui par principe. D'ailleurs TBSARG et TBSCAN disposent tous deux des paramètres NEXT et PREVIOUS, NEXT étant le défaut.
Par principe, parce ça peut éventuellement dépendre de la logique de traitement.
Pour comprendre la logique de gestion, il faut s'intéresser au CRP (Current Row Pointer). La plupart des ordres TB tiennent compte de la valeur du CRP et le modifient ou non. En clair, pour chaque ordre il faudra vérifier, éventuellement avec l'aide de la doc, si le CRP est positionné puis modifié. Quand c'est le cas, les variables de la lignes correspondantes sont valorisées.
Les règles générales : Le CRP est remis à zéro en particulier après un TBTOP, TBOPEN/TBCREATE ou un TBSORT, mais aussi par suite d'un ordre TB avec code retour en erreur.
Au contraire du TBTOP, après un TBBOTTOM, le CRP pointe sur la dernière lignes et les variables sont donc valorisées.
Le TBSARG part du CRP en cours, le TBSCAN du dernier service TBSARG éventuel. Le TBVCLEAR réinitialise les variables mais ne modifie pas le CRP.
Enfin, contrairement au TBSARG le TBSCAN modifie le CRP.
merci Homer pour ces indications précises et à bientôt certainement !!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager