2012-08-10 1 views
2

Quelle est la commande pour trouver le nombre d'entrées/lignes dans une table temporaire? Version 10.2bcommande pour trouver le nombre d'entrées dans une table temporaire

+1

Il n'y en a pas. –

+0

Ok merci. Pourquoi cela mérite-t-il un vote négatif?!?! J'ai regardé partout et je ne pouvais pas en trouver un alors je pensais que je demanderais ici au cas où il me manquait quelque chose. – Bill

+1

@Bill Il n'y a rien de mal à votre question. Les gens sont probablement juste en colère que vous mettez en évidence une déficience majeure dans la structure de données la plus centrale d'OpenEdge. –

Répondre

2
/* create a temp-table so that we can test this technique 
*/ 

define temp-table ttTest 
    field id as int 
. 

create ttTest. 
id = 1. 
create ttTest. 
id = 2. 

/* how many records? 
*/ 

define query q for ttTest cache 0. 
open query q preselect each ttTest. 
display num-results("q"). 
+0

Dommage qu'il n'y ait pas d'attribut 'NUM-RECORDS' pour les objets de table temporaire. Sûrement une table temporaire sait exactement combien de lignes elle contient, et en étant mono-thread, Progress n'a aucun type de complications de concurrence à s'inquiéter. Bizarre qu'ils aient pensé à ajouter un attribut 'HAS-RECORDS' pour vérifier le vide mais pas un avec le nombre réel. –

+2

J'ai eu la même pensée. Je vais essayer de me souvenir de suggérer le temps net que je fournis pour le développement;) –

0

ou vous pouvez utiliser clasic POUR CHAQUE:

DEFINE VARIABLE iCount AS INT NO-UNDO. 

FOR EACH ttTest: 
    iCount = iCount + 1. 
END. 

DISPLAY iCount. 
0

est ici le mien, qui fonctionne pour une température table:

FUNCTION TT_NBREC RETURNS INTEGER (INPUT pr_hd_temptable AS HANDLE) : 

    DEFINE VARIABLE in_nbrec AS INTEGER NO-UNDO INITIAL 0. 
    DEFINE VARIABLE hd_buffer AS HANDLE NO-UNDO. 
    DEFINE VARIABLE hd_query AS HANDLE NO-UNDO. 
    DEFINE VARIABLE ch_query AS CHARACTER NO-UNDO. 
    DEFINE VARIABLE ch_table AS CHARACTER NO-UNDO. 
    DEFINE VARIABLE lg_error AS LOGICAL NO-UNDO. 

    ASSIGN 
     ch_table = pr_hd_temptable:NAME 
     ch_query = "FOR EACH " + ch_table + " NO-LOCK". 
    CREATE BUFFER hd_buffer FOR TABLE ch_table. 
    CREATE QUERY hd_query. 
    hd_query:ADD-BUFFER(hd_buffer). 
    lg_error = hd_query:QUERY-PREPARE(ch_query) NO-ERROR. 
    hd_query:QUERY-OPEN(). 
    hd_query:GET-FIRST(). 
    DO WHILE NOT hd_query:QUERY-OFF-END : 
     ASSIGN in_nbrec = in_nbrec + 1. 
     hd_query:GET-NEXT(). 
    END. 
    hd_query:QUERY-CLOSE(). 
    DELETE OBJECT hd_query. 
    DELETE OBJECT hd_buffer. 
    ASSIGN 
     hd_query = ? 
     hd_buffer = ?. 

    RETURN in_nbrec. 
END FUNCTION. 

Il suffit de passer ce la poignée de votre temp-table et vous obtenez le nombre d'enregistrements. Ca peut certainement être amélioré, mais ça marche assez vite pour moi.

Questions connexes