Ver Mensaje Individual
  #3  
Antiguo 23-01-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Mendizabal Ver Mensaje
Estoy programando un componente para delphi XE6 con una propiedad publicada que debería mostrar una lista de valores recuperados de una base de datos (SQL Server 2012, por más datos). El problema que me estoy encontrando es a la hora de conectarme a un base de datos en tiempo de diseño (para recuperar los valores con los que llenaré el combo box).

La cadena de conexión la recuperará de un componente externo (mediante una propiedad).
En mi caso la recuperará de un TADOConnection que escogerá el usuario. Hasta ahí la cosa es fácil. A partir de ahí, creo un objeto tipo TADOQuery dentro de mi componente, llamo a su constructor, le declaro sus propiedades (incluida la consulta SQL), y realizo la consulta.
Antes de nada debes estar seguro de que las cosas se hacen en el orden correcto.
¿Donde lanzas esas consulta? ¿En el Active de tu componente, en el Create,...?
Debes tener claro que en el momento de hacer la consulta tienes disponible todo lo que te hace falta. si dependes de otro componente, debes asegurarte de que está creado y que tiene los valores correctos en las propiedades (ConnectionString).


Cita:
Empezado por Mendizabal Ver Mensaje
De hecho me cuelga el IDE.
Es extraño, porque no debería pasar. depende de como lo estés haciendo te debería dar errores de memoria, o error al conectar, pero no que te deje "colgado" el IDE.

Cita:
Empezado por Mendizabal Ver Mensaje
Y lo peor es que no puedo / no sé debugar en tiempo de diseño.
No se puede hacer Debug en tiempo de diseño. Aunque la ejecución debe funcionar igualmente si estás en diseño o en ejecución.
Un truco que puedes utilizar es pasar el código que ahora estás intentando probar en diseño a un lugar donde puedas probarlo en ejecución y ahí hacer el debug. Luego lo vuelves a pasar a la zona correcta.

Ejemplo:
Si tienes el código en el la propiedad Active (método SetActive), ejecuta ese método en ejecución y haz el Debug. Si funciona en ejecución debería funcionar en diseño. Esto respecto al código, otro tema es lo que te he comentado antes, que en el momento de ejecutarlo en diseño te falten cosaso existan componentes no creados o sin las propiedades correctas.

Una propuiedad que te puede ayudar en estos menesteres en el ComponentState. Tiene valores interesantes que en esto te pueden servir como, csLoading, csDestroying, csDesigning, csFreeNotification.

Tal vez (si puedes ponerlo) un esqueleto de tu componente pueda ayudar a probarlo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita