Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-01-2015
Mendizabal Mendizabal is offline
Miembro
NULL
 
Registrado: sep 2014
Posts: 31
Poder: 0
Mendizabal Va por buen camino
Componente que conecta con una BD en tiempo de diseño

Buenas a todos,
Antes que nada disculparme por el título. No he encontrado una forma mejor de expresarlo. Tampoco sé si en el foro existen otros temas que respondan a mi pregunta. Los he buscado, pero no he sabido encontrarlos.
En fin, al lío. 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). Es decir, mi componente tiene una propiedad (idioma, en este caso. Pero es lo de menos), cuyos valores dependen de una tabla en mi DB.

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. No funciona. De hecho me cuelga el IDE. Y lo peor es que no puedo / no sé debugar en tiempo de diseño.

Como veis soy muy novato con el tema de crear componentes. Así que cualquier pista será bienvenida.

Saludos.
Responder Con Cita
  #2  
Antiguo 23-01-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En nuestro FTP encontrarás ejemplos, tutoriales, etc. para crear componentes, échale un vistazo.
Responder Con Cita
  #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.272
Poder: 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
  #4  
Antiguo 23-01-2015
Mendizabal Mendizabal is offline
Miembro
NULL
 
Registrado: sep 2014
Posts: 31
Poder: 0
Mendizabal Va por buen camino
Muchas gracias a ambos.

Voy a repasarme los tutoriales. Tienen buena pinta.

En realidad lanzo la consulta cuando la propiedad en cuestión (Language) trata leer sus 'valores'. Es decir, siguiendo este trozo código:

Código Delphi [-]
  published
    property Language: TCustomTextList read GetLanguage write SetLanguage;

La consulta la lanzaría cuando llamo al procedure GetLanguage. También hay que decir que antes de asignarle la cadena de conexión al TADOQuery, compruebo que exista dicha cadena. Es decir, teniendo esta propiedad publicada:

Código Delphi [-]
   published
     property Connection: TADOConnection read FConnection write SetConnector;

Compruebo que la propiedad Connection no sea nula. De no serlo, se la asigno al TADOQuery.Connection (pondría el código real, pero está muy sucio ahora mismo).

Lo del IDE yo tampoco lo entiendo. Pero me sucede. Voy a probar a debuggar como ha sugerido Neftali. No se me había ocurrido, la verdad, pero es un método bastante evidente.

Investigaré sobre ComponentState. Tiene pinta de ser básica a la hora de programar componentes. Si es que las cosas no se pueden hacer con prisas, hay que estudiar el tema antes .

Gracias de nuevo a ambos
Responder Con Cita
  #5  
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.272
Poder: 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
Lo del IDE yo tampoco lo entiendo.
Que no esté dentro de un bucle al calcular la propiedad...
Es lo único que se me ocurre para que el IDE se te quede "tieso".
__________________
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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Componentes en tiempo de diseño ElDuc OOP 12 10-02-2011 06:02:15
Diseño de reportes en tiempo de ejecución jzginez Impresión 2 17-04-2007 16:46:10
eventos en tiempo de diseño jar OOP 0 27-01-2007 22:09:11
Indices En Tiempo De Diseño?? amadis Conexión con bases de datos 0 12-04-2006 20:22:01
Diseño en tiempo de ejecucion Nelson Alberto Impresión 2 26-01-2006 09:34:12


La franja horaria es GMT +2. Ahora son las 14:48:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi