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.
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.
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.
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,…
gracias profesor esta muy claro el código. me ayudara en la comprensión del proyecto que estoy pensando hacer
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
me gusta tu blogs, pero trata de comentar mas lo que publicas para usuarios inexpertos, que apenas están comenzando con la herramienta
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?
se deberia poder descardar stos proyectos
Por favor me decir o dar un link donde pueda conseguir un manual Completo de Gamba y MySQL.
Por favor
Soy Nuevo en esto
aca en el blog hay ejemplos con mysq, referente al libro si lo quieres ponte en contacto a traves de mi email: jjmoncar@gmail.com
Me parece muy bueno tu tutorial, me esta ayudando a migrar a gambas.
estos ejemplos funcionan en gambas2 tambien?
buenos dias. todos estos ejemplos estan hechos en gambas 2.
no entiendo casi nada del código, alguien podría explicar que es lo que haces aquí.
o al menos fragmentar todo en partes. También hay novatos interesados.
No supongas que todos sabemos todo.
Hola al hacer la conexion desde un boton me aprece el el error de que no encuentra el driver de mysql. Este lo tengo instalado y lo trabajo con php que crees que pueda pasar, tambien habilite la propiedad de bd en propiedades de gamabas para tener acceso alas bases de datos
si usas ubuntu en el centro de soft escribe “gambas mysql” sin comillas ovbio por ahi t saldra para instalar el driver o si no en terminal seria algo como sudo apt-get install gb.db.mysql
me olvide para activar el driver vas a propiedades del proyecto y activas el componente y me gustaria q en el blog hagan ejemplos con postgresql ya q estoy usando este gestor de base de datos y algunas cosas no se acomodan bien por lo demas gracias por existir
buenas amigo estoy iniciandome en gambas y de verdad gracias a estos blog hoy en dia en internet e avanzado mucho sin embargo me estancado a la hora validar las cajas de texto en mi proyecto de gambas como el de q acepte solo letras mayusculas, numeros q darle enter pase a la otra caja de texto pero no e encontrado nada en la web hasta ahora me podrias ayudar al respecto mi correo es josefranramirez@yahoo.es
Stoy haciendo un sistema para el comedor de una institucion y queria saber si me podrían facilitar el codigo de conexion cn base d dato mysql, el codigo de buscar un registro, modificarlo, eliminarlo y guardarlo, es de suma importancia..!! Las columnas serian, NOMBRE, APELLIDO, CEDULA, SEXO Y DIRECCION..!! Espero pronta respuesta.! Gracias de antemano
en este mismo blog esta un ejemplo con lo que pides. si el enlace esta roto, me avisas y te lo mando a tu correo nuevamente.
en este mismo blog esta un ejemplo con lo que pides. si el enlace esta roto, me avisas y te lo mando a tu correo nuevamente.
Muy bueno…
Yo aprendo a programar tocando y trasteando con gambas pero…
¡Ese programa que acabas de aportar es una ayuda enorme!