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 28-11-2005
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Consula sobre Findcomponent

Hola Foro:
Estoy usando Delphi 5.0 y necesito hacer referencia a más de una consulta.
Para esto pensaba utilizar la opción Findcomponent y en una variable string pasar el dato de la consulta que necesito.
En el ejemplo que muestro no estoy utilizando una variable, estoy escribiendo el nombre del componente como 'texto', esto es solamente más que para probar.
El problema en que aparece un error inentendible.

Esto funciona OK
Edit2.text:= ABM_Rubros.Form_ABM_Rubros.Query11.fields[1].value;

Esto No
Edit2.text:= TQuery(FindComponent('ABM_Rubros.Form_ABM_Rubros.Query11')).fields[1].value;

Tal vez me sepan decir en donde le estoy pifiando.
Desde ya muchas gracias
Responder Con Cita
  #2  
Antiguo 29-11-2005
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.285
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 Carmelo Cash
El problema en que aparece un error inentendible.
Aunque para tí sea "inentendible" dinos cual es, tal nos de pistas de lo que está pasando.
¿No será un Access Violation?

Sin el error, todo lo que te podamos decir son suposiciones.
__________________
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
  #3  
Antiguo 29-11-2005
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Hola

Gracias por atender mi consulta.

Efectivamente el mesnaje es 'Access violation at adress 00494A3C in module nnn'
Responder Con Cita
  #4  
Antiguo 29-11-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por Carmelo Cash
Edit2.text:= TQuery(FindComponent('ABM_Rubros.Form_ABM_Rubros.Query11')).fields[1].value;
Seguramente no va a encontrar ningún componente que se llame "ABM_Rubros.Form_ABM_Rubros.Query11", ya que el nombre del supuesto componente solamente es "Query11".
Tendrías que tener algunas consideraciones, como verificar si FindComponent retornó algo como lo que estas esperando:
Código Delphi [-]
var
  AComponent: TComponent;
begin
  AComponent := FindComponent('Query11');
  if AComponent is TQuery then
    Edit1.Text := TQuery(AComponent).Fields[1].Value
end;

Vale aclarar que si estas ejecutando FindComponent en un evento o dentro del código de un TComponent (Posiblemente de un TForm), FindComponent lo ejecutará Self y me parece que vos queres buscarlo en Form_ABM_Rubros, por lo que tendrás que hacer algo como:
Código Delphi [-]
  ...
  AComponent := Form_ABM_Rubros.FindComponent('Query11');
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 29-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
- FindComponent busca en el Form o en el Contenedor donde está, si pretendes buscar en Form_ABM_RUBROS, deberás usar Form_ABM_RUBROS.FindComponent(.....);

- FindComponent devuelve nil (puntero nulo) si no encuentra el componente. Por tanto, siempre debes verificar que se ha encontrado, de lo contrario, en TQuery(nil).Fields <<<<<< Aquí estas traspasando un puntero nulo, Access Violation.
Código Delphi [-]
var T:Tcomponent;
begin
  T := Findcomponent(....);
 if t  <> nil  then
    t.Loquesea

- FindComponent busca por el nombre del componente, por tanto tu instrucción sería más o menos:
Código Delphi [-]
  var t:Tcomponent;
begin 
  t := Form_ABM_Rubros.FindComponent('Query11');
  if Assigned(t) then // lo mismo que en el ejemplo anterior.
     t.loquesea.

// saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 29-11-2005
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Salió!!!

Quedó como me sugirió Delphi.com.ar

Edit2.Text:=TQuery(Form_ABM_Rubros.FindComponent('Query11')).Fields[1].Value;

Con la sugerencia de Lepe no entiende la propiedad Fields[1] (Undeclared identifier)

Gracias por su ayuda.
Responder Con Cita
  #7  
Antiguo 29-11-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por Carmelo Cash
Con la sugerencia de Lepe no entiende la propiedad Fields[1] (Undeclared identifier)
Seguramente porque no estas haciendo un cast a TQuery... ¿Entiendes lo que acabas de hacer?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 26-09-2006
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
Hola, estoy intentando hacer lo mismo que Carmelo pero no ne sale a la pregunta directa de Delphi.com.ar:

Cita:
Seguramente porque no estas haciendo un cast a TQuery... ¿Entiendes lo que acabas de hacer?
la verdad NO, les pongo lo diferente de mi caso:

Tengo un DataModule (DtmDatos) con n IBDataSet (algunos son IBVentas, IBClientes, IBProveedores, etc)


En mi forma2 (FrmCambiaSQL) donde tengo un TDataSource y una combinación de Tcomboxbox, Tedit y otros componentes para que el usuario pueda crear un filtro (where algo = algo) que se añade a la sentencia select del IBDataSet corespondiente.

en el boton que aplica los cambios para crear el filtro tengo bastantes lineas con algo como esto:
Código Delphi [-]
 if dataSource1.datset.name = 'IBClientes'
 Then Begin
   NuevaConsulta:= AgregaFiltro(DtmDatos.IBClientes.SelectSQL.text);
   DtmDatos.IBClientes.Close;
   DtmDatos.IBClientes.SelectSQL.Clear;
   DtmDatos.IBClientes.SelectSQL.add(NuevaConsulta);
   DtmDatos.IBClientes.Open;
  End;
y haci para cada IBDataSet que uso

mi primera intención era poner algo así:
Código Delphi [-]
 NuevaConsulta:= DataSource1.DataSet.SelectSQL;
pero desde el componente tDataSource no puedo accesar a la propiedad SelectSQL, esto seria lo ideal que nesecito.

con este hilo intente lo que aconsega Delphi.com.ar
Cita:
Tendrías que tener algunas consideraciones, como verificar si FindComponent retornó algo como lo que estas esperando:

Código Delphi [-]

var
  AComponent: TComponent;
begin
  AComponent := FindComponent('Query11');
  if AComponent is TQuery then
    Edit1.Text := TQuery(AComponent).Fields[1].Value
end;

Vale aclarar que si estas ejecutando FindComponent en un evento o dentro del código de un TComponent (Posiblemente de un TForm), FindComponent lo ejecutará Self y me parece que vos queres buscarlo en Form_ABM_Rubros, por lo que tendrás que hacer algo como:

Código Delphi [-]
 ...
  AComponent := Form_ABM_Rubros.FindComponent('Query11');
Saludos!
y pasa lo mismo no puedo accesar a la propiedad SelectSQL, ¿que hay que hacer?

Gracias
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
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


La franja horaria es GMT +2. Ahora son las 16:33:09.


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