![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Acceder al "data" de un treeview
Hola a tod@s.
Tengo un problema al intentar acceder al "data" de un treeview, lo creo de la siguiente manera:
El problema es que después quiero acceder al valor del data, por ejemplo en el evento click del treeview pero no me da el valor correcto. He estado echando un vistazo a los post del foro y no encuentro dónde puede estar el problema. He probado de dos maneras:
con este código salen cosas raras que no tienen nada que ver con el dato que debe de tener almacenado.
con este otro código o no sale nada o da un access violation error Agradeceré cualquier ayuda. Gracias y un saludo
__________________
Be water my friend. |
#2
|
||||
|
||||
Hola amigo.
![]() En principio veo que tendrías que cambiar: Por:
Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
||||
|
||||
Cita:
__________________
Be water my friend. |
#4
|
||||
|
||||
¿Quieres creer que nunca he usado esa propiedad "data" de un ttreenode?.
Me parece que ayer mismo había un hilo que trataba sobre ese asunto, a ver si lo encuentro.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#5
|
||||
|
||||
La diferencia es la siguiente
Este no te devuelve nada, la consulta la realiza internamente Este te devuelve la consulta del query con todos los campos Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber. Última edición por olbeup fecha: 31-05-2012 a las 13:55:39. |
#6
|
||||
|
||||
Bueno, es que cuando se trata de una consulta (que devolverá datos) se debe utilizar Open o Active. ExecSQL se utiliza cuando se manipula algún dato (inserta, modifica, borra, etc).
Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#7
|
||||
|
||||
Aquí está, no sé si te servirá.
Aunque depende de los componentes que uses, lo normal es .Open para los select (te devuelve registros) y .ExecSQL para insert, update, etc. (ejecuta una acción, pero no devuelve registros)
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#8
|
||||
|
||||
Vale, ya me callo, que parezco un loro repitiendo lo que dice ecfisa.
p.s. Es que no lo había visto, no vayáis a pensar que soy un loro de verdad.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#9
|
||||
|
||||
Cita:
![]() Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#10
|
||||
|
||||
Gracias por vuestra aclaración pero imagino que será por la base de datos las dos instrucciones me hacen exactamente lo mismo. Miraré en la documentación de la base de datos a ver qué diferencias tiene.
Casimiro, ya había visto ese post pero me parecía más simple como se hace en este que es algo parecido a lo que yo estoy haciendo. Intentaré hacerlo de la manera que se comenta en tu post a ver cómo va. Gracias a todos.
__________________
Be water my friend. |
#11
|
||||
|
||||
Solucionado
Hola de nuevo. He modificado el código en función al post que me comentaba Casimiro y funciona correctamente. Se ha quedado de la siguiente forma:
y en el evento OnClick
Gracias a todos y un saludo Edito: para que veais que soy bueno he cambiado el ExecSql por el Open :P
__________________
Be water my friend. Última edición por newtron fecha: 31-05-2012 a las 14:06:09. |
#12
|
||||
|
||||
Cita:
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#13
|
||||
|
||||
Hola newtron.
No cambies todo todavía, primero revisá esta prueba reducida, usando básicamente tu código y que funciona correcto. Saludos. ![]() Edito: ¿ Ves lo que te decía Casimiro? (no ví el mensaje que ya estaba solucionado ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 31-05-2012 a las 14:23:31. |
#14
|
|||
|
|||
Un apunte de última hora, y no es por ir de "listillo" :P y por favor, corregidme si me equivoco....
El problema que tenías originalmente, era con acceder a los datos del campo "Data" del TreeView, no con la base de datos, ¿correcto? Tú hacías lo siguiente (lo pongo de nuevo, ya que hace tropecientos mensajes que pasó):
Y al hacer:
no te funcionaba. Pues bien, yo creo, independientemente de todo el tema de bases de datos que habéis estado discutiendo (del cual, yo no tengo ni idea), que no te funciona porque el tipo "string" es un tipo manejado, creado y destruido por Delphi cuando se queda sin referencias. Si haces un casting a Pointer, la referencia se pierde y Delphi te destruye la string nada más salir de la función, pudiendo ser reutilizado su espacio. Por eso tu otra solución SI funciona:
ya que tienes una instancia de un objeto NO manejado (de tipo TMiClase), por lo que no se te autodestruye. Y este objeto mantiene una referencia al string (MiClase.Codigo) por lo que tampoco te destruye éste y todo funciona bien. Otra solución, sin usar clases auxiliares, podría haber sido la siguiente (escrita sobre el navegador y sin probar):
Por supuesto, cuando elimines el nodo del TreeView, deberás hacer un Dispose(Nodo1.Data). Un saludo, LoPiTaL |
#15
|
||||
|
||||
Siempre está bien ver distintas formas para hacer cualquier cosa.
Gracias LoPiTal. ![]()
__________________
Be water my friend. |
#16
|
||||
|
||||
newtron, supongo que lo has considerado, pero en caso de que no sea así, te comento que hay que tener cuidado con el código que finalmente escogiste, en el sentido de que debes destruir en algún momento los objetos que creas y pegas en el Data de los nodos.
// Saludos |
#17
|
||||
|
||||
Cita:
![]() ¿Cómo se destruirían esos objetos entendiendo que se ha creado uno por cada item del treeview?
__________________
Be water my friend. |
#18
|
||||
|
||||
Usa el evento OnDeletion del TreeView.
// Saludos |
#19
|
||||
|
||||
Cita:
![]() |
#20
|
||||
|
||||
Vale... ¿y sería posible un ejemplito para torpes?
![]()
__________________
Be water my friend. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
El programa se queda "colgado" mientras copia y luego "despierta" | NeWsP | OOP | 5 | 10-03-2010 22:05:40 |
"String or binary data would be truncated" | Gaim2205 | Conexión con bases de datos | 2 | 17-05-2008 14:32:40 |
Cómo acceder a las propiedades de un "Parent" | NeoAnderson | API de Windows | 14 | 12-02-2008 21:13:46 |
Sólo para expertos: "Error reading iError.Picture.Data:Out of system resources" | sami76 | Varios | 2 | 04-10-2007 13:53:31 |
Necesito llamar a métodos de clases "hija" desde su clase "padre" | Flecha | OOP | 17 | 20-04-2007 00:03:53 |
![]() |
|