Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Como corregir un error de access violation en delphi... (https://www.clubdelphi.com/foros/showthread.php?t=27797)

uper 30-11-2005 22:30:04

Como corregir un error de access violation en delphi...
 
saludos a todos.

tengo una duda y no se que hacer, resulta que estoy llevando un proyecto en el cual tengo un relacion maestro-detalle en interbase, y llevo dos detalles, ahora que estoy realizando pruebas me da un error de access violation at address 0048AF8B y no me graba los registros en los detalles ni siquiera.
Anteriormente en otra forma me dio un error parecido, y tenia que buscar en Searh/find error y se iba directo al error, y era de esperar que llamaba a otra tabla, me equivoque.

bueno, me sucedio lo mismo con un error de access violation y ahora sabiendo que hacer corri el programa pero me da una pantalla con el titulo CPU y divididos con varias pantallas por decirlo asi en donde tiene numero y letras de memoria algo por el estilo, reinie la maquina y sigue en lo mismo.
este error me da cuando escribo en la dbgrid algun numero que esta referenciado a otra tabla (ID.) y me muevo de registro para actualizarlo.

Uso los Ibdataset y estan llenos las sentencias sql.

La verdad no se que hacer por que no me habia pasado algo asi, que puedo hacer estoy desesperado

les agradesco, gracias.

marcoszorrilla 30-11-2005 22:57:59

Ese error es típico de estar refiriéndose a un componente que aún no se ha creado, o que ya se ha destruido. Tendrás que ir mirando paso a paso hasta dar con él, por ejemplo puedes desactivar momentaneamente los controles o componentes sospechosos del error y puede ser que en momento dado logres que te funcione al tener cierto control desactivado.

También puedes probar con una ejecución paso a paso, así sabras en que línea se produce el error.

Si lo sospechoso son líneas de código coméntalas momentaneamente para desactivarlas, puedes utilizar
//ShowMessage('Desactivada');
o si son varias líneas las colocas entre llaves {desactivado}

Bueno a ver si hay suerte, ya nos dirás donde estaba el gazapo.

Un Saludo.

rastafarey 01-12-2005 15:09:14

Resp
 
Como te dicen anteriormente es un acceso a una zona d emoria que no existe.
Osea estas accediendo a un objeto que no existe.

Como vreificar.

En cada lugar donde hagaas llamad ala componente
Código Delphi [-]
if comonente <> nil Then...
Y si no tienes ni la mas puta idea de quien te da el error activa el las excepciones.
En el menu Tools/debug option/Languaje exception y chequea stop on delphi exception.

Y luego cuando te de la violacion de memoria vas al menu seach/find error y escribes la direccion d ememoria que te dice el mensaje de vilolacion y esta se ubicara en la line ecaxta dond eocurrio la violacion.

Y si esto no te sirve entonces tendras que correr copn F7 paso a paso para ver donde se viola la memoria.

Pero si esto no te sirve ve a la iglesia y pidele un milagro a algunos de los antos.

uper 01-12-2005 15:53:14

ok, lo que hice es quitar de nuevo los dos BDgrid que son mis detalles y ponerlos de nuevo y como en una celda doy F3 o tengo seleccionada la opcion cbsEllipsis para abrir la forma y traer el ID cambie la forma de pasar el valor al detalle y ya no me salio el error,
ahora comienzo a capturar en la dbgrid los datos y me arroja por decirlo el resultado que es precio, descripcion y no me graba los cambios,
luego me cambio a la otra dbgrid y comienzo a capturar los datos me arroja los datos de precio y elemento_descripcion y tampoco me los graba en la base de datos.

cuando se capturan en la dbgrid me muevo al siguiente registro para que acepte los cambios.

Por que no me acepta los cambios, es evidente que desde el Ibadmin3 donde creo mis tablas y todo eso.. si me graba los registro y los cambio que haga, es comun que pase esto en programa ?

Que puedo hacer ya grite de desesperacion.

gracias.

rastafarey 01-12-2005 16:15:22

Resp
 
Perdon el problema es una exception o es un grind o es un problema de insert o de edit o de un commit o de que es por fin.

Haber si te entiendo.

Casimiro Notevi 01-12-2005 19:34:24

El problema es que no sabe cuál es el problema, está un poco perdido y no sabe qué hacer.

Me temo que tendrás que ir despacio, poco a poco, simplificando las cosas, comentando y así ir descartando cosas hasta encontrar el causante.

Tómate una buena jarra de tila y coge la lupa de detective... ;)

uper 01-12-2005 22:12:08

saludos

Bueno, Primero me salio un error de access violation, ya encontre por que me dada ese error, ahora cuando yo agrego registro en la DBgrid me los agrega y en ese momento los puedo modificar, pero si me salgo de la forma no me actualiza las tablas que tengo como detalle.

tengo las sentencias llenas de instrucciones sql para agregar, modificar borrar y selecionar y refrescar.

como los eventos para actualizar en las tablas, onnewrecord, onafterpost, afterdelete, aftercancel y uso los Ibdataset.

El problema es que no me guarda los registros, solo en la tabla maestra que tengo !.
Pareciera que no le he escrito codigo a los eventos.
Puedo agregar los registros directamente desde el Ibadmin que uso.

vtdeleon 01-12-2005 22:42:33

SAludos

Deber de hacer commit en la transaccion para poder guardar los cambios

Si usas table y tienes la propiedad CacheUpdate habilitada debe hacer tambien un ApplyUpdate

uper 03-12-2005 00:45:44

saludos a todos,

Uso el componente IBdataset con interbase 6.0, como no me registra los cambios en las tabla de la base de datos, quite los componentes ibdataset y los volvi a enlazar y llenar las propiedades sql-insert, update, refresh, select. y eventos, Listo.

Ahora agrege un regsitro en mi detalle directamente desde el ibadmin, pero me doy cuenta que en el programa puedo ver esos registros y al actualizarlos me los acepta temporalmente pero al moverme al siguiente registro desaparecen.

Código PHP:

yo confirmo los cambios asiIbDetPedido.Transaction.CommitRetaining;
                                              
IbDetPedido.refresh

en los eventos OnAfterPost
afterDelete 

Que puedo hacer si en la DBgrig no me los pasa a las tablas de la base de datos, Yo me refiero a las tablas en donde estan los metadatos.
gracias, agradeceria una opinion ya que lo hice dos veces pero no encuentro por que no graba los cambio.

Gracias club.

Casimiro Notevi 03-12-2005 21:10:05

No estarás mirando otra base de datos?


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

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