Progress - Traspasar nombre tabla como parametro

 
Vista:

Traspasar nombre tabla como parametro

Publicado por Marietta (56 intervenciones) el 18/06/2009 02:32:45
Hola,

Tengo un procedimiento, en el cual llamo a otro procedimiento local a este. lo que necesito hacer es:

tengo xcantidad de tablas con distintos nombres pero la misma información y estructura, todas dentro de la misma base de datos.

necesito hacer find first basedatos.xtabla where..... para no tener que estar haciendo xcantidad de veces el mismo codigo.

probe con esto

def var xtabla as char.
xtabla = "mi_tabla1".
run xprocedimiento xtabla

procedure xprocedimiento

/*y aqui es donde no me resulta*/
find first basedatos.xtabla where....

tampoco me resulta find first basedatos.{1} where...
ni find first {1} where...
end procedure.

tengo que definir {1} en algun lado, como donde ?, me falta algo mas....

atenta a sus respuestas . de ante manos muchisimas gracias.

Marietta
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Traspasar nombre tabla como parametro

Publicado por Mario Robles (13 intervenciones) el 26/06/2009 07:06:00
Hola Marietta

Acabo de probar esto y me funciona, aunque es algo de lo que al parecer ya habias hecho.

Programa 1
DEF VAR tabla AS CHAR.
tabla = "area".
RUN C:dataReserchxx.p tabla.

Programa C:dataReserchxx.p
FIND FIRST {1} WHERE id_area > 1.
DISPLAY {1}.

En mi caso, tengo una tabla llamada area.

No tienes que definir {1} en ningún lado.

No se que error te genere, posiblemente sea el path en donde esta tu segundo programa.

Por otro lado, un programa que recibe parámetros de esta maneja requiere que la licencia del cliente pueda compilar.

No te conviene mejor manejar todo en una mísma tabla teniendo un campo mas (que forme parte de la llave única) que te identifique lo que deseas?
De esta manera tus programas quedarían así:

Programa 1
DEF VAR tabla AS CHAR.
RUN C:dataReserchxx.p ('a').

Programa C:dataReserchxx.p
DEFINE INPUT PARAMETER campo_filtro AS CHAR.
FIND FIRST area WHERE campo_nuevo = campo_filtro AND ......
DISPLAY area.

Este codigo ya no requiere que la licencia del cliente pueda compilar.

Espero que te ayude.

Mario Robles
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Traspasar nombre tabla como parametro

Publicado por Rogelio López (9 intervenciones) el 31/03/2011 19:40:18
es mucho mas sencillo si pruebas esto.

METODO 1: realizar una copia de la tabla de manera virtual (yo lo llamo temporal)
def buffer XTABLE for mi_tabla1.

en tu busqueda respecto al buffer
find first XTABLE WHERE (CONSULTA).

METODO 2: generas una tabla virtual (temporal), la cual manipulas a tu antojo)
def work-table XTABLE
field data1 like mi_tabla1.campo1
field data2 like mi_tabla1.campo2
...
field data'n' like mi_tabla.campo'n'.

yo preferiría usar el método 1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Traspasar nombre tabla como parametro

Publicado por Marietta Motto (56 intervenciones) el 26/06/2009 15:17:22
Hola, muchas gracias por tu respuesta, la diferencia con lo que me indicas que te funciona es que yo estoy llamando al procedimiento dentro de mi procedimiento principal. voy a probar sacandolo afuera.

...Y lo mismo me pregunto yo ¿porque no pusieron todo en la misma tabla?... en fin... son tablas antiguas que generaron en su momento otras personas, con tiempo claro se podría traspasar toda la data a un sola tabla... pero de eso no tenemos mucho, hay tanto que hacer y mejorar... :)

gracias por responder, voy a hacer pruebas, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Traspasar nombre tabla como parametro

Publicado por Raziel Salvador (4 intervenciones) el 21/07/2009 23:08:09
Saludos...

Por si aún tienes la duda:

Nose si estes haciendo ese procedimiento para un programa en tu empresa u organizacion o solo como consulta..

pero la forma mas rapida de hacer lo que quieres.. es que dentro de tu programa, generes otro programa y despues ejecutes este mismo...

ejemplo...

=------------------------------------------------------------------------------------------------=
output to C: ablas.p.

define variable tablas
as character
format 'x(60)'.

for each _file where _file-name begins 'xv'
no-lock:
tablas = "for each " + _file-name + " no-lock:" +
" display " + _file-name + ". " +
"end.".
display tablas no-label.
end.

output close.

run c: ablas.p.

=------------------------------------------------------------------------------------------------=

dentro de la base de datos de progress, hay bases de datos ocultas, y una de ellas es "_file" que contiene informacion de las tablas de tu db, como nombre... nombre de la tabla, dump name, etc...

entonces haciendo un for each a esta tabla consigues los nombres de las tablas...

Espero entiendas el "for each" que te envio

Cualquier pregunta o duda, no dudes en hacermela llegar.

Saludos


Raziel Salvador Martínez Salazar
Consultor/Programador
TMBSiS, S.A. de C.V.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar