Title: Mensaje
Gracias por responder, Gerardo. Creo que no he expresado adecuadamente mis intenciones. Mi idea es tener un m�dulo que atienda todas las peticiones de entrada/Salida a un fichero. De esta manera, los programas acceder�n a los registros del fichero v�a llamadas a funciones del m�dulo (que estar� dentro de un programa de servicio). Para que los datos del fichero sean visibles por los programas, puedo crear en el m�dulo una DS con el formato del registro y exportarla, para despu�s importarla en los programas. El problema de este m�todo es que se ha de conocer el comportamiento de los procedimientos y funciones a los que se est� llamando (que no sean los que dan acceso al fichero), ya que cualquiera de ellos podr�a hacer un acceso al fichero y cambiar el registro actual. Si en lugar de compartir la DS se recibe por par�metro una ds con los datos del registro, ya no importa que al llamar a otra func��n �sta pueda acceder al fichero, ya que no modificar� los datos recibidos en la DS.
 
La versi�n que me funciona, pero que no me gusta, es esta:
 
Forl00100  UF A E           K DISK    usropn rename(rorf001: rorl00100)
...
 
D or001         E DS                  extname(orf001)  qualified export inz
...
 
 **************************************************************************    
 *                                                                             
 * ordp_C: Chain                                
 *                                                                             
 **************************************************************************    
 *                                                                             
P ordp_C          B                   export                                   
D                 PI             1N                                            
D P                                   likeds(or001)                            
D  ordp                               like(opordp) const                       
 *                                                                             
D ds@             S               *                                            
D ds              DS                  likerec(rorl00100) based(ds@)            
 /free                                                                         
                                                                               
  if not %open(orl00100);                                                      
     open orl00100;                                                            
  endif;  
  [EMAIL PROTECTED](p);                                                                
  chain (ordp) rorl00100 ds;                                                   
  return (%found); 
 
 /end-free         
 *                 
 *                 
P ordp_C          E 
 
Al no poder hacer el chain a una ds definida con EXTNAME tengo que hacer el 'malabarismo' con el puntero, y aunque funciona no me gusta.
 
                                                                               
 
 
 

Saludos.

Fernando P�rez.

Cer�mica Saloni. Dpto. Sistemas

<mailto:[EMAIL PROTECTED]>

-----Mensaje original-----
De: gerardo.santillana [mailto:[EMAIL PROTECTED]
Enviado el: martes, 12 de agosto de 2003 17:58
Para: [EMAIL PROTECTED]
Asunto: RE: Chain a DS (2� parte)

Hola Fernando
 
 Lo que puedes hacer es  en tu programa cambia el nombre de tu archivo OR100100 ponle OR100100X u otro nombre que tu quieras y antes de compilar haz un OVRDBF FILE(OR100100X) TOFILE(BIBLIOTECA/OR100100) y tu programa quedaria asi
 
hdftactgrp(*no)                                                
hactgrp(*caller)                                               

 *                                                             
Forl00100x if   e           K disk                             
 *                                                             
 *                                                             
Dreg            E DS                  extname(orl00100)        
 *                                                             
 /free                                                         
      chain (5) Rorf001;       <----- NO NECESITAS PONERLE EL NOMBRE DE LA ESTRUCTURA                                   
 /end-free             
c     reg           dsply                                        
c                   eval      *inlr=*on   
 
 
Espero esto te sirva, yo ya lo probe y si funciono
 
Saludos   

Gerardo Santillana
IT Department
Delphi Mechatronic Systems
US Ph: (956) 554.5832
MX Ph: (88) 12.81.63/64/65 Ext. 5832
e-mail [EMAIL PROTECTED] 

-----Original Message-----
From: Fernando P�rez [mailto:[EMAIL PROTECTED]
Sent: Tuesday, August 12, 2003 9:36 AM
To: Foro 400 ([EMAIL PROTECTED])
Subject: Chain a DS (2� parte)

Hola de nuevo.

Aqu� estoy otra vez con una variante nueva del chain a DS. Esta vez lo he intentado hacer definiendo la DS con EXPTNAME en lugar de con LIKEREG. Pero aqu� s� que no consigo de ninguna manera que me funcione. Este es el c�digo:

hdftactgrp(*no)                                                
hactgrp(*caller)                                               
 *                                                             
Forl00100  if   e           K disk                             
 *                                                             
 *                                                             
Dreg            E DS                  extname(orl00100)        
 *                                                             
 /free                                                         
      chain (5) Rorf001  reg;                                  
 /end-free                                                     
c                   eval      *inlr=*on                        

El error en compilaci�n es: *RNF7701 30    175 000114  La estructura de datos REG no se permite para la operaci�n

He probado a incluir el formato de registro en EXTNAME, y pasa exactamente lo mismo. Por cierto, como curiosidad, si bien en el texto de arriba dice que el mensaje es de gravedad 30, en el resumen de errores dice que es de gravedad 20 (no se ponen de acuerdo).

La raz�n por la que no quiero usar likereg es porque el uso que quiero dar a esto es en un m�dulo cuyas funciones gestionen los accesos al fichero. Los programas que usen las funciones del m�dulo no van a tener definido el fichero, y por tanto no puedo definir la ds en la que devolver los datos con LIKEREG.

La �nica soluci�n 'chapucera' que he encontrado hasta ahora es definir en el m�dulo una DS con EXTNAME y otra con LIKEREG, haciendo que la �ltima tenga la misma ubicaci�n en memoria que la primera, pero es una soluci�n que no me gusta nada.

Cualquier ayuda de quien me pueda leer (�alguien no est� de vacaciones?) ser� eternamente agradecida ;)

Saludos.

Fernando P�rez.

Cer�mica Saloni. Dpto. Sistemas

<mailto:[EMAIL PROTECTED]>

<<Fernando P�rez.vcf>>

Attachment: Fernando P�rez.vcf
Description: Binary data

Responder a