Usuario
Memoria Insuficiente.

Pregunta
-
hola...tengo una busqueda en un procedimento almacenado donde se le envian parametros de consulta pero el problema es que cuando hago una consulta en una base de datos y envia 50.000 registro para mostrar en pantalla.
Estos resultados se lo paso a una variable de tipo variant0 "ArrDatosOrden() As Variant" y es aca cuando salen mucho registro provoca el error de Memoria insuficiente
¿como se podria solucionar esto?
Todas las respuestas
-
Yo pienso que en vez de poner los registros encontrados en un array deberias de ponerlos directamente en la pantalla en un TextBox o en un ListBox o en un MsFlexGrid o en un MsHFlexGrid... si necesitas hacer una suma o calculo de un campo, lo puedes hacer antes de poner cada registro resultado en el control.
Intentalo y nos comentas como te fue.
Saludos desde Mexico.
EmmaRmz
-
-
porque despues estos datos se los envio a un array que va recorriendo los elementos y despues se lo va asignando a un vaSpreadPreview(cabe señalar que esto estaba desarrollado y por lo tanto no debo tocar esta estructura)...lo que se me ocurre es recorrer el array y contar 300 elementos y solo mostrar los primeros 300 registros.
-
A ver: tienes los datos de la consulta en un Recordset, los pasas a un array y luego recorres todos los elementos del array?
No crees que seria mejor que recorras el Recordset que ya tienes y que no te causa problemas?
Utilizas DAO o ADO? Si nos mostraras la parte del programa que te marca error podriamos ayudarte con el codigo...
Saludos desde Mexico.
EmmaRmz
-
Podrias usar el siguiente codigo:
Set AdoRes = New ADODB.Recordset AdoRes.Open sSql, AdoCon, adOpenDynamic, adLockReadOnly If Not AdoRes.EOF Then Rs.MoveFirst Linea=0 With GridOrdenes While Not AdoRes.EOF Linea=Linea+1 .MaxRows = Linea + 1: .Row = Linea .Col = 1: .Text = Trim(AdoRes!Cartera) .Col = 2: .Text = Trim(AdoRes!NroOrden) .Col = 3: .Text = Format(AdoRes!Fecha,"dd/mmm/yyyy") '... 'y los siguientes campos de tu base de datos... '... .Col = 14: .Text = Trim(AdoRes!SafeAccount) .Col = 15: .Text = Trim(AdoRes!DEAG_ISO_BANK_CODE) AdoRes.MoveNext Wend End With
para llenar la vista previa... o tambien podrias usar este codigo para poner los datos en un MsFlexGrid y que un boton IMPRIMIR y/o EXCEL recorran los datos del grid y no los datos de un array...
Saludos desde Mexico.
EmmaRmz
-
-
2012110802
Dos razones del porque usar un Recordset en lugar de una variable tipo Variant:
- Si se trata de hacer validaciones, es mejor utilizar el mismo recordset o utilizar otro recordset.. ya que se te hará mas fácil recorrer columnas y registros.
- Tipo de datos Variant – Puede tener cualquier tipo de datos, pues deja que Visual Basic encuentre la mejor forma de guardar datos. Pos esa razón, toma más memoria y hace los programas más lentos que si se usan los otros tipos de datos.
- Los recordset no tienen limitantes en cuanto a capacidad.
Atte.
En este mundo hay sólo dos tragedias: una es no obtener lo que se quiere; la otra es obtenerlo. Esta última es la peor es una verdadera tragedia.