Autor Tema: Llenar Datos a un Recordset sin Base de Datos  (Leído 13213 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Llenar Datos a un Recordset sin Base de Datos
« en: Julio 16, 2011, 11:03:11 pm »
Hola
Por X motivos que no es necesario comentar, necesitaba hacer un reporte de varios registros y a partir de datos que no tengo en la BD. Por tanto tenia que conectar un RS al DataReport pero el RS no estaría conectado a ninguna BD.
Leyendo de aquí y de allá arme esto que quizá a alguien mas le pueda servir. Vamos a suponer que los datos lo tengo en un MSHFlexgrid llamado Grid1 y los quiero vaciar a un reporte, para ello hago esto:
Código: [Seleccionar]
      Set rsT = New ADODB.Recordset  'Mi rs temporal
      rsT.CursorLocation = adUseClient
     
      rsT.Fields.Append "ID", adVarChar, 5, adFldIsNullable
      rsT.Fields.Append "PRODUCTO", adVarChar, 200, adFldIsNullable
      rsT.Fields.Append "PREFERENCIA", adVarChar, 100, adFldIsNullable 
      rsT.Fields.Append "PRECIO1", adDouble
      rsT.Fields.Append "PRECIO2", adDouble
     
      rsT.Open , , adOpenStatic, adLockBatchOptimistic
   
      With Grid1
         For n = 1 To .Rows - 1
            rsT.AddNew Array("ID", "PRODUCTO", "PREFERENCIA", "PRECIO1", "PRECIO2"), _
            Array(.TextMatrix(n, 1), .TextMatrix(n, 2), .TextMatrix(n, 3), .TextMatrix(n, 4), .TextMatrix(n, 5))
         Next n
      End With
      Set Reporte.DataSource = rsT
      Reporte.Show

Los tipos de datos pueden ser: adChar, adCurrency, adDate, adDouble, adInteger, etc etc. lo pueden checar aqui:

Espero que les sirva, a mi me funciono mas rápido de lo que esperaba para un Grid de 8,000 registros.

Saludos
« última modificación: Julio 15, 2015, 10:42:17 pm por YAcosta »
Me encuentras en YAcosta.com

fx700

  • Kilobyte
  • **
  • Mensajes: 95
  • Reputación: +4/-2
    • Ver Perfil
Re:Llenar Datos a un Recordset sin Base de Datos
« Respuesta #1 en: Julio 17, 2011, 04:02:17 pm »
Los recordset's temporales son bastante utiles, lo utilizo para cargar un grid los item de una factura, buen aporte.

wolf_kof

  • Visitante
Re:Llenar Datos a un Recordset sin Base de Datos
« Respuesta #2 en: Agosto 14, 2011, 11:42:27 am »
YvanB (de cariño) me has sacado un verdadero clavo maestro, como siempre sos groso, igual extraño estar por aqui ya tengo ratos de no aportar... jejejejeje yo creo que hasta ya me despidieron jejejeje

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Llenar Datos a un Recordset sin Base de Datos
« Respuesta #3 en: Agosto 14, 2011, 03:08:34 pm »
Nada doc que va, estoy a kilómetros de los maestros del foro.

Y nadie te despidió doc, por alli de cuando en cuando nos sacamos la lengua pero seguimos siendo "patas".

patas = amigos, colegas, causas, chocheras.
Me encuentras en YAcosta.com

rodhzuniga

  • Bit
  • Mensajes: 5
  • Reputación: +0/-0
    • Ver Perfil
Re:Llenar Datos a un Recordset sin Base de Datos
« Respuesta #4 en: Enero 18, 2017, 12:58:35 am »
Aunque ese post tiene años, eso me salvó un proyecto hoy, Gracias Yacosta

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Llenar Datos a un Recordset sin Base de Datos
« Respuesta #5 en: Enero 19, 2017, 01:44:51 am »
Que bueno, me alegra mucho.


Saludos.
Me encuentras en YAcosta.com

rodhzuniga

  • Bit
  • Mensajes: 5
  • Reputación: +0/-0
    • Ver Perfil
Re:Llenar Datos a un Recordset sin Base de Datos
« Respuesta #6 en: Enero 23, 2017, 07:28:06 pm »
Hola yacosta, fijate que use tu còdigo y lo asocie a unListview, y todo funciona perfecto, pero cuando uso una variable en lugar de una fila de listview, me aparece un error, y no logor pasar de ahí

Código: [Seleccionar]
Private Sub demo()
    Dim rsT As New ADODB.Recordset
    Dim n As Integer
    Dim sDate As String
    Dim nFolio As Integer
      Set rsT = New ADODB.Recordset
      rsT.CursorLocation = adUseClient
      rsT.Fields.Append "can", adDouble ' adVarChar, 5, adFldIsNullable
      rsT.Fields.Append "pro", adVarChar, 50, adFldIsNullable
      rsT.Fields.Append "pre", adDouble ' adVarChar, 100, adFldIsNullable
      rsT.Fields.Append "importe", adDouble
      rsT.Fields.Append "fecha", adDate
      rsT.Fields.Append "ticket", adInteger
      sDate = Format(lblfecha.Caption, "yyyy-mm-dd")
      nFolio = Format(lblTicket.Caption, "######")

      rsT.Open , , adOpenStatic, adLockBatchOptimistic
      With ListView1
         For n = 1 To ListView1.ListItems.Count '.Rows - 1
            rsT.AddNew Array("can", "pro", "pre", "importe", "fecha", "ticket"), Array(ListView1.ListItems(n).SubItems(2), ListView1.ListItems(n).SubItems(3), ListView1.ListItems(n).SubItems(4), ListView1.ListItems(n).SubItems(5),sdate,nfolio)
         Next n
      End With
      Set reporteCompras.DataSource = rsT
      'reporteCompras.Show
      'reporteCompras.PrintReport False, rptRangeFromTo, 1, 1
      reporteCompras.PrintReport False
      Unload reporteCompras
      'rsT.Close
      Set rsT = Nothing
End Sub

Cuando usa esas dos variables sDate y nFolio, es cuando me genera el error, pero si en lugar de eso, uso una linea del listview, me genera el reporte adecuadamente.

El error es
Citar
La operación en varios pasos genero errores, compruebe los valores del estado

Gracias por ayudar.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Llenar Datos a un Recordset sin Base de Datos
« Respuesta #7 en: Enero 30, 2017, 11:56:52 pm »
descarta una a una, algo raro puede estar pasando en el formateo que le das al tipo de dato en la fecha pero aun es mas raro que le des formato a nfolio cuando nfolio es un integer, en vez de eso usa Val (siempre y cuando tu cadena no contenga comas).

Saludos
Me encuentras en YAcosta.com

stusy_20

  • Bit
  • Mensajes: 7
  • Reputación: +0/-0
    • Ver Perfil
Re:Llenar Datos a un Recordset sin Base de Datos
« Respuesta #8 en: Abril 07, 2023, 05:18:35 pm »
Hola amigos gracias por sus aportaciones me han servido de maravilla. otra cosa que me gustaria preguntar es si hay alguna forma de mantener un recordset cargarle un catalogo de articulos y que pueda hacer consultas a ese recordset sin tener que estarlo creando e inicializando y en la clase para el llenado ya sea de una factura o otro formulario realizar las busquedas sobre ese recordset , algo asi como en modo desconectado y solo se cargue una vez al iniciar el sistema la informacion de los catalogos ( usuarios, articulos, etc ) y solo realizar busquedas sobre ese recordset si tener que cargalo eso con la intencion de que sea mas rapida la respuesta de busqueda y lo de mas lo guardo en controles , para una vez terminado pueda guardarlo desde una clase... todo esto es en visual basic 6 ... agradesco su respuesta  ...

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Llenar Datos a un Recordset sin Base de Datos
« Respuesta #9 en: Mayo 04, 2023, 12:20:43 pm »
No veo que tanta mas velocidad necesitas el llenar un recordset, cargo un recordset con miles de registro mas rápido que un pestañeo y además con eso siempre tengo un recordset mas actualizado. Así que una diferencia significativa de velocidad no le veo.
En todo caso puedes poblar tu recordset y dejarlo en memoria, cuando quieras buscar algo usar .find me parece, la verdad ya ataco directamente a la BD y siempre traigo el recordset ya listo para consumir pero si, creo que con find , esto con ADO claro.
Lo otro que puedes hacer es que una vez que leas el recordset lo vuelques a un array o a una coleccion y mantendrías esa coleccion o array en memoria.

Agrego algo mas, yo hago búsquedas mientras se teclea ya sea de clientes o de artículos usando like en el sql, y recuerda que el like pierde el índice, o sea, no lo usa y por lo tanto pierde velocidad y aun así es muy veloz, claro, no hablo de una tabla con decenas de miles de registros, en ese caso ya no lo hago por cada pulsación de tecla sino luego de un enter.
Me encuentras en YAcosta.com

stusy_20

  • Bit
  • Mensajes: 7
  • Reputación: +0/-0
    • Ver Perfil
Re:Llenar Datos a un Recordset sin Base de Datos
« Respuesta #10 en: Diciembre 25, 2023, 08:10:51 pm »
Gracias YAcosta por la contestacíon y seguire tu consejo.. vamos a ver que tal me va utilizandolo de esa manera.