2017-08-23 3 views
1

Bonne journée:requête dynamique pour openge

question rapide, puis-je effectuer une requête dynamique en openge?

exemple:

def temp-table tt-num1 
field f1 as int 
field f2 as int. 

def temp-table tt-num2 
field f1 as int 
field f2 as int. 

def temp-table tt-num3 
field f1 as int 
field f2 as int. 

ce que je dois serait de regarder quelque chose comme ceci:

procedure repeat-query: 
for each 'variable that contains table-name' no-lock. 

disp f1 f2. 

end. 
end procedure. 

ou d'autres moyens qui peuvent résoudre mon problème

comment dois-je procéder pour cela? J'ai essayé de vérifier la requête dynamique trouvée sur internet mais pas de chance. Merci d'avance.

Répondre

4

Si vous allez directement à https://documentation.progress.com/#page/progdocindex%2Fopenedge.html vous pouvez trouver de la documentation autour de tout OpenEdge. Par exemple des requêtes dynamiques.

Je ne comprends pas exactement ce que vous essayez de faire mais voici un exemple de requête dynamique.

DEFINE TEMP-TABLE tt-num1 NO-UNDO 
    FIELD f1 AS INTEGER 
    FIELD f2 AS INTEGER. 

DEFINE TEMP-TABLE tt-num2 NO-UNDO 
    FIELD f1 AS INTEGER 
    FIELD f2 AS INTEGER. 

DEFINE TEMP-TABLE tt-num3 NO-UNDO 
    FIELD f1 AS INTEGER 
    FIELD f2 AS INTEGER. 


CREATE tt-num1. 
ASSIGN 
    tt-num1.f1 = 1 
    tt-num1.f2 = 1. 

CREATE tt-num1. 
ASSIGN 
    tt-num1.f1 = 1 
    tt-num1.f2 = 2. 

CREATE tt-num1. 
ASSIGN 
    tt-num1.f1 = 2 
    tt-num1.f2 = 1. 

CREATE tt-num1. 
ASSIGN 
    tt-num1.f1 = 2 
    tt-num1.f2 = 2. 

DEFINE VARIABLE hQuery AS HANDLE  NO-UNDO. 
DEFINE VARIABLE cBuffer AS CHARACTER NO-UNDO. 
DEFINE VARIABLE cField AS CHARACTER NO-UNDO. 
DEFINE VARIABLE iValue AS INTEGER  NO-UNDO. 

ASSIGN 
    cBuffer = "tt-num1" 
    cField = "f1" 
    iValue = 1. 

CREATE QUERY hQuery. 

hQuery:ADD-BUFFER(cBuffer). 
hQuery:QUERY-PREPARE("for each " + cBuffer + " where " + cBuffer + "." + cField + " = " + STRING(iValue)). 
hQuery:QUERY-OPEN(). 

queryLoop: 
REPEAT: 
    hQuery:GET-NEXT(). 

    IF hQuery:QUERY-OFF-END THEN LEAVE queryLoop. 

    DISPLAY hQuery:GET-BUFFER-HANDLE(1):BUFFER-FIELD(cField):BUFFER-VALUE. 
END. 
hQuery:QUERY-CLOSE(). 

DELETE OBJECT hQuery. 

Comme Stefan Drissen mentionne dans un commentaire très valide: la boucle peut être plus compact:

DO WHILE hQuery:GET-NEXT(): 
    /* Code goes here */ 
END. 
+0

merci pour la réponse. facile à comprendre. – noob

+2

Je préfère faire la prochaine partie du temps - garde les choses belles et propres, pas besoin de requête hors-fin. répéter tout en hQuery: get-next(): afficher ... fin. –

+0

@StefanDrissen puis-je utiliser une requête dynamique pour créer un enregistrement? comme CREATE tt-num1, puis-je faire cela avec un tampon? – noob