Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-10-2008
Bauhaus1975 Bauhaus1975 is offline
Miembro
 
Registrado: may 2005
Ubicación: Málaga
Posts: 135
Poder: 20
Bauhaus1975 Va por buen camino
Unhappy Asignar TField a TDBLookupList en T.ejecución

Hola, tengo un TDBLookupList (realmente es un TJvDBLookupList, de las Jedi), conectado a un data source, y este a su vez conectado a un TIBQuery (que hace de DataSet), resulta que quiero llenar la lista con uno de los campos del resultado de la query. No sé bien cómo hacerlo.
Estoy intentando asignar un campo (TField) de la query en el datasource en tiempo de ejecución. Pero no funciona, slata excepción en la linea (2ª) del 'FindField'

prueba := TField.Create(self.TJvDBLookupList); // prueba es de tipo TField
prueba := DataModule.ibQuery.FindField('TIPO');
form1.TJvDBLookupList.Field.Assign(prueba);

¿Alguien puede guiarme un poco?
Muchas gracias y un saludo.
Responder Con Cita
  #2  
Antiguo 28-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, antes que nada, si findfield te devuelve un objeto tipo TField, no deberias crear prueba antes, pues el findfield sobreescribira el recien creado. De igual manera, si ahora mismo hicieses un prueba.free, estarias liberando DataModule.ibQuery.FindField('TIPO'). Es raro que te salte una excepción, pues si TIPO existe te tendria que devolver nil. Es posible que ibQuery no este asignado antes de hacer el findfield? prueba de hacer:

Código Delphi [-]
var
prueba : TField;
begin
if not Assigned(DataModule.ibQuery) then ShowMessage('');
prueba := DataModule.ibQuery.FindField('TIPO');
form1.TJvDBLookupList.Field.Assign(prueba);

si nos indicas cual es el mensaje de la excepción, quiza te podamos ayudar mejor. saludos.
Responder Con Cita
  #3  
Antiguo 29-10-2008
Bauhaus1975 Bauhaus1975 is offline
Miembro
 
Registrado: may 2005
Ubicación: Málaga
Posts: 135
Poder: 20
Bauhaus1975 Va por buen camino
Hola coso, gracias por tu atención.
He probado la sentencia 'if not Asign' y me lanza la excepción 'Read of Address', parece que hay problemas de acceso al ibQuery, aunque desconozco por qué. He probado a llamar a un método público del DataModule y no da error de acceso. Este DataModule dónde se encuentra la query tiene definido otro DataModule en la directiva 'interface', el cual contiene la conexión a la base de datos y un TIBTransaction al que se conectan las queries (aunque no creo que esto sea problema).

Otra cosa, el ibQuery tiene definida una sentencia SQL, pero luego a parte tiene definido un campo, el cual es uno de los campos obtenidos en la sentencia, para alimentar posteriormente la lista. Aunque no sé si esto es correcto o la mejor manera, ya que no tengo mucha experiencia programando este tipo de aplicaciones.

He seguido probando cosas, pero no sé que puede estar pasando.
¿Alguna idea?
Responder Con Cita
  #4  
Antiguo 29-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, yo simplificaria todo a un unico datamodule (para eso esta este tipo de form, para no tener desperdigados todos los componentes de base de datos). Es probable que haya algun lio por alli (forms con el mismo nombre y diferentes componentes, por ejemplo, cosas asi) Por otra banda, si te da un error de read address, lo mas probable es que no este asignado o bien datamodule (que no este creado en tiempo de ejecucion) o bien que hayas liberado el ibQuery. Prueba if not assigned(Datamodule) then ShowMessage(''). Creo que debe ser eso, que no tienes creada la form Datamodule al llegar a este punto. Saludos.
Responder Con Cita
  #5  
Antiguo 30-10-2008
Bauhaus1975 Bauhaus1975 is offline
Miembro
 
Registrado: may 2005
Ubicación: Málaga
Posts: 135
Poder: 20
Bauhaus1975 Va por buen camino
Hola de nuevo, he probado lo que me dices y nada.
Parece que todo está bien asignado, además todos los objetos (datasource, query) accedo sin problemas en tiempo de ejecución. El error ocurre al llamar a esa sentencia 'Assign', así que seguiré investigando.
Gracias.
Responder Con Cita
  #6  
Antiguo 30-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, no es assign() es assigned(). La primera copia dos objetos. La segunda comprueba que el argumento pasado como puntero no sea null. Saludos.
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
Asignar datos origen a gráfico en tiempo de ejecución g_rojo Gráficos 4 07-12-2007 01:44:19
Asignar evento OnDrawColumnCell en tiempo de ejecución gluglu OOP 6 01-06-2007 13:14:58
Asignar propiedades de Ttable en tiempo de ejecución coleleon Tablas planas 3 30-11-2005 23:22:39
Asignar evento Oncalcfield en tiempo de ejecucion el_barto Conexión con bases de datos 5 06-09-2005 00:08:46
Asignar la ruta de tablas en tiempo de ejecucion tortelini Varios 2 19-03-2005 12:13:53


La franja horaria es GMT +2. Ahora son las 13:57:54.


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