FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
error.. out of memory...
hola a todos los foristas again..
hago una consulta muy larga con union, left join, etc, etc, de varias tablas, unida con un while do, ademas de eso hay otro while do repitiendo el proceso otra vez, y hay impresiones de reportes, llena como unas 15 variables, en fin..
bueno se que no es la manera, pero trato de poner mas bien es la estructura porque el codigo ni ya me acuerdo que hace, jeje, y cuando voy en el while do por el registro 20 sale en delphi out of memory y se cuelga la maquina... ha manera de liberar memoria, o liberar algo para que no consuma tanto, porque abro el administrador de tarea y veo que la aplicacion va 100.000 kb, y eso no es factible... gracias y si ncesitan algo mas me avisan por favor y ademas ¿cual es la causa de ese error? tambien me da otro error access violation at address 000a0d20. read of address 000a0d20 uso delphi 6 y firebird 1.5 Última edición por CarlosHernandez fecha: 06-03-2007 a las 19:50:37. |
#2
|
||||
|
||||
Pues supongo que habría que redefinir la consulta.
Tratar de evitar a toda costa el clásico "Select *". Que cada línea de tu consulta este en su propia línea "consulta2.sql.add(" Fuera de eso y sin más detalles, me he quedado sin ideas
__________________
|
#3
|
||||
|
||||
El "out of memory" queda claro de qué es ¿no?. Yo creo que estas metiendo la gamba por ahí en la creación de algunos componentes.
No lo achacaría a la cantidad innerjoins... puesto que eso es trabajo de Firebird, lo que sí miraría es la cantidad de registros que devuelve.... aunque para ser un informe no creo que devuelva 300.000 registros (por decir un número alto). Total, que debe mirarse el código exacto para decir algo. El access violation es por acceder a un objeto que ya no está en memoria porque se ha llamado a .Free Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#4
|
||||
|
||||
codigo
la cuestion es la siguiente, yo con este codigo realizo la union de varios campos, de una tabla de personal, y otra de horas, validaqndo todo, y haciendo una validacion solo para que me tome 1 entrada y ultima salida por dia, todo el mes para imprimirlo en un reporte, y el union lo uso para pasar el registro que no este en la tabla hora ejmeplo, un sabado que no tenga asistencia, lo pone como registro vacio, para vizualizarlo en el reporte, y se vean los 31 dias del mes. ah tambien tengo fotos dentro de la bases de datos
este codigo da perfecto, pero cuando lo ejecuto en un while do para que se haga 120 veces obvio que consume mucha memoria Última edición por CarlosHernandez fecha: 06-03-2007 a las 20:56:59. |
#5
|
||||
|
||||
Pues hombre, si e un código que ya ni tú entiendes y te produce errores aquí y allá, ¿no sería más adecuado que lo revisaras con detalle para ver qué pasa? ¿O prefieres poner aquí el código para que nosotros te lo revisemos?
// Saludos |
#6
|
||||
|
||||
ya lo coloque, y lo puse tal cual sin modificaciones....
|
#7
|
||||
|
||||
Solo por tirar una posibilidad:
donde tienes esta asignación:
primero pregunta si el objeto esta disponible porque de no estarlo ahi puede dar un access violation... ponle una condición antes:
Aunque la verdad esta bastante mal planteado este procedimiento... en tu lugar trataria de hacer un Procedimiento Almacenado que hiciera todos esos calculos y solo me devolviera los datos que me interesan... siempre va a ser mas eficiente... Última edición por xander fecha: 06-03-2007 a las 22:33:45. |
#8
|
||||
|
||||
es la asignacion de un paramatro, alli asigno el valos del parametro con el campo del registro de la consulta directamente, ibquerypersonal es un ibquery, le hago un select y de alli la asignacion, y lo tengo despues de la consulta sql,
que funcion tiene eso??? como trabaja? |
#9
|
||||
|
||||
Cita:
como empiezo por lo menos.....? |
#10
|
||||
|
||||
Cita:
Si por alguna razón tu ciclo nunca agrega la linea de SQL que referencia a ese parámetro, al ejecutar esta linea te va a dar un precioso "Access Violation"... Pero hasme caso... replantea lo que estas haciendo ahi como un stored procedure en la base de datos y te vas a evitar tambien que en un determinado momento la consulta se haga exageradamente grande, lo cual no es para nada deseado y además innecesario. Igual y así matas el error del Out Of Memory ese que muy probablemente se deba al tamaño de la consulta SQL que estas queriendo pasar. |
#11
|
||||
|
||||
Cita:
|
#12
|
||||
|
||||
Cita:
Cita:
__________________
|
#13
|
||||
|
||||
Cita:
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Me aparece el error "Insufficient memory for this operation." | ilichhernandez | Varios | 5 | 23-07-2010 18:48:16 |
Error :Insufficient memory for this operation | Alfredo | Varios | 6 | 22-12-2004 21:09:30 |
Juego Memory | Xema | OOP | 1 | 16-09-2004 13:59:24 |
insificient memory | fabriciof | Conexión con bases de datos | 1 | 26-04-2004 20:03:29 |
como evitar el error: insufficient memory for this operatiion | click | Varios | 2 | 10-11-2003 07:03:11 |
|