RPG tipo convertiti compilatore S di tipo P?
-
26-09-2019 - |
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?
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).