Nuestro cuarto proyecto-Un juego sencillo

Bien, la idea de este proyecto es crear un sencillo juego de adivinar un número oculto, pero nos permitirá usar otros componente aún no utilizado en nuestros proyectos = la barra de progreso o progressbar.

Veamos la interfase primero:

interfase

En tiempo de diseño

Costa de una etiqueta o “label” con el texto “escribe tu número aquí”, dos valuebox: Vbnumero  y Vbtirada, tres  botones, btntirar, btncerrar y btnnuevo, el progresbar al que llamaremos pgbtiempo y un textbox llamado txtvalor. Además de un control Timer al que dejamos con su nombre por defecto:Timer1

Mientras el tiempo (en este caso 100 segundos) no se agote, podemos seguir escribiendo números. Si acertamos , el timer se detiene. Mediante mensajes en el cuadro de texto el programa nos informa si el numero a acertar es mayor o menor .

Básicamente , compara los valores de los valuebox y dispara los eventos asociados.

Vamos a crear el módulo generador, para que nos cree los números y cargue algunas variables en el formulario principal. Lo hacemos  así para poder llamar al procedimiento al efecto desde distintos eventos, el evento open de fmain y el evento click de btnnuevo.

El código es el siguiente:

Public Sub generar()

Dim numero As Integer                            ‘declaramos variables

Randomize                                                ‘inicializa el generador de números aleatorios

numero = Rnd(1, 500)                            ‘elige un número al azar
FMain.Vbnumero.Value = numero     ‘asigna el valor de numero al valuebox
FMain.Timer1.enabled = True              ‘inicializa el timer
FMain.Vbnumero.visible = False        ‘Hace invisible el valuebox del número a acertar
FMain.btntirar.Enabled = True           ‘Habilita el boton tirar
FMain.Pgbtiempo.Value = 1                   ‘Asigna el valor 1 al progressbar
End Sub

Los comentarios en rojo explican el procedimiento, el valor 1 al pgbtiempo es porque vamos a hacerlo ir de 100% (valor máximo) a 0% (valor mínimo)

Publicado en programación | Etiquetado , | Deja un comentario

Código fuente

Descarga aquí el código fuente de lo hecho hasta ahora. Se incluye un reporte que aún no he conseguido que funcione, si alguien lo ve y puede echar una manito se agradece el aporte.

Saludos

Publicado en programación | Etiquetado , , | Deja un comentario

Listando etapas o “Fechas”

Aclaro,porque quizá en otros países no sea igual, que aquí llamamos fechas a las etapas del campeonato de fútbol. Había quedado pendiente crear el formulario donde ver en la fecha y desde el cual poder buscar los resultados de tu equipo o de determinada fecha.

Bien, antes que nada , recordemos que en el formulario principal hay un botón para guardar las fechas en la tabla al efecto que se habilita luego de sumar los puntos. Este es su código:

Public Sub btnfecha_Click()

guardarfecha(lbfechas, lb1, vb1, lb2, vb3)‘parámetros entre paréntesis
guardarfecha(lbfechas, lb3, vb5, lb4, vb7)
guardarfecha(lbfechas, lb5, vb9, lb6, vb11)
guardarfecha(lbfechas, lb7, vb13, lb8, vb15)
guardarfecha(lbfechas, lb9, vb17, lb10, vb19)
guardarfecha(lbfechas, lb11, vb21, lb12, vb23)
guardarfecha(lbfechas, lb13, vb25, lb14, vb27)
guardarfecha(lbfechas, lb15, vb29, lb16, vb31)

End

Lo que hace es lanzar el procedimiento guardarfecha, pasándole los distintos parámetros.

Rebobinando un poco, para evitar reescribir código creamos un procedimiento o función al que luego le pasamos los parámetros. Veamos ahora el código del mismo:

Public Sub guardarfecha(lfecha As Listbox, lloc As Listbox, gloc As Valuebox, lvis As Listbox, gvis As Valuebox)‘Aqui declaramos los parámetros por tipo

‘Primero declaramos las variables
Dim fecha As String
Dim local As String
Dim glocal As Integer
Dim visita As String
Dim gvisita As Integer
‘Luego asignamos valores a las variables
fecha = lfecha.Current.text
local = lloc.Current.text
glocal = gloc.value
visita = lvis.Current.text
gvisita = gvis.Value

‘Finalmente insertamos los valores en la base de datos  
Try hconn.exec(“Insert into Fechas values(&1,&2,&3,&4,&5,&6)”, Null, fecha, local, glocal, visita, gvisita)
bloqueabotones ‘ y bloqueamos los botones
End

Los comentarios, resaltados en rojo explican lo que hace cada parte del programa, el null en azul es necesario para que el campo autonúmerico rowid se incremente en una unidad en cada nuevo registro guardado.

Vamos ahora a crear el formulario para ver las tablas y realizar las búsquedas. Como ya es l tercer proyecto no vamos a explicar ni como agregar el formulario ni como “dibujar los controles. En la imagen hemos incluido los nombres y en algún caso el tipo de control.

form1

Form 1 en tiempo de diseño

Me quedó con el nombre por defecto, Form1,pero sería un nombre más adecuado frmfechas. Lo abrimos desde fmain haciendo click en btnlistar (listar fechas).

Ahora el código de form1:

Private hconn As Connection
Private hresu As Result ‘ Gambas class file

Public Function ConectarBase() As Boolean

If hconn <> Null Then Return False

hconn = New Connection
hconn.Host = User.Home &/ “.goles1″
hconn.name = “Futbol”
hconn.type = “sqlite3″
Try hconn.Open()
If Error Then
hconn = Null
Message.Error(“error al conectar con la base”)
Return True
Endif
Return False

End

Public Sub Form_Open()

Dim palabra As String

tabla.Clear ‘limpiar tabla

If ConectarBase() Then Return

tabla.Columns.Count = 6

tabla.Columns[0].text = “id”
tabla.Columns[0].Width = 30
tabla.Columns[0].Alignment = Align.Center
tabla.Columns[1].text = “Local”
tabla.Columns[1].Alignment = Align.Center
tabla.Columns[1].Width = 150
tabla.Columns[2].text = “glocal”
tabla.Columns[2].Width = 60
tabla.Columns[2].Alignment = Align.Center
tabla.Columns[3].text = “Visitante”
tabla.Columns[3].Alignment = Align.Center
tabla.Columns[3].Width = 150
tabla.Columns[4].text = “gvisita”
tabla.Columns[4].Alignment = Align.Center
tabla.Columns[4].Width = 60
tabla.Columns[5].text = “Fecha”
tabla.Columns[5].Alignment = Align.Center
tabla.Columns[5].Width = 100

hresu = hconn.Exec(“Select * from Fechas order by Fecha ASC”)

Do While hresu.Available
palabra = hresu["rowid"]
tabla.Add(palabra, palabra)
tabla[palabra][1] = hresu["Local"]
tabla[palabra][2] = hresu["Glocal"]
tabla[palabra][3] = hresu["Visitante"]
tabla[palabra][4] = hresu["Gvisita"]
tabla[palabra][5] = hresu["Fecha"]
hresu.MoveNext()
Loop
FMain.listado(lbequipo)
modcargar.cargar2
End

Public Sub btnbuscar_Click()

Dim palabra As String
Dim filtro As String
tabla.Clear ‘limpiar tabla

If ConectarBase() Then Return

tabla.Columns.Count = 6

tabla.Columns[0].text = “id”
tabla.Columns[0].Width = 30
tabla.Columns[0].Alignment = Align.Center
tabla.Columns[1].text = “Local”
tabla.Columns[1].Alignment = Align.Center
tabla.Columns[1].Width = 150
tabla.Columns[2].text = “glocal”
tabla.Columns[2].Width = 60
tabla.Columns[2].Alignment = Align.Center
tabla.Columns[3].text = “Visitante”
tabla.Columns[3].Alignment = Align.Center
tabla.Columns[3].Width = 150
tabla.Columns[4].text = “gvisita”
tabla.Columns[4].Alignment = Align.Center
tabla.Columns[4].Width = 60
tabla.Columns[5].text = “Fecha”
tabla.Columns[5].Alignment = Align.Center
tabla.Columns[5].Width = 100
filtro = lbequipo.Current.Text
hresu = hconn.Exec(“Select * from Fechas  where Local like ‘” & filtro & “‘ Or Visitante Like ‘” & filtro & “‘”) ‘consulta sql

Do While hresu.Available
palabra = hresu["rowid"]
tabla.Add(palabra, palabra)
tabla[palabra][1] = hresu["Local"]
tabla[palabra][2] = hresu["Glocal"]
tabla[palabra][3] = hresu["Visitante"]
tabla[palabra][4] = hresu["Gvisita"]
tabla[palabra][5] = hresu["Fecha"]
hresu.MoveNext()
Loop

End

Public Sub btnreset_Click()

Form_Open

End

Public Sub btnbuscarfecha_Click()

Dim palabra As String
Dim filtro As String
tabla.Clear ‘limpiar tabla

If ConectarBase() Then Return

tabla.Columns.Count = 6

tabla.Columns[0].text = “id”
tabla.Columns[0].Width = 30
tabla.Columns[0].Alignment = Align.Center
tabla.Columns[1].text = “Local”
tabla.Columns[1].Alignment = Align.Center
tabla.Columns[1].Width = 150
tabla.Columns[2].text = “glocal”
tabla.Columns[2].Width = 60
tabla.Columns[2].Alignment = Align.Center
tabla.Columns[3].text = “Visitante”
tabla.Columns[3].Alignment = Align.Center
tabla.Columns[3].Width = 150
tabla.Columns[4].text = “gvisita”
tabla.Columns[4].Alignment = Align.Center
tabla.Columns[4].Width = 60
tabla.Columns[5].text = “Fecha”
tabla.Columns[5].Alignment = Align.Center
tabla.Columns[5].Width = 100
filtro = lbfechas.Current.Text
hresu = hconn.Exec(“Select * from Fechas  where Fecha like ‘” & filtro & “‘”) ‘consulta sql

Do While hresu.Available
palabra = hresu["rowid"]
tabla.Add(palabra, palabra)
tabla[palabra][1] = hresu["Local"]
tabla[palabra][2] = hresu["Glocal"]
tabla[palabra][3] = hresu["Visitante"]
tabla[palabra][4] = hresu["Gvisita"]
tabla[palabra][5] = hresu["Fecha"]
hresu.MoveNext()
Loop

End

Public Sub Btncerrar_Click()

Me.Close

End
Vamos a explayarnos sobre algunos fragmentos de código  que aparecen aquí  y no habíamos visto antes. Dados que los equipos alternan la localía , cuando buscamos los resultados de un equipo debemos buscar en ambos campos, tenemos una sentencia sql con dos variables a considerar unidas por el operador lógico “or”, que literalmente significa “o”.

hresu = hconn.Exec(“Select * from Fechas  where Local like ‘” & filtro & “‘ Or Visitante Like ‘” & filtro & “‘”) 

Creo que el resto del código se explica bastante por sí solo, salvo la sentencia modcargar.cargar2, donde modcargar es un módulo del programa  y modcargar 2 es una función escrita en el misma. Veamos el código:

Public Sub cargar()

FMain.lbfechas.Add(“Elige fecha”)
FMain.lbfechas.Add(“fecha 01″)
FMain.lbfechas.Add(“fecha 02″)
FMain.lbfechas.Add(“fecha 03″)
FMain.lbfechas.Add(“fecha 04″)
FMain.lbfechas.Add(“fecha 05″)
FMain.lbfechas.Add(“fecha 06″)
FMain.lbfechas.Add(“fecha 07″)
FMain.lbfechas.Add(“fecha 08″)
FMain.lbfechas.Add(“fecha 09″)
FMain.lbfechas.Add(“fecha 10″)
FMain.lbfechas.Add(“fecha 10″)
FMain.lbfechas.Add(“fecha 12″)
FMain.lbfechas.Add(“fecha 13″)
FMain.lbfechas.Add(“fecha 14″)
FMain.lbfechas.Add(“fecha 15″)
End

Public Sub cargar2()
Form1.lbfechas.Add(“Elige fecha”)
Form1.lbfechas.Add(“fecha 01″)
Form1.lbfechas.Add(“fecha 02″)
Form1.lbfechas.Add(“fecha 03″)
Form1.lbfechas.Add(“fecha 04″)
Form1.lbfechas.Add(“fecha 05″)
Form1.lbfechas.Add(“fecha 06″)
Form1.lbfechas.Add(“fecha 07″)
Form1.lbfechas.Add(“fecha 08″)
Form1.lbfechas.Add(“fecha 09″)
Form1.lbfechas.Add(“fecha 10″)
Form1.lbfechas.Add(“fecha 10″)
Form1.lbfechas.Add(“fecha 12″)
Form1.lbfechas.Add(“fecha 13″)
Form1.lbfechas.Add(“fecha 14″)
Form1.lbfechas.Add(“fecha 15″)

End
Cualquier duda, contestaré a la brevedad posible desde el correo de contacto. Hasta la próxima.

Publicado en programación | Etiquetado , | Deja un comentario

Añadiendo Funcionalidades

Bien, ya tenemos lo básico del programa. O casi. Nos haría falta poder agregar o quitar equipos desde el mismo programa sin necesidad de usar un administrador externo de base de datos.En la interfase podemos ver un botón con la leyenda “nuevo equipo” llamado Btnnuevo, cuyo código es el siguiente:
Public Sub Btnnuevo_Click()

If ConectarBase() Then Return
fdata.runnew(hconn)
Form_Open()
End

Si lo lanzamos ahora veremos que el programa da un error, pues fdata aún no existe. Por tanto vamos al árbol de la izquierda y desde la carpeta fuentes, botón derecho,nuevo, formulario y lo nombramos fdata. Su interfase es muy sencilla y no requiere explicaciones

fdata

fdata en tiempo de diseño

Un textbox (txtnombre) y dos botones (btnaceptar y btncancelar) y su código, muy sencillo

Private hconn As Connection
Private hresul As Result

Public Sub runnew(data As Connection)

hconn = data
Me.ShowModal

End

Public Sub btncancelar_Click()

Me.Close()

End

Public Sub btnaceptar_Click()

If txtnombre.Text = “” Then
Message.Warning(“Teclee un nombre”)
Else
   Try hconn.EXEC(“insert into equipos values (&1,&2,&3,&4)”, txtnombre.text, “0″, “0″, “0″)

Me.Close()
Catch
Message.Error(“Imposible introducir los datos solicitados”)
Endif

End

Como podemos ver, el método  runnew lanzado desde fmain se abre en forma modal, es decir, hasta que no interactuemos con él no se cerrará y no podrás seguir adelante con el programa.

Cuando damos aceptar controlamos que el textbox no esté vacío y tratamos de introducir los datos(es el código destacado en rojo) y si no podemos lanzamos el mensaje de error. Los tres ceros entrecomillados son para los campos correspondientes a puntaje, goles a favor y goles en contra.

Para borrar hemos creado el siguiente procedimiento;

Public Sub tabla_KeyRelease()

If Key.Code = Key.Delete Then

If tabla.current = Null Then Return
If tabla.Current.Selected = False Then Return

If ConectarBase() Then Return

Try hconn.exec(“delete from equipos where Equipo=&1″, tabla.Current.Key)
If Error Then
Message.Error(“Imposible borrar el registro”)
Else
tabla.Current.Delete()
Endif
Endif

End

Usamos el evento Keyrelease y si la tecla presionada es suprimir o delete eliminamos el equipo seleccionado. El problema de este procedimiento es que este tipo de acciones no se pueden deshacer. Para ello modificamos el código agregando una variable a la que llamaremos pregunta a la que declaramos al principio del procedimiento, y luego agregamos un cuadro de mensaje con dos opciones. La primera opción vale “1″ y la segunda “2″. De acuerdo al valor de esta variable podemos cancelar el borrado del registro si hemos pulsado delete por error. Pongo el código nuevo con las modificaciones en azul.

Public Sub tabla_KeyRelease()
Dim pregunta As Integer
If Key.Code = Key.Delete Then ‘comprueba la tecla pulsada

If tabla.current = Null Then Return
If tabla.Current.Selected = False Then Return

If ConectarBase() Then Return
   pregunta = message.Warning(“¿Esta seguro de eliminar el registro?”, “Si”, “No”)
   If pregunta = 1 Then
Try hconn.exec(“delete from equipos where Equipo=&1″, tabla.Current.Key)
If Error Then
Message.Error(“Imposible borrar el registro”)
Else
tabla.Current.Delete()
Endif
Endif
Endif
End

En el próximo post-que  prometo será pronto-vamos a aprender a listar las fechas en un nuevo formulario donde además podremos buscar por fecha y por equipo.La parte de búsquedas quizá demore un poco ya que tras una rotura de disco duro perdí la última versión del programa y debo rehacerlo. Hasta la próxima.

Publicado en programación | Etiquetado , , | Deja un comentario

Sumando puntos

Habíamos creado el procedimiento de edición para poder sumar los puntos y goles. Bien, ahora vamos a hacerlo interactuar con el formulario principal. Ya hemos creado las rutinas que comparan los goles y asignan el puntaje en función de esto.

En Fmain vamos a lanzar el procedimiento de ediciòn en el evento activate de la tabla. Este evento se dispara cuando hacemos doble click sobre la misma o cuando hacemos enter con el foco en la tabla.

Public Sub tabla_Activate()

Dim hresul As Result

If tabla.Current = Null Then Return

If ConectarBase() Then Return

hresul = hconn.Edit(“equipos”, “Equipo=&1″,
tabla.Current.Key)
fdata1.runedit(hresul)‘ESTA LINEA LANZA EL RUNEDIT EN FDATA1
tabla.Current[0] = hresul["Equipo"]
tabla.Current[1] = hresul["Puntaje"]
tabla.Current[2] = hresul["Gf"]
tabla.Current[3] = hresul["Gc"]

End

Pero, para activar la tabla con los parámetros correspondientes vamos a crear el procedimiento sumar_puntos, observe los comentarios destacados en mayúscula a la derecha del código.Recuerde que los comentarios empiezan con

Public Sub sumar_puntos(lista As Listbox, vbp As Valuebox, vbgf As Valuebox, vbcg As Valuebox) ‘ESTOS SON LOS PARÀMETROS

 Dim Clave As String   ‘DECLARAMOS VARIABLES
  Dim filtro As String

filtro = lista.Current.Text  ‘AQUÍ ELEGIMOS EL EQUIPO ACTUAL
tabla.Clear ‘limpiar tabla

If ConectarBase() Then Return

tabla.Columns.Count = 5

tabla.Columns[0].text = “Equipo”
tabla.Columns[0].Width = 280
tabla.Columns[0].Alignment = Align.Center
tabla.Columns[1].text = “Puntaje”
tabla.Columns[1].Alignment = Align.Center
tabla.Columns[1].Width = 60
tabla.Columns[2].text = “Gf”
tabla.Columns[2].Width = 40
tabla.Columns[2].Alignment = Align.Center
tabla.Columns[3].text = “Gc”
tabla.Columns[3].Alignment = Align.Center
tabla.Columns[3].Width = 40
tabla.Columns[4].text = “zdif”
tabla.Columns[4].Alignment = Align.Center
tabla.Columns[4].Width = 40

hresul = hconn.Exec(“Select * from equipos where Equipo like ‘” & filtro & “‘”) ‘SENTENCIA CONDICIONAL SQL

  Do While hresul.Available
Clave = hresul["Equipo"]
tabla.Add(Clave, Clave) ‘CARGAMOS TABLA
tabla[Clave][1] = hresul["Puntaje"]
tabla[Clave][2] = hresul["Gf"]
tabla[Clave][3] = hresul["Gc"]
tabla[Clave][4] = hresul["zdif"]
hresul.MoveNext()
Loop
fdata1.vbgc.Value = vbcg.value ‘AQUI ASIGNAMOS LOS VALORES DE PUNTOS Y GOLES
fdata1.vbgf.Value = vbgf.Value
fdata1.vbpuntos.Value = vbp.value

tabla.SetFocus ‘PONEMOS EL FOCO EN LA TABLA
Desktop.SendKeys(“\n”) ‘ENVIAMOS UN ENTER PARA LANZAR EL EVENTO TABLA ACTIVATE
End
Observe que para referirnos a un control de otro formulario antepones el nombre del formulario al del control (fdata1.vbgc.Value) fdata=nombre formulario ;vbgc=nombre control; value =valor.

Para recorrer cada uno de los equipos vamos a lanzar el procedimiento sumar_puntos pasándole los parámetros de la siguiente manera;en el evento click de btnsumar

Public Sub btnsumar_Click()

sumar_puntos(lb1, vb2, vb1, vb3)
Wait 0.1
sumar_puntos(lb2, vb4, vb3, vb1)
Wait 0.1
sumar_puntos(lb3, vb6, vb5, vb7)
Wait 0.1
sumar_puntos(lb4, vb8, vb7, vb5)
Wait 0.1
sumar_puntos(lb5, vb10, vb9, vb11)
Wait 0.1
sumar_puntos(lb6, vb12, vb11, vb9)
Wait 0.1
sumar_puntos(lb7, vb14, vb13, vb15)
Wait 0.1
sumar_puntos(lb8, vb16, vb15, vb13)
Wait 0.1
sumar_puntos(lb9, vb18, vb17, vb19)
Wait 0.1
sumar_puntos(lb10, vb20, vb19, vb17)
Wait 0.1
sumar_puntos(lb11, vb22, vb21, vb23)
Wait 0.1
sumar_puntos(lb12, vb24, vb23, vb21)
Wait 0.1
sumar_puntos(lb13, vb26, vb25, vb27)
Wait 0.1
sumar_puntos(lb14, vb28, vb27, vb25)
Wait 0.1
sumar_puntos(lb15, vb30, vb29, vb31)
Wait 0.1
sumar_puntos(lb16, vbv32, vb31, vb29)
Wait 0.1

pocisiones
btnsumar.enabled = False
btnfecha.enabled = True
End

El Wait 0.1 es para que el procedimiento se lance con  100 milisegundos de Delay entre uno y otro. No se si es estrictamente necesario, pero hasta que lo puse el programa se colgaba aquí. Al final volvemos a cargar la tabla de pocisiones completa , bloqueamos el botòn de sumar para evitar sumar de nuevo por error y habilitamos el botón que guarda la fecha completa en la tabla correspondiente.

 

Publicado en programación | Etiquetado | Deja un comentario

Un pequeño cambio a la base de datos

Cuando comencé a crear el procedimiento para mostrar las fechas jugadas, encontré  un error al querer cargar la tabla correspondiente. Me aparecía un error en sql, diciendo que el índice estaba repetido. La verdad me costó bastante encontrar el error,pelo lo conseguí. El problema que al crear las tablas no les había puesto un índice y sqlitebrowser había creado un índice único para ambas tablas.

Me fue imposible modificarlas así que las creé de nuevo agregando un nuevo campo a cada una, id para la tabla equipos e rowid para la tabla fechas. Ambas son autonuméricas y , por poco lógico que resulte en la sentencia Insert into hay que darles un valor de Null(nulo) para que se llenen automáticamente.

Bien, habíamos quedado en el punto de crear el procedimiento para sumar puntos y goles. Vamos a necesitar abrir los registros uno por uno en modo edición para poder hacerlo.Vamos a agregar un nuevo formulario al que llamaremos fdata. Veamos su aspecto en tiempo de diseño con todos sus controles visibles…

fdata1 en tiempo de diseño

Y en tiempo de ejecución mostrando solo el label…

fdata1 en tiempo de ejecución

Los controles quedan ocultos puesto que el usuario no debe interactuar con ellos, forman parte de un proceso automatizado.
Los controles a colocar son :5 textbox (txtequipo,txtpuntos,txtgf,txtgc,txtdif) ,
3 valuebox(vbgf,vbgc,vbpuntos) un control timer y un label. A todos los controles, excepto al label y al timer hay que ponerle su propiedad visible a false desde la ventana de propiedades. El label porque es el único que va a quedar visible y el timer porque es invisible de por sí. Al timer le ponemos su propiedad enabled a True y  le damos un delay de 200 milisegundos. A continuación el código de fdata1:

 Private hconn As Connection
Private hresul As Result
  Private editando As Boolean

  Public Sub runedit(data As Result)

hresul = data
editando = True
txtequipo.text = hresul["Equipo"]
txtpuntos.text = hresul["Puntaje"]
txtgf.text = hresul["Gf"]
Txtgc.text = hresul["Gc"]
txtdif.text = hresul["zdif"]
Me.ShowModal

    End

Public Sub Timer1_Timer()
Dim dif As Integer
If editando Then

Try hresul["Equipo"] = txtequipo.text
Try hresul["Puntaje"] = Val(txtpuntos.text) + vbpuntos.value
Try hresul["Gf"] = Val(txtgf.text) + vbgf.value
Try hresul["Gc"] = Val(Txtgc.text) + vbgc.Value
Try hresul["zdif"] = (Val(txtgf.text) + vbgf.value) – (Val(Txtgc.text) + vbgc.Value)
Try hresul.Update

Else
Endif

Me.Close()
Catch
Message.Error(“imposible guardar datos“)
End

Como siempre declaramos primero las variables, luego el procedimiento runedit(que se dispara desde el formulario principal, lo veremos más adelante)nos carga los valores para el equipo correspondiente, necesarios para realizar las cuentas.

Luego el evento timer nos dispara la actualización, suma puntos, goles a favor y en contra, hace la diferencia de goles y carga todo en la tabla, cerrando posteriormente el formulario.

En el próximo post veremos como interactua esto con el formulario principal.

Publicado en programación | Etiquetado | Deja un comentario

Sigamos avanzando

Bien, ya hemos visto como usar el mismo código en varias partes de nuestro programa y como llamarlo desde diferentes procedimientos.

Ahoara nos encontramos con la fase en que, tras escribir nosotros los resultados el programa calcule y asigne los puntos a cada uno. Como ya sabemos el empate da un punto a cada uno,la victoria tres y la derrota cero punto. Por tanto, necesitamos que el programa compare en cada partido los goles del local, los del visitante y en virtud de eso asigne los puntos. Vamos a crear una función que nos devuelva en una variable el resultado de esa comparación. Veamos como:

Private Function compara(goleslocal As ValueBox, golesvisita As ValueBox) As Integer
   Dim estado As Integer = 0
If goleslocal.value = golesvisita.value Then
estado = 1
Else
   If goleslocal.value > golesvisita.value Then
estado = 2
    Else
estado = 3
  Endif
Endif
Return estado
End
Primero declaramos la variable Estado como integer(entero) y la inicializamos con un valor de cero, luego realizamos la comparación con una sentencia condicional if..then..else if,else y devolvemos el estado mediante la sentencia return estado

Lo siguiente es crear el procedimiento asignar

Public Sub asignar(goleslocal As ValueBox, puntoslocal As ValueBox, golesvisita As ValueBox, puntosvisita As ValueBox)
Select Case compara(goleslocal, golesvisita)
  Case 1
puntoslocal.Value = “1
puntosvisita.Value = “1
   Case 2
puntoslocal.Value = “3
puntosvisita.Value = “0
Case 3
puntoslocal.Value = “0
puntosvisita.Value = “3
   End Select
End Sub

Según el estado de la función compara  se asignan los puntos. Solo nos resta pasarle los parámetros para que sepa que valores comparar y cuales asignar. Para eso en el evento click del botón btnasignar llamamos al procedimiento homónimo (asignar)

Public Sub Btnasignar_Click()
asignar(vb1, vb2, vb3, vb4)
asignar(vb5, vb6, vb7, vb8)
asignar(vb9, vb10, vb11, vb12)
asignar(vb13, vb14, vb15, vb16)
asignar(vb17, vb18, vb19, vb20)
asignar(vb21, vb22, vb23, vb24)
asignar(vb25, vb26, vb27, vb28)
asignar(vb29, vb30, vb31, vbv32)
btnsumar.enabled = True
Btnasignar.enabled = False
End

Para que se entienda esto : asignar(vb29, vb30, vb31, vbv32) equivale a               asignar(goleslocal As ValueBox, puntoslocal As ValueBox, golesvisita As ValueBox, puntosvisita As ValueBox)

vb29= goleslocal   vb30=puntos local   vb31=golesvisita   vb32=puntosvisita,

Como podemos ver el código repite el procedimiento para cada cuarteta de valuebox, lo cual nos evita reescribir el  procedimiento de comparación y asignación para cada partido.

Por último se bloquea el botón asignar(btnasignar) que ya cumplió su función y se habilita el botón sumar puntos (btnsumar), que es lo próximo que debemos hacer. Es un procedimiento algo complejo, ya que hay que seleccionar equipo por equipo, abrir la tabla en modo edición, sumar puntos y goles, actualizar diferencia de goles  y pasar al siguiente equipo. Por tanto,  para no embarullar mucho, queda para el próximo post.

Publicado en programación | Etiquetado | Deja un comentario