none
Memoria Insuficiente. RRS feed

  • 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?

    lunes, 19 de noviembre de 2012 18:33

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

    martes, 20 de noviembre de 2012 2:27
  • Hola,

    Y para que los pasas a una variable si la consulta a la base te devuelve un recordset con los datos ?.

    Victor Koch

    martes, 20 de noviembre de 2012 13:38
  • 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.
    martes, 20 de noviembre de 2012 21:04
  • 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

    martes, 20 de noviembre de 2012 21:09
  • 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

    martes, 20 de noviembre de 2012 21:44
  • Puede ser el tipo de variable, creo que cada una tiene un límite máximo.

    Un saludo y suerte.

    viernes, 7 de diciembre de 2012 17:43
  • 2012110802

    Dos razones del porque usar un Recordset en lugar de una variable tipo Variant:

    1. 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.
    2. 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.
    3. 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.

    sábado, 8 de diciembre de 2012 21:18