Ver Mensaje Individual
  #10  
Antiguo 20-01-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
El fallo que veo es obvio, pero a la vez complejo.

Código Delphi [-]
with  TRinventarios.Create (Application) do
Cuando se crea, ¿qué nombre tendrá el componente? Pues si TRinventarios tiene en su propiedad Name = Rinventarios tendrá ese nombre, y después al crear otro componente, es decir, al volver a pasar por esa línea se volverá a crear otro componente con el mismo nombre, de ahí el error.

pero ¿como es posible? si estamos haciendo un free en el bloque finally?. Bueno, posiblemente ocurra al pulsar el boton que crea ese informe dos veces, que ordenará crear ese QuickReport 2 veces.

Opciones no excluyentes, para solucionarlo:
- Quita el Application y usa nil como parámetro, ya que realmente te encargas tú de destruirlo.

- Cuando pulses el boton para ver el preview, inhabilita (boton.enable := false) dicho botón hasta que se cierre el preview.

- Usa una variable para guardar el quickreport recien creado, así delphi le asignará nombres distintos y no tendrás el error que da:
Código Delphi [-]
var Ri : TRinventarios;
begin
ri := TRinventarios.Create (nil) ;
with ri  do 
Begin 
try     
  ///Procedemiento almacenado que mostrara el reporte
       Consulta.Close;
       Consulta.SQL.Clear;
       Consulta.SQL.Text := 'SELECT * FROM CONSULTAINVENTARIO()';
       Consulta.SQL.Active := True; 
       Preview; 
  finally   
    freeandnil(ri);    
  end; 
End

En este caso cuando creas 2 quickreports (por pulsar el boton 2 veces), Delphi le asignará los nombres (propiedad name) "TRInventarios_1" y "TRInventarios_2", por tanto ya no da el error.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita