Domanda

Questa è la mia situazione: Ho Un programma che si presenta in questo modo:

Fmfile     IF   E           K DISK    USROPN
d grue            s                   like(dhseqn)
d
C     *ENTRY        PLIST
C                   PARM                    grue
c                   open      mfile
c*** do something with grue
c                   close     mfile
c                   eval      *inlr = *on

dhseqn è un campo di 2,0 s.

La compilazione messa in vendita di spettacoli me questo:

 *RNF7031 DHSEQN            P(2,0)                 000200     1000002D
          GRUE              P(2,0)                 000200D     000500M     000700      000800M
                            BASED(_QRNL_PRM+)

E quando io chiamo il programma A con un parametro che è stato dichiarato di 2,0 S, ottengo un errore dati decimali.

E 'questo previsto, o si tratta di un bug del compilatore?

È stato utile?

Soluzione

Il compilatore RPG (anche prima ILE) converte i campi del database al sacco. A volte lo troverete non, ad esempio, un campo di file a zone rimarrà suddivisa in zone se lo si utilizza in una struttura dati, ma ogni campo a zone dello stesso file non si sarà diventato ricco.

Se avete veramente bisogno di come da un campo di file, definire una struttura di dati fittizia di tenerlo suddivisa in zone.

Ancora meglio, se il parametro di ingresso non viene modificato, definirlo nel prototipo del programma con la parola chiave Const e il tipo verrà convertito automagically, anche accettando le espressioni e le costanti!

Ecco davvero un buon articolo sull'utilizzo Const su prototipi di procedura e la conversione automatica.

Altri suggerimenti

La 's' nella definizione di grue non si riferisce al tipo di dati, bensì definisce come un campo 'standalone'. Il tipo di dati per Grue è specificato come LIKE (dhseqn), che la tua compilazione messa in vendita di spettacoli come P (2,0).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top