In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Como saber el nombre de un Objeto

Foro de Xailer profesional en español
Responder
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como saber el nombre de un Objeto

Mensaje por Bingen Ugaldebere »

Parece obvio, el que le he dado no?
Pero si quiero recorrer los aComponent de un Form y tomar los nombres de
los que sean de un tipo
FOR nDB := 1 TO Len( oForm:aComponents )
IF oForm:aComponents[nDB]:IsKindOf( "TDBFDataSet" )
AADD(aDataBases,oForm:aComponents[nDB]:cName)
ENDIF
NEXT
cName me devuelve el nombre del DBF abierto
ClassName me devuelve TDBFDataSet
Pero quiero saber el nombre del componente que yo le he dado al objeto
TDBFDataSet ¿ se puede ?
Salu2.
notengo
Mensajes: 417
Registrado: Vie Oct 12, 2007 1:29 pm

Como saber el nombre de un Objeto

Mensaje por notengo »

Bingen,
> Pero quiero saber el nombre del componente que yo le he dado al objeto
> TDBFDataSet ¿ se puede ?
Nope. Si te refieres al contenido de cVarName, sólo existe en tiempo de
diseño en el IDE.
Saludos,
José Lalí­n
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como saber el nombre de un Objeto

Mensaje por Bingen Ugaldebere »

Lo siento cVarName no es accesible voy a ver si me explico mejor para
que puedas ayudarme.
En un Form en el que tengo mas de 20 tDBFDataset quiero recoger todos
estos para hacer un proceso común a todos ellos y necesito saber el
nombre de los componentes no el de los archivos DBF.
Para ello hago
FOR nDB := 1 TO Len( oForm:aComponents )
IF oForm:aComponents[nDB]:IsKindOf( "TDBFDataSet" )
AADD(aDataBases,oForm:aComponents[nDB]:cName)
ENDIF
NEXT
Pero cName me devuelve el nombre de los archivos DBF y cVarName nada de
nada, simplemente peta como error y necesito saber el nombre de los
componentes no se si esto será posible pero...
Salu2 y gracias.
José Lalí­n escribió:
>
> Bingen,
>
>> Pero quiero saber el nombre del componente que yo le he dado al objeto
>> TDBFDataSet ¿ se puede ?
>
> Nope. Si te refieres al contenido de cVarName, sólo existe en tiempo de
> diseño en el IDE.
>
> Saludos,
> José Lalí­n
Pedro Amaro
Mensajes: 157
Registrado: Jue May 18, 2006 5:10 pm

Como saber el nombre de un Objeto

Mensaje por Pedro Amaro »

Igual me meto en donde no me llaman, pero no me puedo resistir.
> Lo siento cVarName no es accesible voy a ver si me explico mejor para que
> puedas ayudarme.
Se me ocurren dos soluciones, la primera y mas chorra es usar la propiedad
Cargo y poner en ella el combre del componentes.
La otra posibilidad que se me ocurre depende de si he entendido bien para lo
que lo necesitas.
> En un Form en el que tengo mas de 20 tDBFDataset quiero recoger todos
> estos para hacer un proceso común a todos ellos y necesito saber el nombre
> de los componentes no el de los archivos DBF.
Si creamos un array con referencias a los componentes podemos luego acceder
a ellos sin tener que saber el nombre de cada uno.
Local oCompo, aMatriz[30], nI
nI := 0
FOR EACH oCompo IN ::aComponents
if oCompo:isKindOf("TDBFDataSet")
nI += 1
aMatriz[nI] := oCompo
endif
NEXT
Supongo que se puede mejorar, ya que no he conseguido hacer el array
dinamico como lo tenias tu con AADD.
Luego puedes acceder directamente a las propiedades de cada Componente
For nI := 1 to len(aMatriz)
if aMatriz[nI] != Nil
msginfo( aMatriz[nI]:Cargo )
end if
next
Un saludo
Pedro Amaro
pablogarciau
Mensajes: 133
Registrado: Lun May 22, 2006 10:26 am

Como saber el nombre de un Objeto

Mensaje por pablogarciau »

> FOR nDB := 1 TO Len( oForm:aComponents )
> IF oForm:aComponents[nDB]:IsKindOf( "TDBFDataSet" )
> AADD(aDataBases,oForm:aComponents[nDB]:cName)
> ENDIF
> NEXT
En todo caso segun tu explicacion, no necesitarias el nombre del
componente, simplemente corre tu proceso sobre aDataBases[x], el cual en
tu ciclo ya fue cargado con el objeto del que ya tuviste certeza que
fuera un TDBFDataSet, esto partiendo de que el contenido de aComponents
de un TForm esta lleno de OBJETOS no visuales.
Ahora bien si el proceso que deseas correr es selectivo, es decir solo
aplica para "ciertos" DataSets, entonces crea una clase TMyDBFDataSet
que herede de TDBFDataSet y cambia tu verificacion a
IsKindOf("TMyDBFDataSet")
Saludos
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como saber el nombre de un Objeto

Mensaje por Bingen Ugaldebere »

Gracias amigos soluciones como esas ya me las habí­a planteado pero no
querí­a tomar ese camino y me explico.
He hecho una clase tWord para hacer casi cualquier cosa con documentos
Word desde Xailer y estaba ultimándola con un método que llamando a una
plantilla o documento de Word (previamente hecho) desde un Form con
datos (de un cliente por ejemplo) automáticamente busque los campos
insertos en el DOC y los sustituya por los del registro/s del DBF/DBFs
en ámbito en el formulario para no tener que ir sustituyéndolos uno a
uno como tengo ahora.
Si opto por alguna de estas soluciones la clase no servirí­a para
cualquiera que quisiera usarla sin tener que explicarle lo que tendrí­a
que hacer.
Muchas gracias de todas maneras.
pablogarciau
Mensajes: 133
Registrado: Lun May 22, 2006 10:26 am

Como saber el nombre de un Objeto

Mensaje por pablogarciau »

> FOR nDB := 1 TO Len( oForm:aComponents )
> IF oForm:aComponents[nDB]:IsKindOf( "TDBFDataSet" )
> AADD(aDataBases,oForm:aComponents[nDB]:cName)
> ENDIF
> NEXT
Prueba con AADD(aDataBases,oForm:aComponents[nDB]:ClassName())
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Como saber el nombre de un Objeto

Mensaje por zeasoftware »

Despues de leer dos veces me intereso tu tema, pero, para que requieres en
si el nombre del componente que le ponemos en tiempo de diseño¿
Si lo que nececitas es referenciar el nombre del componente y sustituirlo en
tu hoja de Word, por que no hacer una tabla de {"Nombre Componente", "DBF" }
Si explicaras un poco mas creo poder aportarte algunas ideas.
Saludos.
--
Ramón Zea
01.993.194.14.27
http://www.paginasprodigy.com/zeasoftware/
zeasoftware@prodigy.net.mx
zeasoftware@hotmail.com
ramonzea@yahoo.com
zeasoft.movil@hotmail.com
"Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
news:[email=46d3e24a@ozsrv2.ozlan.local...]46d3e24a@ozsrv2.ozlan.local...[/email]
> Gracias amigos soluciones como esas ya me las había planteado pero no
> quería tomar ese camino y me explico.
>
> He hecho una clase tWord para hacer casi cualquier cosa con documentos
> Word desde Xailer y estaba ultimándola con un método que llamando a una
> plantilla o documento de Word (previamente hecho) desde un Form con datos
> (de un cliente por ejemplo) automáticamente busque los campos insertos en
> el DOC y los sustituya por los del registro/s del DBF/DBFs en ámbito en el
> formulario para no tener que ir sustituyéndolos uno a uno como tengo
> ahora.
>
> Si opto por alguna de estas soluciones la clase no serviría para
> cualquiera que quisiera usarla sin tener que explicarle lo que tendría que
> hacer.
>
> Muchas gracias de todas maneras.
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como saber el nombre de un Objeto

Mensaje por Bingen Ugaldebere »

> Prueba con AADD(aDataBases,oForm:aComponents[nDB]:ClassName())
ClassName() devuelve el tipo de clase a la que pertenece el objeto
tDbfDataSet no el nombre del objeto.
Gracias de todos modos.
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como saber el nombre de un Objeto

Mensaje por Bingen Ugaldebere »

> Despues de leer dos veces me intereso tu tema, pero, para que requieres en
> si el nombre del componente que le ponemos en tiempo de diseño¿
Por que la idea es hacer un método en la clase tWord llamado
ReplaceFields(oForm) y ya que oForm contiene en si mismo todos los
objetos tDbfDataSet tome el documento word y busque todos los campos
insertados como {oUsuarios.Nombre} y los sustituya por su valor del
registro en uso en el oForm.
> Si lo que nececitas es referenciar el nombre del componente y sustituirlo en
> tu hoja de Word, por que no hacer una tabla de {"Nombre Componente", "DBF" }
Es lo que quiero hacer pero automáticamente por eso necesito el nombre
del componente.
Gracias y salu2.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9440
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Como saber el nombre de un Objeto

Mensaje por ignacio »

Bingen,
Podrías recorrerte la matriz aComponents del formulario, comprobar si algún
componente es del tipo TDataset y además está abierto, en cuyo caso sería un
dataset susceptible de usarse.
Un saludo,
"Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
news:[email=46d51253@ozsrv2.ozlan.local...]46d51253@ozsrv2.ozlan.local...[/email]
>
>> Despues de leer dos veces me intereso tu tema, pero, para que requieres
>> en si el nombre del componente que le ponemos en tiempo de diseño¿
>
> Por que la idea es hacer un método en la clase tWord llamado
> ReplaceFields(oForm) y ya que oForm contiene en si mismo todos los objetos
> tDbfDataSet tome el documento word y busque todos los campos insertados
> como {oUsuarios.Nombre} y los sustituya por su valor del registro en uso
> en el oForm.
>
>> Si lo que nececitas es referenciar el nombre del componente y sustituirlo
>> en tu hoja de Word, por que no hacer una tabla de {"Nombre Componente",
>> "DBF" }
>
> Es lo que quiero hacer pero automáticamente por eso necesito el nombre del
> componente.
>
> Gracias y salu2.
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como saber el nombre de un Objeto

Mensaje por Bingen Ugaldebere »

> Podrí­as recorrerte la matriz aComponents del formulario, comprobar si algún
> componente es del tipo TDataset y además está abierto, en cuyo caso serí­a un
> dataset susceptible de usarse.
Efectivamente eso hago
FOR nDB := 1 TO Len( oForm:aComponents )
IF oForm:aComponents[nDB]:IsKindOf( "TDBFDataSet" )
AADD(aDataBases,oForm:aComponents[nDB]:cName)
ENDIF
NEXT
Pero luego cuando quiero hacer los replaces de los campos por su valor
lo que hago es buscar todos los campos que he escrito en el documento
word asi: <oClientes.Nombre>
Funciona correctamente si hago los replaces uno a uno por el campo
correspondiente pero mi intención era automatizarlo completamente ya que
en el programa que hago el cliente va a hacer docenas de escritos Word
con cientos de campos diferentes de 23 tDbfDatasets.
¿Es tan difí­cil obtener el nombre del objeto tDBFDataset recorriendo
aComponents? con esto lo tendrí­a solucionado.
Muchas gracias y saludos.
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Como saber el nombre de un Objeto

Mensaje por zeasoftware »

Yo hago algo similar pero con Excel,. pero lo que hago es darle al usuario campos o "variables", encerradas entre llaves, los llamos variables pre-definidfas, ejemplo:
{Cliente.Nombre}
{Cliente.Direccion}
{Vendedor.Nombre}
Asi recorro la hoja y genero una nueva, sustituyendo usando la clase TExpParser de Xailer, con algunas modificaciones ya que le haye algunos detallitos.
ASi en el programa agrego las "variables" que el usuario puede usar
:AddField( "Articulo.Ubicacion", {|| Articulo->Ubicacion })
:AddField( "Cliente.Clave", {|| Clientes->Cve_Client })
Espero te de una idaea o le sigo anotando.
Saludos.
--
Ramón Zea
01.993.194.14.27
http://www.paginasprodigy.com/zeasoftware/
zeasoftware@prodigy.net.mx
zeasoftware@hotmail.com
ramonzea@yahoo.com
zeasoft.movil@hotmail.com
"Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje news:[email=46d51253@ozsrv2.ozlan.local...]46d51253@ozsrv2.ozlan.local...[/email]
>
>> Despues de leer dos veces me intereso tu tema, pero, para que requieres en
>> si el nombre del componente que le ponemos en tiempo de diseño¿
>
> Por que la idea es hacer un método en la clase tWord llamado
> ReplaceFields(oForm) y ya que oForm contiene en si mismo todos los
> objetos tDbfDataSet tome el documento word y busque todos los campos
> insertados como {oUsuarios.Nombre} y los sustituya por su valor del
> registro en uso en el oForm.
>
>> Si lo que nececitas es referenciar el nombre del componente y sustituirlo en
>> tu hoja de Word, por que no hacer una tabla de {"Nombre Componente", "DBF" }
>
> Es lo que quiero hacer pero automáticamente por eso necesito el nombre
> del componente.
>
> Gracias y salu2.
--
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como saber el nombre de un Objeto

Mensaje por Bingen Ugaldebere »

Si esa es la idea y haciéndolo así­ si que me funciona, pero como tengo
mas de 300 posibles campos en el conjunto de 23 tablas y habrá mas
todaví­a, lo que me interesarí­a es poder hacerlo la lista de sustitución
como tu propones automáticamente, cargarla a un array y luego sustituir
todos los que encuentre en el documento Word.
Ramón Zea escribió:
> Asi recorro la hoja y genero una nueva, sustituyendo usando la clase
> TExpParser de Xailer, con algunas modificaciones ya que le haye algunos
> detallitos.
tExpParser que clase es esta que no sale en la ayuda de Xailer ??
Gracias
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como saber el nombre de un Objeto

Mensaje por Bingen Ugaldebere »

> Se me ocurren dos soluciones, la primera y mas chorra es usar la propiedad
> Cargo y poner en ella el nombre del componente.
Con esta solución me funciona, pero me parece increible no poder saber
el nombre del componente desde la lista de aComponents de un Form.
Gracias y salu2.
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Como saber el nombre de un Objeto

Mensaje por zeasoftware »

En mi version de mi sistema de DOS, las variables para usarlas en mis
reportes externos, lo cargaba de un archivo de texto plano, separado por un
identificador.
El primero era el campo que el usuario podia usar y podrias presentarlo en
una ayuda al usuario para que lo pueda insertar, y el segundo lo convertia
en un bloque de codigo.
#Cliente.Nombre-oClientes:Nombre
Asi si aumentas el numero de tus posibles "variables" solo los anexas en la
lista del archivo plano.
La Clase TExpParser viene con los fuentes de Xailer y no viene documentado.
Saludos.
--
Ramón Zea
01.993.194.14.27
http://www.paginasprodigy.com/zeasoftware/
zeasoftware@prodigy.net.mx
zeasoftware@hotmail.com
ramonzea@yahoo.com
zeasoft.movil@hotmail.com
"Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
news:[email=46d55a44@ozsrv2.ozlan.local...]46d55a44@ozsrv2.ozlan.local...[/email]
> Si esa es la idea y haciéndolo así si que me funciona, pero como tengo mas
> de 300 posibles campos en el conjunto de 23 tablas y habrá mas todavía, lo
> que me interesaría es poder hacerlo la lista de sustitución como tu
> propones automáticamente, cargarla a un array y luego sustituir todos los
> que encuentre en el documento Word.
>
> Ramón Zea escribió:
>> Asi recorro la hoja y genero una nueva, sustituyendo usando la clase
>> TExpParser de Xailer, con algunas modificaciones ya que le haye algunos
>> detallitos.
>
> tExpParser que clase es esta que no sale en la ayuda de Xailer ??
>
> Gracias
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9440
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Como saber el nombre de un Objeto

Mensaje por ignacio »

Bingen,
El nombre del objeto es imposible de saber, porque realmente no existe
ningún nombre del objeto. Su clase contenedora tiene un miembro que apunta a
dicho objeto, pero eso no quiere decir que el objeto tenga un nombre. Me
temo que así no funciona. Lo siento.
Sigo sin entender para que necesitas saber el nombre del objeto. :-( Pero
siempre puedes utilizar su propiedad Cargo para guardarlo.
Un saludo,
--
Ignacio Ortiz de Zúñiga
[Soporte Xailer]
"Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
news:[email=46d539fe@ozsrv2.ozlan.local...]46d539fe@ozsrv2.ozlan.local...[/email]
>> Podrías recorrerte la matriz aComponents del formulario, comprobar si
>> algún componente es del tipo TDataset y además está abierto, en cuyo caso
>> sería un dataset susceptible de usarse.
>
> Efectivamente eso hago
>
> FOR nDB := 1 TO Len( oForm:aComponents )
> IF oForm:aComponents[nDB]:IsKindOf( "TDBFDataSet" )
> AADD(aDataBases,oForm:aComponents[nDB]:cName)
> ENDIF
> NEXT
>
> Pero luego cuando quiero hacer los replaces de los campos por su valor lo
> que hago es buscar todos los campos que he escrito en el documento word
> asi: <oClientes.Nombre>
>
> Funciona correctamente si hago los replaces uno a uno por el campo
> correspondiente pero mi intención era automatizarlo completamente ya que
> en el programa que hago el cliente va a hacer docenas de escritos Word con
> cientos de campos diferentes de 23 tDbfDatasets.
>
> ¿Es tan difícil obtener el nombre del objeto tDBFDataset recorriendo
> aComponents? con esto lo tendría solucionado.
>
> Muchas gracias y saludos.
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9440
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Como saber el nombre de un Objeto

Mensaje por ignacio »

Bingen,
No todo lo que está en el directorio source está documentado. Dicha clase es
parte de ello. Lo siento.
Un saludo,
"Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
news:[email=46d55a44@ozsrv2.ozlan.local...]46d55a44@ozsrv2.ozlan.local...[/email]
> Si esa es la idea y haciéndolo así si que me funciona, pero como tengo mas
> de 300 posibles campos en el conjunto de 23 tablas y habrá mas todavía, lo
> que me interesaría es poder hacerlo la lista de sustitución como tu
> propones automáticamente, cargarla a un array y luego sustituir todos los
> que encuentre en el documento Word.
>
> Ramón Zea escribió:
>> Asi recorro la hoja y genero una nueva, sustituyendo usando la clase
>> TExpParser de Xailer, con algunas modificaciones ya que le haye algunos
>> detallitos.
>
> tExpParser que clase es esta que no sale en la ayuda de Xailer ??
>
> Gracias
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Rolando
Mensajes: 191
Registrado: Lun May 08, 2006 2:10 pm

Como saber el nombre de un Objeto

Mensaje por Rolando »

Podrias usar tDbfDataSet:cAlias para identificarlo.
Saludos
"Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
news:46d5114d$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
>
>> Prueba con AADD(aDataBases,oForm:aComponents[nDB]:ClassName())
>
> ClassName() devuelve el tipo de clase a la que pertenece el objeto
> tDbfDataSet no el nombre del objeto.
>
> Gracias de todos modos.
Responder