2016-12-27 2 views
0

J'essaie d'écraser le gestionnaire de paramètres, de sorte qu'il pointe vers une autre table temporaire avec un schéma différent.Modifier `TABLE-HANDLER` pour pointer vers une autre table temporaire

myProcedure.p

DEFINE TEMP-TABLE TT_RealTable NO-UNDO 
    BEFORE-TABLE TT_RealTableBefore 
    FIELD name AS CHAR 
. 

DEF INPUT-OUTPUT PARAM TABLE-HANDLE TH_NewTable. 

CREATE TT_RealTable. 
ASSIGN TT_RealTable.name = "Ben". 

CREATE TT_RealTable. 
ASSIGN TT_RealTable.name = "Harry". 

Les TH_NewTable pointe vers un paramètre aléatoire TEMP-TABLE avec différents schémas et contenu. Je veux remplacer ce paramètre TABLE-HANDLER par le TT_RealTable. Si je tente de définir:

TH_NewTable = TEMP-TABLE TT_RealTable:HANDLE. 

Le programme se bloque lors de l'exécution dire que le schéma/méta-données de TT_RealTable ne correspond pas à celui de gestionnaire. Comment puis-je écraser le gestionnaire pour qu'il pointe vers mon TT_RealTable:HANDLE et le renvoyer en sortie?

Répondre

1

Si le schéma est différent comme le prétend l'erreur, et vous avez dit au début de votre message, ce que vous voulez faire ne peut pas être fait. Vous ne pouvez pas passer un handle de tampon de table temporaire qui a une certaine définition et renvoyer autre chose à la fin de la procédure, en supposant que le handle de table de paramètres provient d'une table temporaire statique. Même si ce n'est pas le cas, vous devrez créer la table temporaire à l'aide de la poignée de mémoire tampon APRES l'appel de la procédure, ce que je pense n'est pas ce que vous voulez, puisque votre paramètre est entrée-sortie.

Si vous voulez vraiment travailler avec une table qui est fluide en ce qui concerne le schéma, vous devriez lire dans des tables temporaires dynamiques. Cherchez l'instruction CREATE TABLE TEMP dans l'aide et de lire à travers les exemples pour comprendre comment vous pouvez obtenir une poignée, puis (et alors seulement) construire une table temporaire en utilisant la poignée de retour, de sorte que vous pouvez utiliser. Cependant, vous perdez la possibilité d'utiliser des instructions régulières, telles que créer et affecter. Vous devrez référencer BUFFER-FIELD et BUFFER-VALUE et utiliser la méthode CREATE à la place, en utilisant le handle de tampon. Ça pourrait prendre du temps pour s'y habituer, mais ce n'est pas sorcier.

J'espère que ça aide!

+0

J'ai aussi essayé 'TH_NewTable: MANCHE: CREATE TYPE (TEMP-TABLE TT_RealTable: CREATE) .' si elle est comme le CREATE TEMP-table'. Sans succès. – W0lfw00ds

+1

Je donnai à l'aide entrées-sorties et simplement séparés à 'TABLE D'ENTRÉE-SORTIE' et en anse table'. La sortie est toujours connue, mais l'entrée peut être une "table vide" qui ne contient aucune donnée ou ligne. J'ai essayé d'écraser cette table vide passée en tant que gestionnaire et renvoyer la table remplie en tant que 'OUTPUT'. – W0lfw00ds