En esta oportunidad les coloco un ejemplo tipico de creacion de un formulario para agregar, buscar, editar y eliminar usuarios de un sistema utilizando mysql como base de datos y Gambas. El codigo es un poco largo, porque en realidad esta pantalla forma parte de un sistema para control de cibercafe (en desarrollo aun), pero se puede implementar facilmente a otros pogramas que realicen. Una de las modificaciones que se han realizado a este formulario (que se colocaran en un proximo post), es que la conexion a la BD se hace desde un modulo, de manera de reutilizar el codigo en otros formularios.
el aspecto del formulario es el siguiente:
El codigo que debe llevar el formulario es el siguiente:
PUBLIC cn AS NEW Connection
PUBLIC rs AS Result
PUBLIC actStatus AS String
PUBLIC Controlador AS Boolean
PRIVATE SUB SetEnabledFormField(status AS Boolean)
textbox1.Enabled = status
texto2.Enabled = status
texto3.Enabled = status
END
PRIVATE SUB SetEnabledNavButton(status AS Boolean)
BtnFirst.Enabled = status
BtnPrev.Enabled = status
BtnNext.Enabled = status
BtnLast.Enabled = status
END
PRIVATE SUB SetEnabledActButton(status AS Boolean)
BtnGuardar.Enabled = status
BtnEditar.Enabled = status
BtnBuscar.Enabled = status
BtnEliminar.Enabled = status
END
PRIVATE SUB lockFormField(status AS Boolean)
textbox1.ReadOnly = status
texto2.ReadOnly = status
texto3.ReadOnly = status
END
PRIVATE SUB updateFieldValue()
textbox1.Text = rs!usuario
texto2.Text = rs!pass
END
PRIVATE SUB clearField()
textbox1.Text = “”
texto2.Text = “”
texto3.Text = “”
textbox1.SetFocus
END
PUBLIC SUB Erroneos()
IF texto2.Text <> texto3.Text THEN
Message.Warning(“Claves Erroneas”)
texto2.Text = “”
texto3.Text = “”
texto2.SetFocus
Controlador = TRUE
ELSE
Controlador = FALSE
END IF
END
PUBLIC SUB Form_Open()
WITH cn
.type = “mysql”
.host = “localhost”
.login = “root”
.password = “102172″
.name = “cibercafe”
TRY .OPEN
IF ERROR THEN
Message.Error(“Error abriendo la base de datos!!!\n” & Error.Text)
SetEnabledFormField(FALSE)
ME.Close
ELSE
rs = cn.Exec(“SELECT * FROM usuarios”)
lockFormField(TRUE)
textbox1.ReadOnly = FALSE
rs.MoveFirst
IF rs.Available = TRUE THEN
updateFieldValue()
END IF
END IF
END WITH
END
PUBLIC SUB TextBox1_GotFocus()
BtnBuscar.Default = TRUE
END
PUBLIC SUB TextBox1_LostFocus()
BtnBuscar.Default = FALSE
END
PUBLIC SUB BtnBuscar_Click()
DIM i AS Integer
DIM found AS Boolean
rs.MoveFirst
found = FALSE
i = 1
WHILE 1 <= rs.Count
IF rs!usuario LIKE “*” & textbox1.Text & “*” THEN
found = TRUE
EXIT
END IF
rs.MoveNext
i = i + 1
WEND
IF found = TRUE THEN
updateFieldValue()
ELSE
Message.Warning(“Error en la data!!”)
END IF
END
PUBLIC SUB Form_Close()
cn.Close
END
PUBLIC SUB BtnFirst_Click()
rs.MoveFirst
IF rs.Available = TRUE THEN
updateFieldValue()
END IF
END
PUBLIC SUB BtnPrev_Click()
rs.MovePrevious
IF rs.Available = TRUE THEN
updateFieldValue()
END IF
END
PUBLIC SUB BtnNext_Click()
rs.MoveNext
IF rs.Available = TRUE THEN
updateFieldValue()
END IF
END
PUBLIC SUB BtnLast_Click()
rs.MoveLast
IF rs.Available = TRUE THEN
updateFieldValue()
END IF
END
PUBLIC SUB BtnAdd_Click()
lockFormField(FALSE)
SetEnabledNavButton(FALSE)
SetEnabledActButton(FALSE)
BtnGuardar.Enabled = TRUE
BtnCancel.Enabled = TRUE
clearField()
actStatus = “ADD”
END
PUBLIC SUB BtnGuardar_Click()
DIM xresult AS Result
DIM xQuery AS String
DIM xParam AS Integer
Erroneos()
IF Controlador = TRUE THEN
RETURN
ELSE
SELECT CASE actStatus
CASE “ADD”
xresult = cn.Create(“usuarios”)
xresult!usuario = Trim(UCase(textbox1.Text))
xresult!pass = Val(Trim(texto2.Text))
xresult.Update
Message.Info(“Datos Guardados”)
IF ERROR THEN Message.Error(Error.Text)
CASE “EDIT”
xParam = texto2.Text
xQuery = “pass = ” & texto2.Text
cn.Begin
xresult = cn.Edit(“usuarios”, xQuery)
xresult!usuario = Trim(UCase(textbox1.Text))
xresult!pass = Val(Trim(texto2.Text))
xresult.Update
cn.Commit
Message.Info(“Datos editados”)
IF ERROR THEN Message.Error(Error.Text)
CASE “DEL”
xParam = texto2.Text
xQuery = “pass = ” & xParam
cn.Begin
xresult = cn.Edit(“usuarios”, xQuery)
xresult.Delete
cn.Commit
Message.Info(“Datos eliminados”)
IF ERROR THEN Message.Error(Error.Text)
CASE ELSE
END SELECT
rs = cn.Exec(“SELECT * FROM usuarios”)
rs.MoveFirst
SetEnabledNavButton(TRUE)
SetEnabledActButton(TRUE)
‘clearField()
END IF
END
PUBLIC SUB BtnCerrar_Click()
ME.Close
END
PUBLIC SUB BtnEditar_Click()
lockFormField(FALSE)
SetEnabledNavButton(FALSE)
SetEnabledActButton(FALSE)
BtnGuardar.Enabled = TRUE
BtnCancel.Enabled = TRUE
actStatus = “EDIT”
END
PUBLIC SUB BtnEliminar_Click()
lockFormField(FALSE)
SetEnabledNavButton(FALSE)
SetEnabledActButton(FALSE)
BtnGuardar.Enabled = TRUE
BtnCancel.Enabled = TRUE
actStatus = “DEL”
END
PUBLIC SUB BtnCancel_Click()
lockFormField(TRUE)
SetEnabledNavButton(TRUE)
SetEnabledActButton(TRUE)
END
Deberian sacar un manual completo sobre Gambas, donde se plasmen todos los recursos. Las herramientas que tiene asi como los complementos necesarios para hacer uso de ellos como kde.
Por: Adonis Barrera el Enero 12, 2008
a las 2:04 am
Estimado amigo adonis, si revisas en este blog conseguiras un libro en español, donde se explican bastante bien muchos de los recursos que usa gambas. Te invito a revisar bien el blog. Saludos y siempre a la orden.
Por: jjmoncar el Enero 12, 2008
a las 5:16 pm
Hola jjmoncar, veo que comenzaste el blog apenas en diciembre y ya tienes pasta de la buena. Espero que tu blog crezca. Se ve que el proyecto en el que estas trabajando va a llevar trabajo pero no descuides el blog.
He leido este tutorial
http://www.kdehispano.org/curso_gambas
y esta muy bueno, que con todo lo que aqui he encontrado ya hace que me piquen los dedos por hecharle mano.
Una sugerencia, el codigo que publicas para quienes venimos de trabajar en visual basic es claro, pero creo que puedes comentarlo un poco mas.
Por: Vioscar el Enero 15, 2008
a las 3:05 am
Hola! Quisiera preguntarte cual es la ventaja de utilizar recordsets (rs). Pues soy programador autodidacta, y cuando empecé a trabajar con DB se me dio por hacer módulos que reciban como parámetros los datos y que ejecuten directamente las instrucciones desde el cn.Exec,…
Por: Mal2tiN el Junio 3, 2008
a las 9:37 pm
gracias profesor esta muy claro el código. me ayudara en la comprensión del proyecto que estoy pensando hacer
Por: EANP el Noviembre 27, 2008
a las 3:14 pm
ps la verdad no entendi mucho o casi nada ,
hay muy poca documentacion sobre gambas de hecho casi nula la mayoria de la gente ni sabe que existe, y lo peor es que el programa no viene con una guia de su propia base de datos :S
Por: daniel el Julio 9, 2009
a las 2:17 am
me gusta tu blogs, pero trata de comentar mas lo que publicas para usuarios inexpertos, que apenas están comenzando con la herramienta
Por: azumi el Agosto 7, 2009
a las 9:42 am
Acabo de empezar con gambas y estoy entusiasmado… gracias por estas aportaciones.
He leido que hay bibliotecas de clases programadas por terceros para incrementar la potencia del lenguaje… ¿donde podemos ver algo al respecto?
Por: José María el Octubre 8, 2009
a las 1:24 am