Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > OOP
Register FAQ Members List Calendar Guía de estilo Today's Posts

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 28/11/2005
Carmelo Cash's Avatar
Carmelo Cash Carmelo Cash is offline
Miembro
 
Join Date: Jul 2003
Location: Buenos Aires
Posts: 269
Poder: 24
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
Reply With Quote
  #2  
Old 29/11/2005
Neftali [Germán.Estévez]'s Avatar
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Join Date: Jul 2004
Location: Barcelona - España
Posts: 19,449
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
Quote:
Originally Posted by 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.
Reply With Quote
  #3  
Old 29/11/2005
Carmelo Cash's Avatar
Carmelo Cash Carmelo Cash is offline
Miembro
 
Join Date: Jul 2003
Location: Buenos Aires
Posts: 269
Poder: 24
Carmelo Cash Va por buen camino
Hola

Gracias por atender mi consulta.

Efectivamente el mesnaje es 'Access violation at adress 00494A3C in module nnn'
Reply With Quote
  #4  
Old 29/11/2005
delphi.com.ar's Avatar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Join Date: May 2003
Location: Buenos Aires, Argentina *
Posts: 5,964
Poder: 29
delphi.com.ar Va camino a la fama
Quote:
Originally Posted by 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.
Reply With Quote
  #5  
Old 29/11/2005
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
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.
Reply With Quote
  #6  
Old 29/11/2005
Carmelo Cash's Avatar
Carmelo Cash Carmelo Cash is offline
Miembro
 
Join Date: Jul 2003
Location: Buenos Aires
Posts: 269
Poder: 24
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.
Reply With Quote
  #7  
Old 29/11/2005
delphi.com.ar's Avatar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Join Date: May 2003
Location: Buenos Aires, Argentina *
Posts: 5,964
Poder: 29
delphi.com.ar Va camino a la fama
Quote:
Originally Posted by 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.
Reply With Quote
  #8  
Old 26/09/2006
jzginez's Avatar
jzginez jzginez is offline
Miembro
 
Join Date: Sep 2003
Location: Puebla, México
Posts: 247
Poder: 23
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:

Quote:
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
Quote:
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
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 05:29.


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