variable de tri dans Declare cursor

max

09-02-2007 à 13:04:32
Dans le cadre d'un pgm d'affichage, j'essaie de changer le critère de tri au sein d'une clause SQL comme suit :
* selection du critère
C Select
C tri WHENEQ 1
c move 'LTLREF ' crit 7
C eval typtri = 'Sort by Reference Descending '
C tri WHENEQ 2
c move 'DTE_OP ' crit
C eval typtri = 'Sort by Ope. Date Descending '
C tri WHENEQ 3
c move 'DTE_VAL' crit
C eval typtri = 'Sort by Value Date Descending'
C tri WHENEQ 4
C eval typtri = 'Sort by Sys. Date Descending '
c move 'DTE_SYS' crit
C ENDSL
* mon curseur avec mon critère de tri.
C/exec sql
C+ Declare sqlcur01 cursor for
C+ Select Ref , Ext ,
C+ Custodian, Qte, Texe, Dte_OP, dte_val
C+ DTE_SYS, BRUT, Ope, ltcext , ltoprn
C+ FROM brk_mvt order by :crit DESC
C/end-exec
C/exec sql
C+ open sqlcur01
C/end-exec

c dow sqlstt = '00000'
C/exec sql
C+ FETCH sqlcur01 into ......

Si je mets nominativement une des zones de mon fichier comme critère de tri, c'est ok, par contre le passage par une variable ne me donne pas d'erreur mais est completement ignoré. Si je mets toute ma requête dans une variable pour faire un execute immediate, j'ai un problème de compil car mon cursor est inconnu.
Comment faire ?
  • Liens sponsorisés



08-02-2007 à 19:15:50
Max,

Il faut que tu passes d'abord par une instruction PREPARE, donc travailler avec du SQL DYNAMIQUE.

D FullSelectStr s 512a varying

...
SELECT
...
ENDSL

FullSelectStr = 'Select ... order by' + %trim(crit) + ' DESC'

C/exec sql Prepare SelectStm From :FullSelectStr
C/end-exec

C/exec sql Declare sqlcur01 Cursor for SelectStm
C/end-exec

C/exec sql open sqlcur01
C/end-exec
...



Mais, si, comme je le présume, c'est pour présenter des lignes de sous-fichier dans un certain ordre choisi par l'utilisateur, il vaudrait mieux et de loin que tu utilises l'API QSORT plutôt que de trier par SQL, ce genre de chose étant très "preneur de ressource".
Si cela t'intéresse, fais le moi savoir.

--Message édité par philippe le 08-02-07 à 19:16:22--

max

09-02-2007 à 09:06:17
Merci, cela fonctionne parfaitement et encore une fois, tu présume très bien !
Il s'agit d'un programme d'affichage avec sélection du critère de tri par touche F08 tout simplement. La requète ne portant que sur un maximum de 350 records avec une moyenne de 22 records, je ne me suis pas posé trop de questions pour l'optimisation.
Par contre , cela m'intéresse (comme toujours) ...

Et encore merci.
09-02-2007 à 13:04:32
Je publierai bientôt un modèle-exemple d'utilisation de l'API QSORT sur mon site. Quand ce sera fait, je le ferai savoir à tous les membres du forum.
26-07-2012 à 15:45:26
Bonjour, vous avez un site très intéressant et très bon, félicitations font du très bon travail, les salutations d'une page amie et continuez cet excellent site .

Question voyance
  • Liens sponsorisés