Luego de estar bastante tiempo sin publicar nada vuelvo con un nuevo post básico de programación, en este caso vamos a hacer un pequeño calendario donde podremos guardar actividades organizadas por fecha y hora en una base de datos SQLite 3.
Bueno para empezar ejecutamos Gambas, Seleccionamos la opción de nuevo proyecto, Aplicación gráfica y luego tildamos la opción de Acceso a base de datos, continuamos con el asistente y al finalizar llegaremos a la siguiente pantalla donde vemos el formulario vació y las barras de herramientas.
Ahora nos dirigiremos a la barra de proyecto (la que se encuentra a la izquierda de la pantalla y donde se puede ver la estructura de nuestro proyecto) y creamos dos módulos nuevos (eligiendo la correspondiente opción), uno llamado "Globales" donde definiremos las variables globales que se usarán dentro del programa y otro "BasedeDatos" donde estará el código que utilizaremos para realizar las operaciones de lectura y edición sobre la base de datos.
PUBLIC Conexion AS Connection 'Identificador de la conexión de base de datos
Donde definimos la variable conexión que servirá de identificador para utilizar la base de datos.
Luego necesitamos definir la estructura de almacenamiento de datos, para lo cual crearemos una tabla que llamaremos "Actividades" con los campos, id, fecha y actividad, para lo cual necesitaremos del siguiente código (que posteriormente lo escribiremos dentro del módulo "BasedeDatos":
DIM hTable AS Table
hTable = hConn.Tables.Add("Actividades"
WITH hTable
_.Fields.Add("id", db.Serial, 0)
_.Fields.Add("fecha", db.Date, 0)
_.Fields.Add("actividad", db.String, 0)
_.PrimaryKey = ["id"]
_.Update
END WITH
Definimos el campo "id" como clave principal ya que podremos tener varias actividades situadas en la misma fecha y hora y a futuro nos simplificará el proceso de eliminación y edición de registros.
'Procedimiento para agregar una nueva actividad
PUBLIC SUB AgregarActividad(Conexion AS Connection, Actividad AS String, Fecha AS Date)
_DIM Resultado AS Result
_Resultado = Conexion.Create("Actividades"
_Resultado["fecha"] = Fecha
_Resultado["actividad"] = Actividad
_Resultado.Update
_IF ERROR THEN
__Message("No se puede crear el registro", "Aceptar"
_ENDIF
END
PUBLIC SUB Borrar_seleccionado(Conexion AS Connection, id AS String)
_DIM Resultado AS Result
_Resultado = Conexion.edit("Actividades", "id=&1", id)
_TRY Resultado.Delete
_IF ERROR = FALSE THEN
__Message("Actividad eliminada","Aceptar"
_ELSE
__Message("No se pudo eliminar el registro", "Aceptar"
_ENDIF
END
PUBLIC SUB MostrarActividades(Conexion AS Connection, Tabla AS TableView, Fecha AS Date)
_DIM Resultado AS Result
_DIM Fecha_ing AS Date
_DIM Py AS Integer
_'Hacemos la consulta a la base de datos, seleccionamos todos los campos y los ordenamos por fecha de forma ascendente
_Resultado = Conexion.Exec("Select * from Actividades order by fecha ASC"
_'Definimos la tabla
_Tabla.Clear
_Tabla.Columns.Count = 4
_Tabla.Rows.Count = Resultado.Count
_Tabla.Columns[0].Text = "Hora"
_Tabla.Columns[0].Width = 100
_Tabla.Columns[1].Text = "Actividad"
_Tabla.Columns[1].Width = 250
_Tabla.Columns[2].Text = "Id"
_Tabla.Columns[2].Width = 50
_py = 0
_DO WHILE Resultado.Available
__'Cargamos los registros de la tabla actividades que coincidan con la fecha
__IF Date(Resultado["fecha"]) = Fecha THEN
___Tabla[py, 0].Text = Time(Hour(Resultado["fecha"]), Minute(Resultado["fecha"]), 0)
___Tabla[py, 1].Text = Resultado["actividad"]
___Tabla[py, 2].Text = Resultado["id"]
___'Coloreamos los registros
___IF py MOD 2 = 0 THEN
____Tabla[py, 0].BackColor = &FAFEFF&
____Tabla[py, 1].BackColor = &FAFEFF&
____Tabla[py, 2].BackColor = &FAFEFF&
___ELSE
____Tabla[py, 0].BackColor = &DEFFE4&
____Tabla[py, 1].BackColor = &DEFFE4&
____Tabla[py, 2].BackColor = &DEFFE4&
___ENDIF
___py = py + 1
__ENDIF
__Resultado.MoveNext()
_LOOP
END
'Procedimiento para abrir la base de datos o crearla en caso de que no exista
PUBLIC SUB InicializaBase()
_Globales.Conexion = NEW Connection
_Globales.Conexion.Type = "sqlite3"
_Globales.Conexion.Host = User.home
_Globales.Conexion.Name = ""
_TRY Globales.Conexion.Open()
_IF NOT Globales.Conexion.Databases.Exist("Calendario" THEN
__Message("La base de datos no existe, se creará una nueva", "Aceptar"
__Globales.Conexion.Databases.Add("Calendario"
__WAIT 0.5
_ENDIF
_Globales.Conexion.Close()
_Globales.Conexion.Host = User.home
_Globales.Conexion.Name = "Calendario"
_TRY Globales.Conexion.Open()
_IF ERROR THEN
__Message.Error("No se puede establecer conexión con la base de datos"
_ELSE
__IF NOT Globales.Conexion.Tables.Exist("Actividades" THEN
___CrearBase(Globales.Conexion)
__ENDIF
_ENDIF
END
'Creamos la tabla de la base de datos
PUBLIC SUB CrearBase(hConn AS Connection)
_DIM hTable AS Table
_hTable = hConn.Tables.Add("Actividades")
_WITH hTable
__.Fields.Add("id", db.Serial, 0)
__.Fields.Add("fecha", db.Date, 0)
__.Fields.Add("actividad", db.String, 0)
__.PrimaryKey = ["id"]
__.Update
_END WITH
END
'Procedimiento para abrir la base de datos o crearla en caso de que no exista
PUBLIC SUB InicializaBase()
__Globales.Conexion = NEW Connection
__Globales.Conexion.Type = "sqlite3"
__Globales.Conexion.Host = User.home
__Globales.Conexion.Name = ""
__TRY Globales.Conexion.Open()
__IF NOT Globales.Conexion.Databases.Exist("Calendario") THEN
___Message("La base de datos no existe, se creará una nueva", "Aceptar")
___Globales.Conexion.Databases.Add("Calendario")
___WAIT 0.5
__ENDIF
__Globales.Conexion.Close()
__Globales.Conexion.Host = User.home
__Globales.Conexion.Name = "Calendario"
__TRY Globales.Conexion.Open()
__IF ERROR THEN
___Message.Error("No se puede establecer conexión con la base de datos")
__ELSE
__IF NOT Globales.Conexion.Tables.Exist("Actividades") THEN
___CrearBase(Globales.Conexion)
__ENDIF
_ENDIF
END
'Procedimiento para agregar una nueva actividad
PUBLIC SUB AgregarActividad(Conexion AS Connection, Actividad AS String, Fecha AS Date)
_DIM Resultado AS Result
_Resultado = Conexion.Create("Actividades")
_Resultado["fecha"] = Fecha
_Resultado["actividad"] = Actividad
_Resultado.Update
_IF ERROR THEN
__Message("No se puede crear el registro", "Aceptar")
_ENDIF
END
PUBLIC SUB Borrar_seleccionado(Conexion AS Connection, id AS String)
_DIM Resultado AS Result
_Resultado = Conexion.edit("Actividades", "id=&1", id)
_TRY Resultado.Delete
_IF ERROR = FALSE THEN
__Message("Actividad eliminada","Aceptar")
_ELSE
__Message("No se pudo eliminar el registro", "Aceptar")
_ENDIF
END
'Procedimiento para mostrar la lista de actividades
PUBLIC SUB MostrarActividades(Conexion AS Connection, Tabla AS TableView, Fecha AS Date)
_DIM Resultado AS Result
_DIM Fecha_ing AS Date
_DIM Py AS Integer
_'Hacemos la consulta a la base de datos, seleccionamos todos los campos y los ordenamos por fecha de forma ascendente
_Resultado = Conexion.Exec("Select * from Actividades order by fecha ASC")
_'Definimos la tabla
_Tabla.Clear
_Tabla.Columns.Count = 4
_Tabla.Rows.Count = Resultado.Count
_Tabla.Columns[0].Text = "Hora"
_Tabla.Columns[0].Width = 100
_Tabla.Columns[1].Text = "Actividad"
_Tabla.Columns[1].Width = 250
_Tabla.Columns[2].Text = "Id"
_Tabla.Columns[2].Width = 50
_py = 0
_DO WHILE Resultado.Available
__'Cargamos los registros de la tabla actividades que coincidan con la fecha
__IF Date(Resultado["fecha"]) = Fecha THEN
___Tabla[py, 0].Text = Time(Hour(Resultado["fecha"]), Minute(Resultado["fecha"]), 0)
___Tabla[py, 1].Text = Resultado["actividad"]
___Tabla[py, 2].Text = Resultado["id"]
___'Coloreamos los registros
___IF py MOD 2 = 0 THEN
____Tabla[py, 0].BackColor = &FAFEFF&
____Tabla[py, 1].BackColor = &FAFEFF&
____Tabla[py, 2].BackColor = &FAFEFF&
___ELSE
____Tabla[py, 0].BackColor = &DEFFE4&
____Tabla[py, 1].BackColor = &DEFFE4&
____Tabla[py, 2].BackColor = &DEFFE4&
___ENDIF
___py = py + 1
__ENDIF
__Resultado.MoveNext()
_LOOP
END
Luego en el formulario principal agregamos el componente Datechooser, que nos servirá para elegir la fecha para ver las actividades que concuerdan con aquella que se haya seleccionado y al mismo tiempo disponer de un valor de fecha para crear un nuevo registro.
Una vez situado hacemos doble click sobre el lo que nos llevará a la ventana de edición de código del formulario situándonos en el evento de cambio de fecha. En dicho lugar escribimos el siguiente código:
DIM Dia, Mes, Anio AS Integer
Dia = DateChooser1.Day
Mes = DateChooser1.Month
Anio = DateChooser1.Year
'Mostramos las actividades del dia seleccionado
BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0))
Donde definimos variables locales donde almacenamos los valores de los componentes de la fecha seleccionada para poder pasárselos como parámetro al procedimiento que muestra las actividades que concuerdan con día (procedimiento escrito anteriormente en el módulo "BasedeDatos".
Luego creamos un control Tableview1 donde más tarde mostraremos las actividades guardadas
Creamos controles
* TextArea1 Para introducir la descripción de la actividad
* Spinbox1 Para introducir el valor de la hora
* Spinbox2: Para introducir el valor de los minutos
Un botón agregar donde hacemos doble click para acceder al evento button_click y escribir el siguiente código:
_DIM Dia, Mes, Anio AS Integer
_'Validamos que se completen los campos nesesarios
IF TextArea1.Text <> "" THEN
_Dia = DateChooser1.Day
_Mes = DateChooser1.Month
_Anio = DateChooser1.Year
_'Guardamos la actividad ingresada en la tabla "Actividades" llamando al procedimiento AgregarActividad del modulo BasdeDatos
_BasedeDatos.AgregarActividad(Globales.Conexion, TextArea1.Text, Date(Anio, Mes, Dia, SpinBox1.Value, SpinBox2.Value, 0))
_'Borramos el campo de actividad
_TextArea1.Text = ""
_'Actualizamos la lista de actividades
_BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0))
ELSE
_Message("Se debe completar el campo actividad", "Aceptar")
ENDIF
Y un botón para eliminar las actividades que se muestren en el control TableView1 (es importante definir la propiedad Mode = Single del TableView para poder elegir los registros), dentro del evento Button_click de dicho control escribimos el siguiente código:
DIM Dia, Mes, Anio AS Integer
Dia = DateChooser1.Day
Mes = DateChooser1.Month
Anio = DateChooser1.Year
'Borramos el registro
BasedeDatos.Borrar_seleccionado(Globales.Conexion, TableView1[TableView1.Row, 2].Text)
'Actualizamos la lista de actividades
BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0))
En este ejemplo no cambiamos los nombres predeterminados de los controles, pero se puede hacer editando la propiedad "name" de los mismos, lo que en programas más grandes será de utilidad evitado posibles confusiones al momento de programar
PUBLIC SUB Form_Open()
_BasedeDatos.InicializaBase
END
PUBLIC SUB DateChooser1_Change()
_DIM Dia, Mes, Anio AS Integer
_Dia = DateChooser1.Day
_Mes = DateChooser1.Month
_Anio = DateChooser1.Year
_'Mostramos las actividades del dia seleccionado
_BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0))
END
PUBLIC SUB Button1_Click()
_DIM Dia, Mes, Anio AS Integer
_'Validamos que se completen los campos nesesarios
_IF TextArea1.Text <> "" THEN
__Dia = DateChooser1.Day
__Mes = DateChooser1.Month
__Anio = DateChooser1.Year
__'Guardamos la actividad ingresada en la tabla "Actividades" llamando al procedimiento AgregarActividad del modulo BasdeDatos
__BasedeDatos.AgregarActividad(Globales.Conexion, TextArea1.Text, Date(Anio, Mes, Dia, SpinBox1.Value, SpinBox2.Value, 0))
__'Borramos el campo de actividad
__TextArea1.Text = ""
__'Actualizamos la lista de actividades
__BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0))
_ELSE
__Message("Se debe completar el campo actividad", "Aceptar")
_ENDIF
END
PUBLIC SUB Button2_Click()
_DIM Dia, Mes, Anio AS Integer
_Dia = DateChooser1.Day
_Mes = DateChooser1.Month
_Anio = DateChooser1.Year
_'Borramos el registro
_BasedeDatos.Borrar_seleccionado(Globales.Conexion, TableView1[TableView1.Row, 2].Text)
_'Actualizamos la lista de actividades
_BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0))
END
Y aquí ya tenemos la primera versión del programa finalizada, luego continuaremos agregándole características y afinando el código.
También podremos generar un paquete instalable para las distribuciones de linux más conocidas.
Link de descarga del proyecto gambas 2:
https://drive.google.com/file/d/0B9MnFXiRgNREVEFtMlBHc3gycU0/edit?usp=sharing
Bueno para empezar ejecutamos Gambas, Seleccionamos la opción de nuevo proyecto, Aplicación gráfica y luego tildamos la opción de Acceso a base de datos, continuamos con el asistente y al finalizar llegaremos a la siguiente pantalla donde vemos el formulario vació y las barras de herramientas.
Ahora nos dirigiremos a la barra de proyecto (la que se encuentra a la izquierda de la pantalla y donde se puede ver la estructura de nuestro proyecto) y creamos dos módulos nuevos (eligiendo la correspondiente opción), uno llamado "Globales" donde definiremos las variables globales que se usarán dentro del programa y otro "BasedeDatos" donde estará el código que utilizaremos para realizar las operaciones de lectura y edición sobre la base de datos.
Módulo "Globales"
PUBLIC Conexion AS Connection 'Identificador de la conexión de base de datos
Donde definimos la variable conexión que servirá de identificador para utilizar la base de datos.
Módulo "BasedeDatos"
Luego necesitamos definir la estructura de almacenamiento de datos, para lo cual crearemos una tabla que llamaremos "Actividades" con los campos, id, fecha y actividad, para lo cual necesitaremos del siguiente código (que posteriormente lo escribiremos dentro del módulo "BasedeDatos":
DIM hTable AS Table
hTable = hConn.Tables.Add("Actividades"
WITH hTable
_.Fields.Add("id", db.Serial, 0)
_.Fields.Add("fecha", db.Date, 0)
_.Fields.Add("actividad", db.String, 0)
_.PrimaryKey = ["id"]
_.Update
END WITH
Definimos el campo "id" como clave principal ya que podremos tener varias actividades situadas en la misma fecha y hora y a futuro nos simplificará el proceso de eliminación y edición de registros.
Ahora para guardar datos utilizamos el siguiente código:
'Procedimiento para agregar una nueva actividad
PUBLIC SUB AgregarActividad(Conexion AS Connection, Actividad AS String, Fecha AS Date)
_DIM Resultado AS Result
_Resultado = Conexion.Create("Actividades"
_Resultado["fecha"] = Fecha
_Resultado["actividad"] = Actividad
_Resultado.Update
_IF ERROR THEN
__Message("No se puede crear el registro", "Aceptar"
_ENDIF
END
Para eliminar los registros necesitamos del código:
PUBLIC SUB Borrar_seleccionado(Conexion AS Connection, id AS String)
_DIM Resultado AS Result
_Resultado = Conexion.edit("Actividades", "id=&1", id)
_TRY Resultado.Delete
_IF ERROR = FALSE THEN
__Message("Actividad eliminada","Aceptar"
_ELSE
__Message("No se pudo eliminar el registro", "Aceptar"
_ENDIF
END
Para poder cargar los registros en un control Tableview
PUBLIC SUB MostrarActividades(Conexion AS Connection, Tabla AS TableView, Fecha AS Date)
_DIM Resultado AS Result
_DIM Fecha_ing AS Date
_DIM Py AS Integer
_'Hacemos la consulta a la base de datos, seleccionamos todos los campos y los ordenamos por fecha de forma ascendente
_Resultado = Conexion.Exec("Select * from Actividades order by fecha ASC"
_'Definimos la tabla
_Tabla.Clear
_Tabla.Columns.Count = 4
_Tabla.Rows.Count = Resultado.Count
_Tabla.Columns[0].Text = "Hora"
_Tabla.Columns[0].Width = 100
_Tabla.Columns[1].Text = "Actividad"
_Tabla.Columns[1].Width = 250
_Tabla.Columns[2].Text = "Id"
_Tabla.Columns[2].Width = 50
_py = 0
_DO WHILE Resultado.Available
__'Cargamos los registros de la tabla actividades que coincidan con la fecha
__IF Date(Resultado["fecha"]) = Fecha THEN
___Tabla[py, 0].Text = Time(Hour(Resultado["fecha"]), Minute(Resultado["fecha"]), 0)
___Tabla[py, 1].Text = Resultado["actividad"]
___Tabla[py, 2].Text = Resultado["id"]
___'Coloreamos los registros
___IF py MOD 2 = 0 THEN
____Tabla[py, 0].BackColor = &FAFEFF&
____Tabla[py, 1].BackColor = &FAFEFF&
____Tabla[py, 2].BackColor = &FAFEFF&
___ELSE
____Tabla[py, 0].BackColor = &DEFFE4&
____Tabla[py, 1].BackColor = &DEFFE4&
____Tabla[py, 2].BackColor = &DEFFE4&
___ENDIF
___py = py + 1
__ENDIF
__Resultado.MoveNext()
_LOOP
END
Para hacer la carga de base de datos:
'Procedimiento para abrir la base de datos o crearla en caso de que no exista
PUBLIC SUB InicializaBase()
_Globales.Conexion = NEW Connection
_Globales.Conexion.Type = "sqlite3"
_Globales.Conexion.Host = User.home
_Globales.Conexion.Name = ""
_TRY Globales.Conexion.Open()
_IF NOT Globales.Conexion.Databases.Exist("Calendario" THEN
__Message("La base de datos no existe, se creará una nueva", "Aceptar"
__Globales.Conexion.Databases.Add("Calendario"
__WAIT 0.5
_ENDIF
_Globales.Conexion.Close()
_Globales.Conexion.Host = User.home
_Globales.Conexion.Name = "Calendario"
_TRY Globales.Conexion.Open()
_IF ERROR THEN
__Message.Error("No se puede establecer conexión con la base de datos"
_ELSE
__IF NOT Globales.Conexion.Tables.Exist("Actividades" THEN
___CrearBase(Globales.Conexion)
__ENDIF
_ENDIF
END
Por lo que el código entero del archivo nos quedará:
'Creamos la tabla de la base de datos
PUBLIC SUB CrearBase(hConn AS Connection)
_DIM hTable AS Table
_hTable = hConn.Tables.Add("Actividades")
_WITH hTable
__.Fields.Add("id", db.Serial, 0)
__.Fields.Add("fecha", db.Date, 0)
__.Fields.Add("actividad", db.String, 0)
__.PrimaryKey = ["id"]
__.Update
_END WITH
END
'Procedimiento para abrir la base de datos o crearla en caso de que no exista
PUBLIC SUB InicializaBase()
__Globales.Conexion = NEW Connection
__Globales.Conexion.Type = "sqlite3"
__Globales.Conexion.Host = User.home
__Globales.Conexion.Name = ""
__TRY Globales.Conexion.Open()
__IF NOT Globales.Conexion.Databases.Exist("Calendario") THEN
___Message("La base de datos no existe, se creará una nueva", "Aceptar")
___Globales.Conexion.Databases.Add("Calendario")
___WAIT 0.5
__ENDIF
__Globales.Conexion.Close()
__Globales.Conexion.Host = User.home
__Globales.Conexion.Name = "Calendario"
__TRY Globales.Conexion.Open()
__IF ERROR THEN
___Message.Error("No se puede establecer conexión con la base de datos")
__ELSE
__IF NOT Globales.Conexion.Tables.Exist("Actividades") THEN
___CrearBase(Globales.Conexion)
__ENDIF
_ENDIF
END
'Procedimiento para agregar una nueva actividad
PUBLIC SUB AgregarActividad(Conexion AS Connection, Actividad AS String, Fecha AS Date)
_DIM Resultado AS Result
_Resultado = Conexion.Create("Actividades")
_Resultado["fecha"] = Fecha
_Resultado["actividad"] = Actividad
_Resultado.Update
_IF ERROR THEN
__Message("No se puede crear el registro", "Aceptar")
_ENDIF
END
PUBLIC SUB Borrar_seleccionado(Conexion AS Connection, id AS String)
_DIM Resultado AS Result
_Resultado = Conexion.edit("Actividades", "id=&1", id)
_TRY Resultado.Delete
_IF ERROR = FALSE THEN
__Message("Actividad eliminada","Aceptar")
_ELSE
__Message("No se pudo eliminar el registro", "Aceptar")
_ENDIF
END
'Procedimiento para mostrar la lista de actividades
PUBLIC SUB MostrarActividades(Conexion AS Connection, Tabla AS TableView, Fecha AS Date)
_DIM Resultado AS Result
_DIM Fecha_ing AS Date
_DIM Py AS Integer
_'Hacemos la consulta a la base de datos, seleccionamos todos los campos y los ordenamos por fecha de forma ascendente
_Resultado = Conexion.Exec("Select * from Actividades order by fecha ASC")
_'Definimos la tabla
_Tabla.Clear
_Tabla.Columns.Count = 4
_Tabla.Rows.Count = Resultado.Count
_Tabla.Columns[0].Text = "Hora"
_Tabla.Columns[0].Width = 100
_Tabla.Columns[1].Text = "Actividad"
_Tabla.Columns[1].Width = 250
_Tabla.Columns[2].Text = "Id"
_Tabla.Columns[2].Width = 50
_py = 0
_DO WHILE Resultado.Available
__'Cargamos los registros de la tabla actividades que coincidan con la fecha
__IF Date(Resultado["fecha"]) = Fecha THEN
___Tabla[py, 0].Text = Time(Hour(Resultado["fecha"]), Minute(Resultado["fecha"]), 0)
___Tabla[py, 1].Text = Resultado["actividad"]
___Tabla[py, 2].Text = Resultado["id"]
___'Coloreamos los registros
___IF py MOD 2 = 0 THEN
____Tabla[py, 0].BackColor = &FAFEFF&
____Tabla[py, 1].BackColor = &FAFEFF&
____Tabla[py, 2].BackColor = &FAFEFF&
___ELSE
____Tabla[py, 0].BackColor = &DEFFE4&
____Tabla[py, 1].BackColor = &DEFFE4&
____Tabla[py, 2].BackColor = &DEFFE4&
___ENDIF
___py = py + 1
__ENDIF
__Resultado.MoveNext()
_LOOP
END
Formulario principal
Luego en el formulario principal agregamos el componente Datechooser, que nos servirá para elegir la fecha para ver las actividades que concuerdan con aquella que se haya seleccionado y al mismo tiempo disponer de un valor de fecha para crear un nuevo registro.
Una vez situado hacemos doble click sobre el lo que nos llevará a la ventana de edición de código del formulario situándonos en el evento de cambio de fecha. En dicho lugar escribimos el siguiente código:
DIM Dia, Mes, Anio AS Integer
Dia = DateChooser1.Day
Mes = DateChooser1.Month
Anio = DateChooser1.Year
'Mostramos las actividades del dia seleccionado
BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0))
Donde definimos variables locales donde almacenamos los valores de los componentes de la fecha seleccionada para poder pasárselos como parámetro al procedimiento que muestra las actividades que concuerdan con día (procedimiento escrito anteriormente en el módulo "BasedeDatos".
Luego creamos un control Tableview1 donde más tarde mostraremos las actividades guardadas
Creamos controles
* TextArea1 Para introducir la descripción de la actividad
* Spinbox1 Para introducir el valor de la hora
* Spinbox2: Para introducir el valor de los minutos
Un botón agregar donde hacemos doble click para acceder al evento button_click y escribir el siguiente código:
_DIM Dia, Mes, Anio AS Integer
_'Validamos que se completen los campos nesesarios
IF TextArea1.Text <> "" THEN
_Dia = DateChooser1.Day
_Mes = DateChooser1.Month
_Anio = DateChooser1.Year
_'Guardamos la actividad ingresada en la tabla "Actividades" llamando al procedimiento AgregarActividad del modulo BasdeDatos
_BasedeDatos.AgregarActividad(Globales.Conexion, TextArea1.Text, Date(Anio, Mes, Dia, SpinBox1.Value, SpinBox2.Value, 0))
_'Borramos el campo de actividad
_TextArea1.Text = ""
_'Actualizamos la lista de actividades
_BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0))
ELSE
_Message("Se debe completar el campo actividad", "Aceptar")
ENDIF
Y un botón para eliminar las actividades que se muestren en el control TableView1 (es importante definir la propiedad Mode = Single del TableView para poder elegir los registros), dentro del evento Button_click de dicho control escribimos el siguiente código:
DIM Dia, Mes, Anio AS Integer
Dia = DateChooser1.Day
Mes = DateChooser1.Month
Anio = DateChooser1.Year
'Borramos el registro
BasedeDatos.Borrar_seleccionado(Globales.Conexion, TableView1[TableView1.Row, 2].Text)
'Actualizamos la lista de actividades
BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0))
En este ejemplo no cambiamos los nombres predeterminados de los controles, pero se puede hacer editando la propiedad "name" de los mismos, lo que en programas más grandes será de utilidad evitado posibles confusiones al momento de programar
El código del formulario principal nos debe quedar así
PUBLIC SUB Form_Open()
_BasedeDatos.InicializaBase
END
PUBLIC SUB DateChooser1_Change()
_DIM Dia, Mes, Anio AS Integer
_Dia = DateChooser1.Day
_Mes = DateChooser1.Month
_Anio = DateChooser1.Year
_'Mostramos las actividades del dia seleccionado
_BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0))
END
PUBLIC SUB Button1_Click()
_DIM Dia, Mes, Anio AS Integer
_'Validamos que se completen los campos nesesarios
_IF TextArea1.Text <> "" THEN
__Dia = DateChooser1.Day
__Mes = DateChooser1.Month
__Anio = DateChooser1.Year
__'Guardamos la actividad ingresada en la tabla "Actividades" llamando al procedimiento AgregarActividad del modulo BasdeDatos
__BasedeDatos.AgregarActividad(Globales.Conexion, TextArea1.Text, Date(Anio, Mes, Dia, SpinBox1.Value, SpinBox2.Value, 0))
__'Borramos el campo de actividad
__TextArea1.Text = ""
__'Actualizamos la lista de actividades
__BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0))
_ELSE
__Message("Se debe completar el campo actividad", "Aceptar")
_ENDIF
END
PUBLIC SUB Button2_Click()
_DIM Dia, Mes, Anio AS Integer
_Dia = DateChooser1.Day
_Mes = DateChooser1.Month
_Anio = DateChooser1.Year
_'Borramos el registro
_BasedeDatos.Borrar_seleccionado(Globales.Conexion, TableView1[TableView1.Row, 2].Text)
_'Actualizamos la lista de actividades
_BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0))
END
Y aquí ya tenemos la primera versión del programa finalizada, luego continuaremos agregándole características y afinando el código.
También podremos generar un paquete instalable para las distribuciones de linux más conocidas.
Link de descarga del proyecto gambas 2:
https://drive.google.com/file/d/0B9MnFXiRgNREVEFtMlBHc3gycU0/edit?usp=sharing

