Ver Mensaje Individual
  #7 (permalink)  
Antiguo 15/05/2005, 04:26
MaxExtreme
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 20 años, 1 mes
Puntos: 17
¿Estética? Si programas una cola te queda muy elegante y profesional (si es que no hay otra solución más evidente claro), en vez de poner un MsgBox para darle tiempo.

En VB cómo hacerlo... Bueno te voy a poner un ejemplo de una cola sencilla para que te fijes, pero después debes usar "el esquema" para hacer la tuya que contenga "operaciones" o como te lo quieras montar...

Código:
Option Explicit


' --------------
' COLA
' --------------
Dim nElementos As Integer
Dim Elementos() As String


Private Sub Form_Load()
    nElementos = 0
    ReDim Elementos(nElementos)
End Sub


Private Function ColaMeter(Nuevo_Elemento As String)
    nElementos = nElementos + 1
    ReDim Preserve Elementos(nElementos)
    Elementos(nElementos) = Nuevo_Elemento
End Function


Private Function ColaSacar() As String
    Dim i As Integer
    Dim tmp() As String
    
    If nElementos > 0 Then
        ColaSacar = Elementos(1)
        nElementos = nElementos - 1
        ReDim tmp(nElementos)
        For i = 1 To nElementos
            tmp(i) = Elementos(i + 1)
        Next
        ReDim Elementos(nElementos)
        For i = 1 To nElementos
            Elementos(i) = tmp(i)
        Next
    End If
    
End Function






' --------------
' EJEMPLO DE USO
' --------------
Private Function CopiarElementos()
    Dim i As Integer
    Label.Caption = ""
    For i = 1 To nElementos
        Label.Caption = Label.Caption & Elementos(i) & vbCrLf
    Next
End Function


Private Sub Meter_Click()
    ColaMeter InputBox("Elemento a meter", "Meter elemento")
    CopiarElementos
End Sub


Private Sub Sacar_Click()
    MsgBox "Hemos sacado: " & ColaSacar()
    CopiarElementos
End Sub
Controles:
- CommandButton Meter
- CommandButton Sacar
- Label Label

Para tu aplicación simplemente en vez de sacarlo con un botón, lo haces con un timer. Si no hay más operaciones, no ocurre nada ni genera error.

Ahora el problema es cómo hacer que cada elemento (yo lo he hecho con String) represente una operación. Pero por ejemplo si es SQL, puedes meter en la string cada sentencia SQL. Simplemente la metes con la función ColaMeter y el timer la sacará a su debido tiempo. En el timer debes usar ColaSacar para obtener la operación a realizar, y mandarla a la BD.

Esas funciones las puedes generalizar con Any y valores pasados por referencia y las tienes para usar donde quieras y cuantas veces quieras, o crearte una clase "cola" que lo haga por ti todo (C++ lleva estas clases ya hechas para cualquier tipo de dato )

¿Más elegante que eso? Creo que no ha quedado como una mala "programación".

Lo único que me sorprende es que la base de datos no lleve su propia cola de operaciones para que no ocurran cosas como que no le de tiempo.

PD: ¿Esta solución es digna de un buen programador?

Última edición por MaxExtreme; 15/05/2005 a las 04:42