Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: luison en 19 Abril 2011, 18:13 pm



Título: Como rotar estas promociones...?
Publicado por: luison en 19 Abril 2011, 18:13 pm
Salu2

Tengo una tabla con promociones:
ID -  DESCRIPCION -   INICIA -     TERMINA
1      3 x 2 Cereales   19/04/2011   25/04/2011
2      4 X 3 Pastas       20/04/2011  30/04/2011


Código
  1. Dim recset As New Recordset
  2.    Set recset = Conexion.Execute("SELECT descripcion from promos where termina >='" & Date & "'")
  3.  
  4.            If recset.EOF = False Then
  5.  
  6.                    While Not recset.EOF
  7.                            'mostrar promocion #1
  8.                            'esperar 1 minuto
  9.                            'mostrar promocion # 2
  10.                            'esperar 1 minuto
  11.                            '...
  12.                            recset.MoveNext
  13.                    Loop
  14.            End If
  15.  
  16.    Set recset = Nothing
  17.  

La idea es mostrar la promoción #1, esperar un tiempo razonable mientras se lee la descripción, luego mostrar la siguiente promoción, esperar y asi sucesivamente.

He pensado tal vez se pueda hacer con
Código
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2.  

O  posiblemente exista una forma mas eficiente.

Espero puedan ayudarme  con algunos tips.

Gracias, seguiremos por aqui intentando.



Título: Re: Como rotar estas promociones...?
Publicado por: luison en 19 Abril 2011, 19:37 pm
Hasta ahorita he logrado un avance con 2 timers, un par de arreglos para guardar la info de la consulta:

Código
  1. Public Sub consulta_promos()
  2.  
  3. Dim recset As New Recordset
  4.    Set recset = Conexion.Execute("SELECT descripcion,img from promos where fecha_termina >= #" & Date & "#")
  5.  
  6.            If recset.EOF = False Then
  7.  
  8.                    Do While Not recset.EOF
  9.  
  10.                            mtextos(posT) = recset!descripcion
  11.                            mImages(posI) = recset!img
  12.  
  13.                            posT = posT + 1
  14.                            posI = posI + 1
  15.                            recset.MoveNext
  16.                    Loop
  17.            End If
  18.  
  19.            Set recset = Nothing
  20. End Sub
  21.  



Código
  1. Private Sub tmrPromociones_Timer()
  2.  
  3.  
  4. If tope > posT Then
  5. tope = 1
  6. lblMsjsPromos.Caption = mtextos(tope)
  7.    Me.picPromos.LoadImage_FromFile (App.Path & "/img_promos/" & mImages(tope))
  8.    Me.picPromos.AutoSize = True
  9. tope = tope + 1
  10. Else
  11.    lblMsjsPromos.Caption = mtextos(tope)
  12.    Me.picPromos.LoadImage_FromFile (App.Path & "/img_promos/" & mImages(tope))
  13.    Me.picPromos.AutoSize = True
  14. tope = tope + 1
  15. End If
  16.  
  17.    tmrPromociones.Enabled = False
  18.    Me.tmrReiniciaPromos.Enabled = True
  19. End Sub
  20.  

Estoy provocando varios escenarios / casos para ver si esta forma es la adecuada


Título: Re: Como rotar estas promociones...?
Publicado por: BlackZeroX en 20 Abril 2011, 20:38 pm
En lugar un timer y el Sleep ( Este te duerme el hilo ) puedes usar:

Wait() (http://infrangelux.hostei.com/index.php?option=com_content&view=article&id=6:artwait&catid=2:catprocmanager&Itemid=8)

Asi:

Código
  1.  
  2.  
  3. option explicit
  4.  
  5. private recset As Recordset'// No hay que hacerle New ya que olo lo usaremos como referenciador al que obtendremos.
  6. ' // En cualquier otro proceso...
  7.    Set recset = Conexion.Execute("SELECT descripcion,img from promos where fecha_termina >= #" & Date & "#")
  8. private bExit  as boolean
  9.  
  10. Public Sub Girar_Promos()
  11. on error goto _ErrReport:
  12. dim simg$
  13.    if ( not recset is nothing ) then
  14.        with recset
  15.            Do While (bExit = false)
  16.                simg$ = App.Path & "/img_promos/" & recset!img
  17.                if ( dir(simg$,vbarchive) <> "" then
  18.                    picPromos.LoadImage_FromFile  (simg$)
  19.                    lblMsjsPromos.Caption         = recset!descripcion
  20.                    call wait( 5 ) ' // Cada 5 segundos.
  21.                else
  22.                    debug.print "Error Al cargar: "; simg$
  23.                end if
  24.                if ( .EOF ) then
  25.                    .MoveFirst
  26.                else
  27.                    .MoveNext
  28.                end if
  29.            loop
  30.        end with
  31.    end if
  32. exit sub
  33. _ErrReport:
  34.    Debug.print "Error Con el RecordSet"
  35. End Sub
  36.  
  37.  

Dulces Lunas!¡.
.