Jump to content


Photo

Un error que no se por que lo da


  • Please log in to reply
14 replies to this topic

#1 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 posts
  • LocationPinar del Río, Cuba

Posted 11 June 2010 - 07:40 AM

Hola a todos
Tengo en siguiente codigo que me da error en la linea indicada



delphi
  1. procedure TfSubMayor.FormActivate(Sender: TObject);
  2. var
  3.   Filt  :string;
  4.  
  5. begin
  6.   Filt:=Filtro + ' and IdAreaRC=' + ModuloBD.TablaAreas.FieldByName('IdAreaRC').AsString;
  7.   with ModuloBD.sqlSubMayor do
  8.   begin
  9.     Filtered:=False;
  10.     Filter:=Filt;
  11.     Filtered:=True;
  12.     Active:=True;
  13.  
  14.     Panel1.Caption:=IntToStr(RecordCount) +' Registros';  //<--- Aqui da el error
  15.  
  16.   end;
  17. end;



El mensaje de error se lo adjunto en la imagen

El error lo da cuando mando a ejecutar ese procedimiento al actualizar un cuadro combinado que esta en el formulario principal (la aplicacion es MDI)
- Cuando abro el formulario, lo hace bien sin dar error y actualiza el Caption bien
- Cuando cambio el cuadro combinado (con el formulario abierto) me sale el mensaje de error, pero a pesar de eso tambien me actualiza el Caption bien
- Si quito la linea de actualizar el Caption no da error

Algo raro que me tiene loco  8o|

El objetivo es que al cambiar el Area en el combo, se actualice el formulario con los indicadores de esa area. Esto lo hace bien, solo que cuando quiero mostrar la cantidad de registros me da el error

Attached Files


  • 0

#2 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 posts
  • LocationPinar del Río, Cuba

Posted 11 June 2010 - 07:46 AM

Y que egostar se anime y responda que a partir de ahora si me voy a tomar el tiempo de probar todas las soluciones  (y) para que no me vuelva a pasar lo mismo  :(

:cheesy: incluso probaré las de él  :D :D :D :D
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 11 June 2010 - 08:08 AM

mmm... yo intuyo que el Active está mal ubicado o está de más, intenta colocarlo antes del filtro.

Saludos.
  • 0

#4 felipe

felipe

    Advanced Member

  • Administrador
  • 3283 posts
  • LocationColombia

Posted 11 June 2010 - 08:15 AM

Yo probaría de esto:



delphi
  1. Panel1.Caption:=IntToStr(RecordCount) +' Registros'



a esto:



delphi
  1. Panel1.Caption:=IntToStr(sqlSubMayor.RecordCount) +' Registros'



A ver que pasa...


Saludos!

Edito: No leí bien el asunto, ¿no será algo con el foco de los componentes?
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 11 June 2010 - 08:38 AM

Yo probaría de esto:



delphi
  1. Panel1.Caption:=IntToStr(RecordCount) +' Registros'



a esto:



delphi
  1. Panel1.Caption:=IntToStr(sqlSubMayor.RecordCount) +' Registros'



A ver que pasa...


Saludos!

Edito: No leí bien el asunto, ¿no será algo con el foco de los componentes?


No tiene que ver porque el recordCount está dentro de un with así que no es necesario llamar el componente.
  • 0

#6 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1750 posts
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Posted 11 June 2010 - 08:51 AM

Hola a todos
Tengo en siguiente codigo que me da error en la linea indicada...


Te sugiero que no le pongas AsString a tu filtro, sino que hagas el Cast más específicamente, me refiero a ésto...

Filtro := .... + QuotedString(IntToStr(loquesea));

o en el último de los casos, ustilizar un SQL o una consulta más específica. A veces, los filtros de Delphi si no trabajan sobre BDE tienen comportamientos "raros" que a más de uno le rompen la cabeza y todo lo que te dejes.
  • 0

#7 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 posts
  • LocationPinar del Río, Cuba

Posted 11 June 2010 - 11:30 AM

mmm... yo intuyo que el Active está mal ubicado o está de más, intenta colocarlo antes del filtro.


Probe poniendolo antes del filtro y sigue igual


Te sugiero que no le pongas AsString a tu filtro, sino que hagas el Cast más específicamente, me refiero a ésto...

Filtro := .... + QuotedString(IntToStr(loquesea));


No debe ser problemas con el filtro, porque al abrir el formulario lo hace bien, y despues de dar el error tambien muestra bien la cantidad de registros.
Ademas, lo que estoy asignando es un numero que no va entre comillas

Otro detalle adicional, estoy usando MySQL

  • 0

#8 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 11 June 2010 - 12:15 PM

Amigo una pregunta.... estás utilizando un filtro sobre un componente Query ?... o ando perdida ? :D

Saludox ! :)
  • 0

#9 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 posts
  • LocationMéxico

Posted 11 June 2010 - 12:37 PM

Bueno ya que estás dispuesto a probar todas las sugerencias


Qué tal si pones la siguiente línea :)



delphi
  1.     if Assigned(Panel1) then
  2.       Panel1.Caption:=IntToStr(RecordCount) +' Registros';  //<--- Aqui da el error




Solo para comprobar que ya existe una instancia del componente al que deseas acceder.

Saludos
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 11 June 2010 - 02:56 PM

Y que egostar se anime y responda que a partir de ahora si me voy a tomar el tiempo de probar todas las soluciones  (y) para que no me vuelva a pasar lo mismo  :(

:cheesy: incluso probaré las de él  :D :D :D :D


:D :D :D

Porque no puebas el mismo código en el evento OnShow de la forma y no en el OnCreate y nos comentas que sucede.

Salud OS
  • 0

#11 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 posts
  • LocationPinar del Río, Cuba

Posted 11 June 2010 - 02:59 PM

Amigo una pregunta.... estás utilizando un filtro sobre un componente Query ?... o ando perdida ? :D


Pues no andas perdida, asi es.
Es un error hacer eso?

Pues parece que es eso, porque al probar



delphi
  1. if Assigned(Panel1) then    //<--- Ahora es Aqui donde da el error
  2.       Panel1.Caption:=IntToStr(RecordCount) +' Registros'; 



La linea de error cambio a la nueva insertada inmediatamente despues de filtered:=true

La conclusion que saco es que el problema esta al aplicar el filtro, y no en el Panel ni en el Recordcount


  • 0

#12 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 posts
  • LocationPinar del Río, Cuba

Posted 11 June 2010 - 03:07 PM

Porque no puebas el mismo código en el evento OnShow de la forma y no en el OnCreate y nos comentas que sucede.

Salud OS


En realidad amigo, es el evento OnActivate el que estoy usando y no el OnCreate

Y ya detecté que el problema esta al aplicar el filtro, que parece que como se lo hago a un TZQuery debe estar mal, como sugirio fena
  • 0

#13 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 11 June 2010 - 03:28 PM


Porque no puebas el mismo código en el evento OnShow de la forma y no en el OnCreate y nos comentas que sucede.

Salud OS


En realidad amigo, es el evento OnActivate el que estoy usando y no el OnCreate

Y ya detecté que el problema esta al aplicar el filtro, que parece que como se lo hago a un TZQuery debe estar mal, como sugirio fena


Lo interesante de los Querys es que puedes "filtrar" la información que requieras mediante su sentencia SQL... yo nunca he usado filtros en querys (en tablas si) por esto que te comento... porqué no intentas manipulando o usando su sentencia SQL y ejecutando el query después y nos platicas...

Puedes hacer uso de parámtros si es que esperas un dato para poder ejecutar la sentencia o varios truquillos por ahí... si necesitas algo en específico no dudes en decírnoslo amigo...

Saludox ! :)
  • 0

#14 Alfredo

Alfredo

    Advanced Member

  • Miembros
  • PipPipPip
  • 91 posts
  • LocationMéxico

Posted 12 June 2010 - 12:18 PM

Como dicen los compañeros hay otras maneras de hacer lo que haces, pero eso no implica que el codigo como lo tienes no deba funcionar correctamente, si hiciste copy-paste de tu codigo, como lo tienes deberia hacer lo que quieres que haga; yo te preguntaria: ¿tienes eventos que se disparen cuando se abre el dataset?, puede ser que en un evento Oncalcfields o algun otro evento intentes acceder a un objeto aun no creado, que de hecho es lo que muestra el mensaje de error que nos muestras.
  • 0

#15 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 posts
  • LocationPinar del Río, Cuba

Posted 14 June 2010 - 11:16 AM

Hola a todos de nuevo

Probé cambiando los filtros por una instruccion SQL y da el mismo error, descartado que el error sea ahí

Probé quitando la línea



delphi
  1. Panel1.Caption:=IntToStr(RecordCount) +' Registros';



y no da mas el error.

Despues del fin de semana con la mente mas fresca, rediseñé el procedimiento y ya no me da mas el error

En lugar de llamar al procedimiento OnActivate desde el combobox, hice un procedimiento aparte para aplicar los filtros, al cual llamo desde el onChange del combo y desde el OnActivate del form
Desde esta forma no me da mas el error

:undecided:  Aunque todavía me quedó en el misterio el por qué me lo daba como estaba.  :(



  • 0




IP.Board spam blocked by CleanTalk.