Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problemas de escritura y demas que no consigo ver (https://www.clubdelphi.com/foros/showthread.php?t=59322)

radge 22-08-2008 16:12:11

Problemas de escritura y demas que no consigo ver
 
Buenas tengo 1 formulario desde hace tiempo que me da errores de escritura y alguna vez "X" error de "Access violation at address 00000000"
hace tiempo ya pregunté aqui y me dieron algunas pistas , pero no lo he conseguido arreglar , ahora vuelvo a poner el codigo con algunos cambios que hize , pero sigue fallando.

Gracias , radge



Código Delphi [-]
var
  frmSupVision: TfrmSupVision;
  Field_Sorted, Sort_Type, SQL_Base: string;
  FlagE : integer;
implementation

uses ModuloDatos,UnidadesPedidoVenta, PrintPedidosSupervisados;
{$R *.DFM}



procedure TfrmSupVision.Combo_ClientesChange(Sender: TObject);
begin

      if FlagE = 0 then
          CodiClient := Combo_Clientes.Lookuptable.FieldByName('campo').asstring;

      SQL_Base := 'Select XXX';

      if (IntToStr(length(Combo_clientes.text)) > '0') then
         SQL_Base := SQL_Base +  ' XXXXXXXXXX ';

         if (combobox1.text <> '')  then
             if combobox1.text = 'SI' then begin
                SQL_Base := SQL_Base + ' XXXXXXXXXX ';
             end
             else if  combobox1.text = 'NO' then begin
                SQL_Base := SQL_Base + ' XXXXXXXXXX ';
             end;

      if Edit1.text <> '' then
         SQL_Base := SQL_Base + ' XXXXXXXXXX ';
    try
      query_supvision.close;
      query_supvision.SQL.Clear;
      query_supvision.SQL.Add(SQL_Base);
      query_supvision.open;
    except
      showmessage('Error al cargar los clientes');
    end;
      FlagE := 0;
end;






procedure TfrmSupVision.wwDBGrid1FieldChanged(Sender: TObject;
  Field: TField);
Var
  Qry: TQuery;
   cadenaSQL,FilaCheck,Lin_Codi,Alb_Codi,Per_Codi,accountnum,dataareaid ,
   varDades , varUnitatsRestants : string;
   Cantidad , UnitatsServidesBD , botoseleccionat  : Integer ;
   Marca : TBookMarkStr;
   formulari : TfrmUnidadesPedidoVenta;
begin
     try
         Lin_Codi := query_supvision.FieldbyName('LIN_Codi').AsString;
         Alb_Codi := query_supvision.FieldbyName('ALB_Codi').AsString;
         Per_Codi := query_supvision.FieldbyName('Per_Codi').AsString;
         Accountnum := query_supvision.FieldbyName('accountnum').AsString;
         Dataareaid := query_supvision.FieldbyName('dataareaid').AsString;
         Cantidad := query_supvision.FieldbyName('Cantidad').asinteger;
         UnitatsServidesBD := query_supvision.FieldbyName('Unitats_Servides').asinteger;
      except
         showmessage('No se han podido cargar los datos del albarán');
         query_supvision.cancel;
      end;

         Qry := TQuery.Create (nil);
         Qry.DatabaseName := Modulo_Datos.XXXXX.DatabaseName;
         Qry.Close;
         Qry.SQL.Clear;

     if ((Lin_Codi <> '') and (Dataareaid <> '') and (Alb_Codi <> '') 
      and (Per_Codi <> '') and (Accountnum <> '')) then begin
           if (combobox1.text = 'TODOS') then begin
              try  Marca := query_supvision.Bookmark;
              except query_supvision.cancel;     end;
           end;
        try
        FilaCheck := wwDBGrid1.GetFieldValue(7); 
        except
        showmessage('Hubo un error cargando los datos del formulario');
        query_supvision.close;
        query_supvision.open;
        end;

        if (FilaCheck = 'S') then  begin
             // 1 unitat , fiquem la data i l'introduim  a la BD
             if (Cantidad = 1) then begin
                 Qry.SQL.Clear;
                 cadenaSQL := 'update XXXXXXX';
                 Qry.SQL.Add(cadenaSQL);
                 Qry.ExecSQL;

                 Qry.SQL.Clear;
                 cadenaSQL := 'Insert into XXXXXX';
                 Qry.SQL.Add(cadenaSQL);
                 Qry.ExecSQL;

                 sleep(100);
                 query_supvision.Close;
                 query_supvision.Open;
             end
             else begin 

                   Qry.SQL.Clear;
                   cadenaSQL := 'update XXXXXXXXXXX';
                   Qry.SQL.Add(cadenaSQL);
                   Qry.ExecSQL;

                   Qry.SQL.Clear;
                   cadenaSQL := 'Insert into XXXXXXXXX';
                   Qry.SQL.Add(cadenaSQL);
                   Qry.ExecSQL;

                   query_supvision.Close;
                   query_supvision.Open;
                end;
        end
        else if (FilaCheck = 'N') then
             if (Cantidad = UnitatsServidesBD) then begin
                   botoseleccionat := MessageDlg('Estas seguro XXXXXX',mtCustom,[mbYes,mbNo], 0);
                 if botoseleccionat = mrYes then begin
                     Qry.SQL.Clear;
                     cadenaSQL := 'update XXXXXX';
                     Qry.SQL.Add(cadenaSQL);
                     Qry.ExecSQL;

                     Qry.SQL.Clear;
                     cadenaSQL := 'update XXXXXXXX';
                     Qry.SQL.Add(cadenaSQL);
                     Qry.ExecSQL;

                     query_supvision.Close;
                     query_supvision.Open;
                end
                else begin
                     query_supvision.Cancel;  
                end;
             end;
        freeandnil(qry);
        end
    else begin
       showmessage('Este cliente no tiene más albaranes por editar');
       try
          query_supvision.Cancel; 
       except
          ;
       end;
    end;
      if (combobox1.text = 'TODOS') then begin
          try
           query_supvision.Bookmark := Marca;
          except
          query_supvision.close;
          query_supvision.cancel;
          end;
     end;
  end;







eduarcol 22-08-2008 19:30:35

eso quiere decir que estas tratando de modificar un objeto que no ha sido creado o que ha sido destruido.

radge 25-08-2008 11:51:39

El problema que tengo es que cuando me salta la excepción no me salta al debug del delphi , por lo que no se por donde cojer el error.

Alguna pista ?

gracias radge

radge 26-08-2008 12:38:46

He probado a substituir el

freeandnil(qry) por

Qry.free;


Pero sigue dando los errores de escritura.

salu2 radge

eduarcol 26-08-2008 14:57:14

una forma de saber es que antes de utilizar los objetos que se destruyen compruebes que esten creados con la funcion Assigned a ver si estan en memoria...

radge 26-08-2008 15:28:01

De hecho como veis solo tengo una función al cual le he puesto el assigned y siempre me da que si ,cada vez que entra a ella asi k bien.

Pero dentro del fieldchanged ese "enorme" nido de "if" que si os fijais solo son estructuras condicionales con SQL dentro no hago nada mas.

Pues creo la query al principio del todo y la destruyo al final.


La franja horaria es GMT +2. Ahora son las 12:55:07.

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