error 7 - memory low

31/07/2003 - 22:57 por Luis Cabrera Aldui | Informe spam
Hola a todos espero puedan responderme rapidamente porq lo necesito, tengo
un sistema q esta echo en visual basic 6.0 sp 5, trabajo con bd access
resulta q mientras se va trabajando en el sistema de un momento a otro sale
el error 7 memoria insuficiente, al parecer mientras avanza el trabajo en el
sistema no libera memoria, a q se puede deber este error y cual es la
solucion mas viable, espero me puedan responderlo mas pronto posible gracias


Luis Orlando Cabrera Aldui
ealdui@hotmail.com
aldui@yahoo.com.ar

Preguntas similare

Leer las respuestas

#6 Norman A. Armas
01/08/2003 - 03:23 | Informe spam
No ganas nada con intentar poner un formulario a Nothing desde dentro del
formulario. Tendrías que escribir "Set Me = Nothing", que es


sospechosamente
parecido a un intento de suicidio, con el agravante de que nunca dará
resultado.



Señor Leonardo, disculpe que discrepe con usted, pero esa forma es
completamente correcta siempre y cuando se llame al formulario directamente
sin instanciarlo, de hecho es como debe de usarse para que funcione en ese
escenario.
El escenario que tu planteas es correcto pero para cuando se usa OOP, en
caso contrario la via es esa.
No es aconsejable pero es la forma siempre y cuando se llame a un formulario
directamente sin instanciarlo antes.
Y como esa es una de las posibilidades que nos da nuestro viejo VB , pues es
correcta.

Private Sub Form_Unload(Cancel As Integer)
Set Form1 = Nothing
End Sub

Saludos, de un sincero amigo suyo

Norman
LVP/MOP




"Leonardo Azpurua" <l a z p u r u a g (arroba) c a n t v (punto) n e t>
wrote in message news:

"Luis Cabrera Aldui" escribió en el mensaje
news:
> los descargo no los oculto es mas en el unload del formulario pongo "set
> frm=noting" de igualmanera hago con los recordset "set Rs=noting" ahora


no
> se si funciona el noting o no
> Luis Orlando Cabrera Aldui

Hola, Luis:

Dices que en Unload del formulario pones "Set frm = Noting"?

Estás trabajando con Option Explicit? Si no estás haciédolo, comienza tan
pronto como puedas.

No ganas nada con intentar poner un formulario a Nothing desde dentro del
formulario. Tendrías que escribir "Set Me = Nothing", que es


sospechosamente
parecido a un intento de suicidio, con el agravante de que nunca dará
resultado.

La secuencia para utilizar un formulario es:

Set frm = New frmClass
With frm
... ...
End With
Unload frm
Set frm = Nothing

De todas maneras, no debe ser eso: hay que escribir un código


ingeniosamente
perverso para impedir que los objetos se destruyan, bien porque se sale


del
ámbito de vida de todas sus referencias, bien porque se asigna una nueva
referencia a la variable que contenía la referencia anterior.

Lindas maneras de quedarse sin memoria son las listas doblemente


enlazadas,
o las estructuras de tipo árbol bidireccional, en las cuales un objeto A
tiene una referencia a un objeto B que tiene una referencia al objeto A.


Si
no limpias ese tipo de estructura cuidadosamente, acabas con unas
referencias circulares que impiden la destrucción de los objetos. Asignar


a
las referencias externas de tales estructuras nuevas referencias, sin
limpiar las anteriores, es una forma segura de quedarse sin memoria a


corto
plazo.

Me parece recordar que hace unos años, cuando comencé con VB, tenía una
aplicación que declaraba unos objetos de tipo Recordset globales (DAO
3.5/Access 97). Cuando cerraba uno de ellos, escribía


"objRecordset.Close",
y para abrirlos nuevamente escribía "Set objRecordset > dbHandle.OpenRecordset(..)". En teoría, al asignar el nuevo objeto a la
misma variable, la referencia anterior se perdía, posibilitando así la
destrucción del recordset cerrado. En la práctica, sin embargo, hasta que


no
agregué "Set objRecordset = Nothing" despues de llamar a Close sobre el
mismo objeto, la aplicación no dejó de cascar cada veinte o treinta


minutos
(despues de exhibir un pésimo comportamiento durante varias operaciones).

Como norma general, todos los objetos deben ser explícitamente destruídos
tan pronto como terminen de cumplir su misión.

Otra opción es que puedas estar utilizando algún componente "de mala
calidad", como una DLL que reclame memoria del sistema (con cosas como
GlobalAlloc) y que luego no la devuelva como Dios manda (los sistemas
operativos tienden a no ser tan amables y comprensivos como VB). Pero como
no nos cuentas qué es lo que estás haciendo o utilizando, no podemos
adivinar. Las funciones que devuelven cadenas son las primeras


sospechosas.

En todo caso, si de algo puedes estar seguro es que si tu memoria se está
reduciendo es porque estás bebiendo en exceso.. (perdón, no pude resistir


la
tentación), quiero decir, porque no estás haciendo lo necesario para
liberarla cuando ya no la necesitas.

Salud!

Leonardo
[MS MVP - VB]


Respuesta Responder a este mensaje
#7 Leonardo Azpurua
01/08/2003 - 04:24 | Informe spam
"Norman A. Armas" escribió en el mensaje
news:
Señor Leonardo, disculpe que discrepe con usted, pero esa forma es
completamente correcta siempre y cuando se llame al formulario


directamente
sin instanciarlo, de hecho es como debe de usarse para que funcione en ese
escenario.
El escenario que tu planteas es correcto pero para cuando se usa OOP, en
caso contrario la via es esa.
No es aconsejable pero es la forma siempre y cuando se llame a un


formulario
directamente sin instanciarlo antes.
Y como esa es una de las posibilidades que nos da nuestro viejo VB , pues


es
correcta.

Private Sub Form_Unload(Cancel As Integer)
Set Form1 = Nothing
End Sub



Hola, Norman:

Pues si tu lo dices, cierto debe ser. Se que no produce ningún tipo de
error, pero ignoraba que produjera algún efecto.

Aunque tambien presupone, dentro de la forma, que está siendo llamada
mediante Form1.Show (o mediante el aserto de su propiedad Visible). No
constituye eso, en alguna medida, una mala práctica de implementación?

Salud!

Leonardo
[MS MVP - VB]
Maicrosoft LVP - MOP Certified
Respuesta Responder a este mensaje
#8 Norman A. Armas
01/08/2003 - 14:25 | Informe spam
. No constituye eso, en alguna medida, una mala práctica de implementación?



Exactamente, al final usted y un servidor siempre nos ponemos de acuerdo.
:-)

Desde luego que una buena practica de implementacion es con OOP pero
lo que decia:

> El escenario que tu planteas es correcto pero para cuando se usa OOP, en
> caso contrario la via es esa.
> No es aconsejable pero es la forma siempre y cuando se llame a un
formulario
> directamente sin instanciarlo antes.
> Y como esa es una de las posibilidades que nos da nuestro viejo VB ,


pues
es
> correcta.



=Saludos,

Norman
Maicrosoft LVP / MOP Certified

http://www.apolloships.com/
-

"Leonardo Azpurua" <l a z p u r u a g (arroba) c a n t v (punto) n e t>
wrote in message news:

"Norman A. Armas" escribió en el mensaje
news:
> Señor Leonardo, disculpe que discrepe con usted, pero esa forma es
> completamente correcta siempre y cuando se llame al formulario
directamente
> sin instanciarlo, de hecho es como debe de usarse para que funcione en


ese
> escenario.
> El escenario que tu planteas es correcto pero para cuando se usa OOP, en
> caso contrario la via es esa.
> No es aconsejable pero es la forma siempre y cuando se llame a un
formulario
> directamente sin instanciarlo antes.
> Y como esa es una de las posibilidades que nos da nuestro viejo VB ,


pues
es
> correcta.
>
> Private Sub Form_Unload(Cancel As Integer)
> Set Form1 = Nothing
> End Sub

Hola, Norman:

Pues si tu lo dices, cierto debe ser. Se que no produce ningún tipo de
error, pero ignoraba que produjera algún efecto.

Aunque tambien presupone, dentro de la forma, que está siendo llamada
mediante Form1.Show (o mediante el aserto de su propiedad Visible). No
constituye eso, en alguna medida, una mala práctica de implementación?

Salud!

Leonardo
[MS MVP - VB]
Maicrosoft LVP - MOP Certified


Respuesta Responder a este mensaje
#9 Luis Cabrera Aldui
01/08/2003 - 15:20 | Informe spam
bueno gracias a todos por la ayuda prestada, el ambiente en donde se
desarrolla es en lineas generales este:
pentium II, 64 mb, win 98 se.
ahora lo que me han dicho por ahi y espero una confirmacion departe de todos
los entendidos es que el nothing, no funciona como deberia y no libera
memoria de acuerdo a lo que en teoria se dice, y si utilzo Option Explicit,
y tambien me han hablado de que un sistema no puede soportar mas 5000 lineas
les comento que tengo en el proyecto, 100 formularios y 10 modulos, en lo
que trabajo ahora es bajar la cantidad de modulos y lineas que no utilizo,
ojala puedan ayudarme


Luis Orlando Cabrera Aldui


Respuesta Responder a este mensaje
#10 Victhor
02/08/2003 - 11:12 | Informe spam
Una duda: ¿El programa lo estas corriendo en la máquina q tiene montado Vb6
y Sp5 o estas ejecutando el .exe en otra máquina sin Vb6?


"Luis Cabrera Aldui" escribió en el mensaje
news:
Hola a todos espero puedan responderme rapidamente porq lo necesito, tengo
un sistema q esta echo en visual basic 6.0 sp 5, trabajo con bd access
resulta q mientras se va trabajando en el sistema de un momento a otro


sale
el error 7 memoria insuficiente, al parecer mientras avanza el trabajo en


el
sistema no libera memoria, a q se puede deber este error y cual es la
solucion mas viable, espero me puedan responderlo mas pronto posible


gracias


Luis Orlando Cabrera Aldui




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida