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 22-07-2008
radge radge is offline
Miembro
 
Registrado: may 2008
Posts: 147
Poder: 19
radge Va por buen camino
else if (FilaCheck = 'N') then
if (var1= var2) then begin
botoseleccionat := MessageDlg('Estas seguro que quieres borrar las unidades servidas ?',mtCustom,
[mbYes,mbNo], 0);
if botoseleccionat = mrYes then begin
cadenaSQL := 'update sql';
ModuloDatos.Ejecutar_SQL(cadenaSQL);
cadenaSQL := 'update SQL';
ModuloDatos.Ejecutar_SQL(cadenaSQL);
try
query_supvision.Close;
query_supvision.Open;
except
showmessage('Error abriendo la base de datos');
end
end
end


He debugado y debugado y uno de las veces al mirar el "call stack" me marca en esta posición , pero yo no le veo nada a esta linea de codigo.

gracias radge
Responder Con Cita
  #2  
Antiguo 22-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
debugar es fastidioso , y hacerlo online, un poco mas . Otro truquito que se hace es ir comentando lineas, probando, comentando lineas, ... hasta que no te salte. Es raro, porque esa linea de codigo no tiene nada ciertamente...a no ser que, como deciamos, ya no tengas memoria ni para llenar un TModalResult...No se si cargas un exceso de datos por algun otro lado que no liberas, alguna form que creas varias veces en tiempo de ejecucion, querys que se crean y llaman multitud de veces (ejecutar_SQL) sin luego liberarlas,bitmaps,...ni idea, deberia repasar todo el codigo. Si tienes alguna otra duda, por eso, no dudes en ponerla aqui. Venga, saludos, i sort!

PD : prueba de ponerlo en otro evento que no sea el OnFieldChanged, pues ahora que pienso, si modificas la misma base de datos que se mira en el DBGrid, es probable que la llames recursivamente una y otra vez. Saludos.

Última edición por coso fecha: 22-07-2008 a las 09:31:31.
Responder Con Cita
  #3  
Antiguo 22-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 puedes, pon el codigo entero de
procedure formulario1.wwDBGrid1FieldChanged(Sender: TObject; Field: TField)

Cita:
Exception EAccessViolation in module Comerciales.exe at 00000000.
Access violation at address 00000000. Read of Address 00000000
este es otro completamente independiente, seguro
Responder Con Cita
  #4  
Antiguo 22-07-2008
radge radge is offline
Miembro
 
Registrado: may 2008
Posts: 147
Poder: 19
radge Va por buen camino
Código PHP:

procedure TfrmSupVision
.wwDBGrid1FieldChanged(SenderTObject;
  
FieldTField);
Var
   
cadenaSQL,FilaCheck,Lin_Codi,Alb_Codi,Per_Codi,accountnum,dataareaid ,
   
varDades varUnitatsRestants string;
   
Cantidad UnitatsServidesBD botoseleccionat  Integer ;
   
Marca TBookMarkStr;

begin
         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;


        if ((
Lin_Codi <> '') and (Dataareaid <> '') and (Alb_Codi <> '') and (Per_Codi <> '') and (Accountnum <> '') AND (inttostr(Cantidad) <> '') ) then begin
           
if (combobox1.text 'TODOS'then
               FreeAndNil
(Marca);
               
Marca := query_supvision.Bookmark;

        
FilaCheck := wwDBGrid1.GetFieldValue(7); 

        if (
FilaCheck 'S'then  begin
             
if (Cantidad 1then begin
                 cadenaSQL 
:= 'SQL XXXXXXXXXXX';
              
ModuloDatos.Ejecutar_SQL(cadenaSQL);
              
cadenaSQL := 'SQL XXXXXXXXX';
              
ModuloDatos.Ejecutar_SQL(cadenaSQL);
               try
                  
query_supvision.Close;
                  
query_supvision.Open;
               
except
                  showmessage
('Error al abrir/cerrar BD vuelve a intentar lo');
               
end;
             
end

             
else begin // Si hi ha més d'una unitat d'aquella linea de pedido ==> FORM NOU
                 
try
                   
Application.CreateForm (TfrmUnidadesPedidoVentafrmUnidadesPedidoVenta);
                 
except
                 
;
                 
end;
                   
frmUnidadesPedidoVenta.CarregaDades(Cantidad,UnitatsServidesBD);
                   if (
Cantidad 0) and (UnitatsServidesBD >=)then begin
                   frmUnidadesPedidoVenta
.ShowModal;
                   
varDades := frmUnidadesPedidoVenta.rebreDades;
                   
varUnitatsRestants := frmUnidadesPedidoVenta.rebreUnitatsRestants;
                      
cadenaSQL := 'SQL XXXXXXXXXXXXXXXXXX';
                      
ModuloDatos.Ejecutar_SQL(cadenaSQL);
                      
cadenaSQL := 'SQL XXXXXXXXXXXXXXXXXX';
                      
ModuloDatos.Ejecutar_SQL(cadenaSQL);
                      
query_supvision.Close;
                      
query_supvision.Open;
                  
end
                  
else begin
                     showmessage
('Error al recibir los datos');
                  
end;
              
end;
        
end
        
else if (FilaCheck 'N'then
             
if (Cantidad UnitatsServidesBDthen begin
                   botoseleccionat 
:= MessageDlg('Estas seguro que quieres borrar las unidades servidas ?',mtCustom,[mbYes,mbNo], 0);
                 if 
botoseleccionat mrYes then begin
                      cadenaSQL 
:= 'SQL XXXXXXXXXXXXXXXXXX';
                     
ModuloDatos.Ejecutar_SQL(cadenaSQL);
                      
cadenaSQL := 'SQL XXXXXXXXXXXXXXXXXX';
                     
ModuloDatos.Ejecutar_SQL(cadenaSQL);
                     try
                        
query_supvision.Close;
                        
query_supvision.Open;
                     
except
                        showmessage
('Error abriendo la base de datos');
                     
end
                end
                
else begin
                     query_supvision
.Cancel;  // refrescar
                
end;
                
end;
    
end
    
else begin
       showmessage
('Este cliente no tiene más albaranes por editar');
    
end;
      if (
combobox1.text 'TODOS'then
      query_supvision
.Bookmark := Marca;
  
end
Responder Con Cita
  #5  
Antiguo 22-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
puedes usar delphi y /delphi entre [], si es codigo delphi. Creas la form, pero en ningun momento la liberas. Yo lo haria asi:

Código Delphi [-]
var  
      f : TfrmUnidadesPedidoVenta;
begin
    ...
     try
           f := TfrmUnidadesPedidoVenta.Create(self); // corregido
           f.ShowModal;
           ...
           f.free;
     except
        ...

casi seguro que es eso

otra es marca, porque freeandnil si aun no se ha asignado (ni falta que hace)? TBookMarkStr solo es una string, por lo que en principio no te tienes que preocupar de su memoria. El access a nil es debido a eso seguro, pues la liberas y luego intentas trabajar con ella. Si quieres que tenga un valor nulo, simplemente haz marca := '' o marca := nil, pero no la liberes pues se queda desreferenciada en memoria. En tu caso, creo q no hace falta ni siquiera marca := '' pues a lo siguiente ya le das un valor concreto.

Tambien creo q te falta un bloque begin end en ComboBox1.Text = 'TODOS'



Última edición por coso fecha: 23-07-2008 a las 15:13:59.
Responder Con Cita
  #6  
Antiguo 23-07-2008
radge radge is offline
Miembro
 
Registrado: may 2008
Posts: 147
Poder: 19
radge Va por buen camino
He cambiado lo que mas dicho del bloque begin y lo de la variable.

Pero lo del formulario lo he dejado asi

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


Pero sigue dandome error os dejo la pila. gracias radge


Como veis todas las instrucciones son de código nativa menos la 1º empezando por abajo del stack , que es la marcada en rojo.


Responder Con Cita
  #7  
Antiguo 23-07-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.442
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Hay entre las llamadas del callstack algunas especiales:


Creo que eso te puede dar datos sobre el campo del error.
¿Hay algun campo en el Grid en el que esté apareciendo "N"? ¿Tal vez un booleano?
Deberías revisar si en algun momento ese campo puede no estar asignado.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 23-07-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.442
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Hay entre las llamadas del callstack algunas especiales:


Creo que eso te puede dar datos sobre el campo del error.
¿Hay algun campo en el Grid en el que esté apareciendo "N"? ¿Tal vez un booleano?
Deberías revisar si en algun momento ese campo puede no estar asignado.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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 02:32:22.


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