Visual Basic - Run-time error '28': Out of stack space

Life is soft - evento anual de software empresarial
 
Vista:

Run-time error '28': Out of stack space

Publicado por alejandro (5 intervenciones) el 03/03/2003 21:34:38
Desde una aplicacion vb llamo verias veces a un reporte de
crystal 4.0 y en forma aleatoria me tira este error

Run-time error '28':
Out of stack space

Ya he recorrido mucho articulos, pero no logro dar con al
solucion de este problema.

Si alguien puede orientarme. Estoy sobre un w2k
professional con vb 6.0

Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Run-time error '28': Out of stack space 1/2

Publicado por fernando.gomez (143 intervenciones) el 03/03/2003 23:32:43
Uy hermano, estamos en problemas.

Ese error quiere decir que te acabaste la memoria stack. Tus programas emplean dos tipos de memoria: el stack y el heap. Para efectos practicos en VB, aqui es donde se declaran las variables que precedes con New y se almacenan valores por referencia.

El stack, por el contrario, es donde se almacenan valores en si. Cada vez que declaras una variable, esta te ocupa determinados bytes de acuerdo a las caracteristicas de estas. Asi mismo pasa con los procedimientos.

Estas son las posibles soluciones:

+ Declara todas las variables de un tipo en especial. Es decir, haz esto:
Dim var As String
en vez de esto:
Dim var
Si no especificas el tipo de variable, VB asume que la declaras de tipo Variant. Una variable Integer, por ejemplo, te gasta 1 byte, mientras una variant son 16 o 22 bytes si la utilizas con numeros o letras, respectivamente. Asi, trata de emplear lo menos posible los Variants.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Run-time error '28': Out of stack space 2/2

Publicado por fernando.gomez (143 intervenciones) el 03/03/2003 23:35:21
+ Trata de declarar tus variables a nivel modulo. Es decir, trata de emplear apropiadamente variables de tipos Public y Privates; tambien puedes emplear Statics para evitar la repeticion de variables.

+ Para llamar a una funcion o una subrutina, y no te interese el valor de retorno, emplea Call.

+ No anides muchas funciones/subrutinas, ya que VB no tiene buen soporte para ello.

+ Cada vez que pasas una variable por valor, se crea una copia de dicha variable en el Stack. Emplea entonces ByRef en vez de ByVal en las funciones:
Public Function func (ByRef var1 As String)
El problema es que cuando la pasas por referencia, se almacena en el Heap una copia a esa referencia. Cuidado con tus manejos de memoria.

+ Siempre que emplees alguna variable de tipo objeto, no se te olvide eliminarla con
Set obvar = Nothing

+Si lo anterior no funciona, comprate una maquina con mejores caracteristicas, o cambiate a C++.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Run-time error '28': Out of stack space

Publicado por Pedro Luis (878 intervenciones) el 04/03/2003 17:25:20
Después de los excelentes consejos de Fernando me atrevo a añadir
Si tienes varios informes usa un solo control de Crystal y reutilizalo con DataFiles y ReportFileName.
Usa junto a un Timer el dbEngine.idle DBRefreshCache para liberar memoria
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Run-time error '28': Out of stack space

Publicado por Alejandro (5 intervenciones) el 04/03/2003 17:55:44
Muchas gracias a TODOS.. !

Voy a probar lo que me dicen.
Lo unico que no tengo claro es lo que me comenta Pedro Luis, con respecto al Dbengine.idle y dbrefreshcache ?

Esto se utiliza para liberar memoria? donde puedo leer un poco mas de esto, porque no se como implementarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar