Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Si no fueses un profesional te diria q me pasaras el codigo para echarle un vistazo pero asi X). Me da q va por alli, por lo de forms no liberadas y vueltas a referenciar con la misma variable...ya contaras algo, saludos
Responder Con Cita
  #2  
Antiguo 23-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Esos anteriores, claro esta son de objetos o bien liberados y reusados, o bien no creados. Si, como antes, estas liberando antes de usar cosas como el TBookMarkStr, que es una string, te saldran montones de ellos.
Responder Con Cita
  #3  
Antiguo 23-07-2008
radge radge is offline
Miembro
 
Registrado: may 2008
Posts: 147
Poder: 19
radge Va por buen camino
Gracias eso del string ya lo arregle xD la verdad que llevo varios años programado pero acabo de empezar con delphi 5 en esta empresa y con un proyecto... grande que lleva varios años en desarrollo y no veas como pillo xD

gracias , radge
Responder Con Cita
  #4  
Antiguo 24-07-2008
radge radge is offline
Miembro
 
Registrado: may 2008
Posts: 147
Poder: 19
radge Va por buen camino
Código Delphi [-]
unit SupVision;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables, Wwquery, Wwdatsrc, Grids, Wwdbigrd, Wwdbgrid, 
  StdCtrls, wwdbdatetimepicker, wwdblook, Buttons, ExtCtrls , ComCtrls;

type
  TfrmSupVision = class(TForm)
    DS_supvision: TwwDataSource;
    query_supvision: TwwQuery;
    UpdateSQL1: TUpdateSQL;
    Combo_Clientes: TwwDBLookupCombo;
    query_combo: TwwQuery;
    ComboBox1: TComboBox;
    query_comboname: TStringField;
    query_comboaccountnum: TStringField;
    Label1: TLabel;
    SpeedButton2: TSpeedButton;
    Edit1: TEdit;
    Label3: TLabel;
    Shape7: TShape;
    Shape1: TShape;
    Shape2: TShape;
    BtnImprimir: TBitBtn;
    Label5: TLabel;
    wwDBGrid1: TwwDBGrid;
    procedure Combo_ClientesChange(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    { procedure Button1Click(Sender: TObject); }
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Click(Sender: TObject);
    procedure BtnImprimirClick(Sender: TObject);
    procedure Edit1Click(Sender: TObject);
    procedure wwDBGrid1TitleButtonClick(Sender: TObject;
      AFieldName: String);
    procedure wwDBGrid1FieldChanged(Sender: TObject; Field: TField);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmSupVision: TfrmSupVision;
  Field_Sorted, Sort_Type, SQL_Base: string;
  CodiClient,cadena2: String;   //Variable global per saber el codi del client
  FlagE : integer;
implementation

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

function tornarMaxID(): integer;
var cadenaSQLID : string;
query_maxID : TQuery;
begin
     query_maxID := TQuery.Create(nil);
     query_maxID.DatabaseName := Modulo_Datos.NOG_Comer.DatabaseName;
     cadenaSQLID := 'SQLLLLLLLLLLLLLLL' ;
     query_maxID.SQL.Clear;
     query_maxID.close;
     query_maxID.SQL.Add(cadenaSQLID);
     query_maxID.open;
     Result := query_maxID.Fields[0].Asinteger;
     query_maxID.Close;
     FreeAndNil(query_maxID);
end;


procedure TfrmSupVision.Combo_ClientesChange(Sender: TObject);
begin

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

      SQL_Base := 'SQL';

      if (IntToStr(length(Combo_clientes.text)) > '0') then
         SQL_Base := SQL_Base +  ' AND A.accountnum = ' + QuotedStr(CodiClient);

         if (combobox1.text <> '')  then
             if combobox1.text = 'SI' then begin
                SQL_Base := SQL_Base + ' and Check_supervisado = ' +  QuotedStr('S');
             end
             else if  combobox1.text = 'NO' then begin
                SQL_Base := SQL_Base + ' and Check_supervisado = ' +  QuotedStr('N');
             end;

      if Edit1.text <> '' then
         SQL_Base := SQL_Base + ' SQL XXXXXXXXXXXXX';

    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.SpeedButton2Click(Sender: TObject);
begin
    close;
end;

procedure TfrmSupVision.FormClose(Sender: TObject;  var Action: TCloseAction);
begin
   frmSupVision := nil;
   Action       := caFree;
end;


procedure TfrmSupVision.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_Return then
    Combo_ClientesChange (Sender);
end;

procedure TfrmSupVision.FormCreate(Sender: TObject);
begin
    Combo_ClientesChange (Sender);
    query_combo.Open;
    FlagE := 0;
end;

procedure TfrmSupVision.ComboBox1Click(Sender: TObject);
begin
    FlagE := 1;
end;

procedure TfrmSupVision.BtnImprimirClick(Sender: TObject);
begin
  Application.CreateForm (TfrmPrintPedidosSupervisados, frmPrintPedidosSupervisados);
  frmPrintPedidosSupervisados.ShowModal;
end;

procedure TfrmSupVision.Edit1Click(Sender: TObject);
begin
    FlagE := 1;
end;


procedure TfrmSupVision.wwDBGrid1TitleButtonClick(Sender: TObject;
  AFieldName: String);
begin
   Field_Sorted := AFieldName;

   if Sort_Type = 'ASC' then
      Sort_Type := 'DESC'
   else
      Sort_Type := 'ASC';

   if Field_Sorted = 'ALB_Fecha' then
       cadena2 :=  SQL_Base + ' ORDER BY A.' + AFieldName + ' ' + Sort_Type
   else if Field_Sorted = 'name' then
       cadena2 :=  SQL_Base + ' ORDER BY C.' + AFieldName + ' ' + Sort_Type
   else
       cadena2 :=  SQL_Base + ' ORDER BY LA.' + AFieldName + ' ' + Sort_Type;

   wwdbgrid1.DataSource.DataSet.Close;
   (wwdbgrid1.DataSource.DataSet as TwwQuery).SQL.Clear;
   (wwdbgrid1.DataSource.DataSet as TwwQuery).SQL.Add(cadena2);
   wwdbgrid1.DataSource.DataSet.Open;
end;


procedure TfrmSupVision.wwDBGrid1FieldChanged(Sender: TObject;
  Field: TField);
Var
   cadenaSQL,FilaCheck,Lin_Codi,Alb_Codi,Per_Codi,accountnum,dataareaid ,
   varDades , varUnitatsRestants : string;
   Cantidad , UnitatsServidesBD , botoseleccionat  : Integer ;
   Marca : TBookMarkStr;
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;
     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
              showmessage('error cargando formulario');
              end;
          end;

        FilaCheck := wwDBGrid1.GetFieldValue(7); // Si cambiem l'ordre del grid cambiar el GetFieldValue

        if (FilaCheck = 'S') then  begin
             // 1 unitat , fiquem la data i l'introduim  a la BD
             if (Cantidad = 1) then begin
                 cadenaSQL := 'SQL 111111111';
                 Ejecutar_SQL(cadenaSQL);

                 cadenaSQL := 'SQL 2222222';
                 Ejecutar_SQL(cadenaSQL);
                try
                 query_supvision.Close;
                 query_supvision.Open;
                except
                  showmessage('No se han podido aplicar los cambios en la Base de datos');
                end;
             end
             else begin // Si hi ha més d'una unitat d'aquella linea de pedido ==> FORM NOU
                   Application.CreateForm (TfrmUnidadesPedidoVenta, frmUnidadesPedidoVenta);
                   frmUnidadesPedidoVenta.CarregaDades(Cantidad,UnitatsServidesBD);
                   frmUnidadesPedidoVenta.ShowModal;
                   varDades := frmUnidadesPedidoVenta.rebreDades;
                   varUnitatsRestants := frmUnidadesPedidoVenta.rebreUnitatsRestants;
                   freeandnil(frmUnidadesPedidoVenta);

           try
                      cadenaSQL := 'SQL 1';
                      Ejecutar_SQL(cadenaSQL);
                      cadenaSQL := 'SQL 2';
                      Ejecutar_SQL(cadenaSQL);
                      query_supvision.Close;
                      query_supvision.Open;

                     except
                      showmessage('Error actualizando datos');
                   end;
               end;
        end
        else if (FilaCheck = 'N') then
             if (Cantidad = UnitatsServidesBD) then begin
                   botoseleccionat := MessageDlg('Estas seguro que quieres borrar las unidades servidas ?',mtCustom,[mbYes,mbNo], 0);
                 if botoseleccionat = mrYes then begin
                     cadenaSQL := 'SQL 1';
                     Ejecutar_SQL(cadenaSQL);

                     cadenaSQL := 'SQL2 ';
                     Ejecutar_SQL(cadenaSQL);
                     try
                        query_supvision.Close;
                        query_supvision.Open;
                     except
                        ;
                     end
                end
                else begin
                     query_supvision.Cancel;  // refrescar
                end;
                end;
    end
    else begin
       showmessage('Este cliente no tiene más albaranes por editar');
       query_supvision.Cancel;  // refrescar
    end;
      if (combobox1.text = 'TODOS') then begin
          try
          query_supvision.Bookmark := Marca;
          except
          ;
          end;
     end;
  end;
end.

Última edición por radge fecha: 24-07-2008 a las 12:38:47.
Responder Con Cita
  #5  
Antiguo 24-07-2008
radge radge is offline
Miembro
 
Registrado: may 2008
Posts: 147
Poder: 19
radge Va por buen camino
Os muestro el codigo retocado , a ver si alguien consigue ver algo que ando "borracho" de tanto mirar el mismo formulario , aki os he dejado los cambios hechos , a ver si entre todos lo vemos.


muchas gracias , radge
Responder Con Cita
  #6  
Antiguo 24-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
por ejemplo, aqui se crea, pero se libera correctamente? si no se hace, pasa lo mismo que antes...que se queda en memoria la anterior pues se usa la misma variable global para referenciarla.

Código Delphi [-]
procedure TfrmSupVision.BtnImprimirClick(Sender: TObject);
begin
  Application.CreateForm (TfrmPrintPedidosSupervisados, frmPrintPedidosSupervisados);
  frmPrintPedidosSupervisados.ShowModal;
end
Responder Con Cita
  #7  
Antiguo 24-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Thumbs up

Código Delphi [-]
function tornarMaxID(): integer;
var cadenaSQLID : string;
query_maxID : TQuery;
begin
     query_maxID := TQuery.Create(nil);
     query_maxID.DatabaseName := Modulo_Datos.NOG_Comer.DatabaseName;
     cadenaSQLID := 'SQLLLLLLLLLLLLLLL' ;
     query_maxID.SQL.Clear;
     query_maxID.close;
     query_maxID.SQL.Add(cadenaSQLID);
     query_maxID.open;
     Result := query_maxID.Fields[0].Asinteger;
     query_maxID.Close;
     FreeAndNil(query_maxID);
end;

Código Delphi [-]
            cadenaSQL := 'SQL 111111111';
            Ejecutar_SQL(cadenaSQL);         
            cadenaSQL := 'SQL 2222222';
            Ejecutar_SQL(cadenaSQL);
?, interpretais la sentencia sql? es bastante un nido de bugs esto radge

(mejor del BookMarkStr, el getbookmark, gotobookmark y freebookmark)

Código Delphi [-]
            Application.CreateForm (TfrmUnidadesPedidoVenta, frmUnidadesPedidoVenta);
            frmUnidadesPedidoVenta.CarregaDades(Cantidad,UnitatsServidesBD);
            frmUnidadesPedidoVenta.ShowModal;
            varDades := frmUnidadesPedidoVenta.rebreDades;
            varUnitatsRestants := frmUnidadesPedidoVenta.rebreUnitatsRestants;
            freeandnil(frmUnidadesPedidoVenta);

lo mismo que antes, mejor usar tal cual la f, el f := TFrmunidadesPedidoventa.create, que sea f variable local, el f.free en vez del freeandnil etc...yo crearia todas las forms asi, tal como ya te habia comentado. El error fijo q esta por estas cosas, por crear todo con variables globales y luego volviendolo a crear con el mismo nombre de variables sin liberar las anteriores. saludos ; )
Responder Con Cita
  #8  
Antiguo 25-07-2008
radge radge is offline
Miembro
 
Registrado: may 2008
Posts: 147
Poder: 19
radge Va por buen camino
Cita:
Empezado por coso Ver Mensaje
por ejemplo, aqui se crea, pero se libera correctamente? si no se hace, pasa lo mismo que antes...que se queda en memoria la anterior pues se usa la misma variable global para referenciarla.

Código Delphi [-]procedure TfrmSupVision.BtnImprimirClick(Sender: TObject); begin Application.CreateForm (TfrmPrintPedidosSupervisados, frmPrintPedidosSupervisados); frmPrintPedidosSupervisados.ShowModal; end

Esto es un boton que desde el form principal abre otro formulario , pero solo si lo llamo... que de momento esta deshabilitado asi k no creo que venga por aki , de todas formas el formulario lo tendria k destruir desde el mismo en el evento onclose no ?


Otra cosa... lo del famoso formulario

Código Delphi [-]
                   Application.CreateForm (TfrmUnidadesPedidoVenta, frmUnidadesPedidoVenta);
                   frmUnidadesPedidoVenta.enviarDadesSeguentForm(Cantidad,UnitatsServidesBD);
                   frmUnidadesPedidoVenta.ShowModal;
                   varDades := frmUnidadesPedidoVenta.rebreDades;
                   varUnitatsRestants := frmUnidadesPedidoVenta.rebreUnitatsRestants;
                   freeandnil(frmUnidadesPedidoVenta);


No creo que falle por aki , pk he borrado completamente estas lineas y sus referencias a el y sigue dando el mismo error.

Asi k seguimos buscando !

salu2 radge
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Error Raro sobre archivo "ntdll.dll" que no consigo encontrar el motivo AGAG4 Impresión 1 23-11-2007 07:11:17
localizar un registro vroa74 Conexión con bases de datos 3 17-08-2007 14:11:23
Localizar un registro alcides Varios 4 13-04-2007 20:17:27
Localizar datos con Firebird joanajj Firebird e Interbase 5 06-06-2006 00:11:42
RaveReport AccessViolation raugadel Impresión 0 03-11-2005 15:32:56


La franja horaria es GMT +2. Ahora son las 15:37:31.


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