Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-02-2008
Dark_RavenM Dark_RavenM is offline
Miembro
 
Registrado: dic 2007
Posts: 25
Poder: 0
Dark_RavenM Va por buen camino
Error de Eaccessviolation in module

Tengo una aplicación que tiene el siguiente codigo:

Código Delphi [-]
procedure TfrmRBSytemsSql.ImprimePdf(vpTabla, vpClaveFactura, vpNumFactura:string);
// La impresion pdf automatica no se pone en multischemas porque se abren/cierran queries de acuerdo a c/schema y configuración.
var
  vltext : string;
begin
  vltext := 'SELECT * FROM '+vptabla+' WHERE CLAVEFACTURA = '''+vpClaveFactura+''' AND NUMFACTURA = '''+vpNumFactura+'''';
  try
    with DModmain do
    // Los quieries se usan como están definidos en dmodmain para que se pueda hacer la impresión.
    begin
      if vptabla = 'MIMPOMAT' then
      begin
        QIMa.Sql.clear;
        QIMa.Sql.Add(vltext);
        QIMa.Open;
        if QIMa.Isempty then exit;
      end
      else
        if vptabla = 'MIMPOMAQ' then
        begin
          QIMq.Sql.clear;
          QIMq.Sql.Add(vltext);
          QIMq.Open;
          if QIMq.Isempty then exit;
          QMaq.Open;
          QSeM.Open;
          QSEa.Open;
          QAcc.Open;
        end
        else
          if vptabla = 'MEXPOPT' then
          begin
            QEPt.Sql.clear;
            QEPt.Sql.Add(vltext);
            QEPt.Open;
            if QEPt.Isempty then exit;
          end
          else
            begin
              QEMq.Sql.clear;
              QEMq.Sql.Add(vltext);
              QEMq.Open;
              if QEMq.Isempty then exit;
              QEMaq.Open;
              QSeE.Open;
              QEAc.Open;
              QESac.Open;
              QFdaEq.Open;
            end;
      if frmImprimirfacturaSql = nil then
        Application.CreateForm(TfrmImprimirfacturaSql, frmImprimirfacturaSql);
      with frmImprimirFacturaSql do
      begin
        vgdesde := 1;  // Variable para que no se muestre la pantalla de seleccion del documento a imprimir
        if vptabla = 'MIMPOMAT' then tag := 1;
        if vptabla = 'MIMPOMAQ' then tag := 2;
        if vptabla = 'MEXPOPT'  then tag := 3;
        if vptabla = 'MEXPOMAQ' then tag := 4;
        FormShow(nil);
        ckbFacturaMexicana.Checked := False;
        ckbDescargas.Checked := False;
        ckbFraccionA.Checked := False;
        ckbSumary.Checked := False;
        ckbFacturaAmericana.Checked := True;
        BitBtn2.Click;
        try
          vlPaginas := inttostr(vgPaginas);
        except
          vlPaginas := '';
        end;
      end;
    end;
  finally
    vgdesde := 0;
    if frmImprimirfacturaSql <> nil then
    begin
       frmImprimirfacturaSql.free;
       frmImprimirfacturaSql := nil;
    end;
  end;
end;

pero me marca un error en frmImprimirfacturaSql.free;
dice que exception Eaccessviolation in module


alguien sabe que problema podria ser?

Última edición por Dark_RavenM fecha: 26-02-2008 a las 17:05:49.
Responder Con Cita
  #2  
Antiguo 26-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Es muy probable que en tu código, en alguna otra parte, haya una llamada a frmImprimirFracutra.Free sin su correspondiente asignación a nil.

Por eso es preferible, en lugar de llamar directamente al método Free, valerse del procedimiento FreeAndNil.

Por cierto, te recomiendo una lectura de la guía de estilo. Comprenderás que el 95% de los posts aquí podrían titularse "problema con aplicación"... y eso no ayuda en nada a las búsquedas, que son una de las principales actividades en estos foros.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 26-02-2008
Dark_RavenM Dark_RavenM is offline
Miembro
 
Registrado: dic 2007
Posts: 25
Poder: 0
Dark_RavenM Va por buen camino
no en todo el codigo es el unico lugar en esa funcion donde se le manda crear la forma factura y donde se le da un .free, ese es el problema basicamente que no encuentro la logica
Responder Con Cita
  #4  
Antiguo 26-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Si es el único lugar, tanto if está de mas, es mejor algo como:

Código Delphi [-]
var
  frmX: TfrmX;
begin
  frmX := TfrmX.Create(nil);
  try
    HacerAlgoCon(frmX);
  finally
    frmX.Free;
  end;
end;

Que tiene ventajas:
  • Al usar una variable local, se asegura que sea el único lugar del programa donde se tiene acceso a ella, sin efectos colaterales en otros sitios.
  • garantiza que el recurso asignado es liberado al usar try/finally

Si sigue dando error, quizás en otro sitio se esté jugando a liberar recursos que pertenecen a dicho formulario, lo que daría problema en su destructor, o quizás el problema se esté dando en un evento que se dispara como parte de la secuencia de destrucción: OnClose, OnDestroy, etc.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 27-02-2008
Dark_RavenM Dark_RavenM is offline
Miembro
 
Registrado: dic 2007
Posts: 25
Poder: 0
Dark_RavenM Va por buen camino
Orale Gracias
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
Problema con aplicacion en red Crashthebig Conexión con bases de datos 4 02-04-2007 10:27:15
Aplicación MDI con LOGIN ( problema ) BlackDaemon OOP 15 07-03-2007 05:45:53
Problema con Aplicacion MDI Thales OOP 7 19-08-2005 15:31:07
Problema con mi aplicación JerS Varios 2 18-07-2005 16:33:51
Problema con aplicacion MDI wallesis OOP 5 03-01-2004 11:17:28


La franja horaria es GMT +2. Ahora son las 00:39:52.


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