FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Error AccessViolation que no consigo localizar
Tengo un formulario con los siguientes componentes :
-Tquery -dataset -dbgrid Lo que hago es hacer una sql con la query y mostrar la en el GRID , una vez alli muestro los campos y tengo un checkbox dependiendo si lo chekeas o no hace una sql o otra. Un formulario realmente sencillo La cuestión es que en el gris empiezo a “toketearlo” y cada cierto número de veces que apreto en el grid , pueden ser 10..30..40 o 2… depende…. Me sale la siguiente excepción Project Proyecto1.exe raised exception class EAccessVioaltion with message ‘Access violation at address 004032AE in module Proyecto1.exe. Read of address FFFFFFDC’. Process stopped…. Alguna vez rara vez he visto esta otra Exception EAccessViolation in module Comerciales.exe at 00000000. Access violation at address 00000000. Read of Address 00000000 Os pondria el código pero sin la sql y tal no serviria de nada ;( he debugado y debugado pero no le veo el fallo.... salu2 radge |
#2
|
||||
|
||||
Compila el código añadiendo opciones de Debug.
Una vez que estés ejecutando, prueba a ir a las opciones de Search/Find Error e introduce el primer número hexadecimal (address) a ver si por ahí aclaras algo.
__________________
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. |
#3
|
|||
|
|||
Adjunto imagen de las opciones que tengo al compilar
http://img258.imageshack.us/my.php?i...nttulo1ue9.jpg Con la dirección que me da la pongo dodne me has dicho y lo que me sale no se descifrarlo gracias , radge Última edición por radge fecha: 18-07-2008 a las 12:39:55. |
#4
|
|||
|
|||
Hola, debes tener la informacion de debug activada (project->options->compiler->debug options) para que te indique encima de tu codigo en que linea te salta la excepción. Es mas, si pones en 'tools->debugger options->Halt on delphi exceptions', y pulsas Ctrl+F3 una vez te ha saltado la excepcion (dentro del IDE), sabras cuales han sido las funciones llamadas antes de la excepcion.
|
#5
|
|||
|
|||
Cita:
Resulta que es código suyo propio , como arreglo esto ¿? gracias , radge |
#6
|
||||
|
||||
¿Tienes la pila de llamadas de ese error?
View/Debug Windows/Call Stack ¿Puedes ponerla?
__________________
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. |
#7
|
|||
|
|||
#8
|
|||
|
|||
Os pongo un eskema de lo k hace mi evento FieldChanged del wwdbgrid que como vereis es muy simple
procedure formulario1.wwDBGrid1FieldChanged(Sender: TObject; Field: TField); begin if (condicion1) then begin SQL1 (INSERT INTO) SQL2 (UPDATE) end else begin Creo un formulario para rellenar unos datos y los recibo en el formulario actual Una vez recibido los datos lo destruyo. SQL3 (INSERT INTO) SQL4 (UPDATE) end; end gracias , radge |
#10
|
|||
|
|||
Cita:
Te refieres en el onfieldchanged ? Y eso que hace exactamente ? Porque yo no tengo ningun TDBEdit. Te referias al onchange del formulario o del dbgrid ? gracias , radge Última edición por radge fecha: 21-07-2008 a las 09:15:33. |
#11
|
|||
|
|||
vaya, hubiese dicho que era dbedit. De igual manera, si, en el on fieldchange
PD : Read of address FFFFFFDC : Esto son ya las ultimas direcciones de memoria... creo que hay algo que no liberas correctamente y te va comiendo memoria. PDD : lo que hace es que evita calculos si no esta el formulario correctamente inicializado, etc...vamos, si no tiene el foco. Para evitar actualizaciones indeseadas o incontroladas mas bien. Última edición por coso fecha: 21-07-2008 a las 10:20:27. |
#12
|
|||
|
|||
if not (sender as wwDBGrid1).focused then exit;
Me dice [Error] SupVision.pas(203): Operator not applicable to this operand type En cuanto lo de la memoria ya lo pensé yo pero lo unico que creo es un formulario que luego destruyo antes de volver a utilizarlo salu2 radge |
#13
|
|||
|
|||
#14
|
|||
|
|||
if not (sender as TDBGrid).Focused ... esto interpreta a 'sender' como de la clase DBGrid (si no lo fuera, por ejemplo si sender fuese un edit, te saltaria excepcion).
Pues en el momento que te salga la excepcion (en delphi, no en el programa) aprietas Ctrl+F3, te sale el stack. La primera linea es la ultima funcion llamada, y las siguientes las anteriores. El debugger te apunta a el codigo nativo pues es alli donde salta, aunque seguramente se haya provocado en una de las tuyas :entonces miras mediante esta lista cual de tus funciones ha sido la ultima en llamarse que ha provocado el error, y en que linea. Venga, suerte a ver si lo encuentras. Última edición por coso fecha: 21-07-2008 a las 11:11:54. |
#15
|
|||
|
|||
Cita:
Entonces por eso no se donde pillar lo , porque no se lo que o donde lo esta provocando. salu2 radge |
#16
|
|||
|
|||
a eso voy... cuando te salga la excepcion, aprietas Ctrl+F3 y te sale la lista de las llamadas a funciones. Olvidandote del codigo nativo, que esta correcto, tu vas a tu funcion y veras en que linea se te ha provocado y entonces puedes deducir porque. Saludos.
Cita:
esto anterior te hara saltar la excepcion en delphi aunque la tengas en un try Cita:
Última edición por coso fecha: 21-07-2008 a las 11:29:58. |
#17
|
|||
|
|||
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 |
#18
|
|||
|
|||
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. |
#19
|
|||
|
|||
Si puedes, pon el codigo entero de
procedure formulario1.wwDBGrid1FieldChanged(Sender: TObject; Field: TField) Cita:
|
#20
|
|||
|
|||
Código PHP:
|
|
|
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 |
|