Me abri el codigo y me los estudie un poco ya que de raiz no sabria programarlo me monte una buena faena con el sqlite browser ya que hace el programa uso de base de datos local y no sabia que se podia editar el contenido de las tablas clickeando en aplicaciones en el IDE gambas pero logre descubrirlo.
Bueno he logrado hacer que el programa funcione me falta traducirlo en los comentarios.
No logro entender ciertas cosas y no se si es fallo del codigo o de la parte grafica.Pero tengo un pequeño problema.
Quiero que el contenido del Fmain se expanda al maximizar la ventana o redimensionarla por eso le meti un control Hbox y active la propriedad Fill en el Fmain y le active evento expand en Hbox pero me expande solo una imagen que tengo en Fmain y no el contenido de la columnview y botones.
Otra cosa alguien sabe como podria alinear el contenido de las celdas de la base de datos por ejemplo a "center" o bien ponerle espacio - porque algunas celdas se me colan a otras.
Os dejo imagen y código.
Con Hbox
Sin Hbox
' gambas class file
Private conexion As Connection
Private clave As String
Private campos As New String[7]
Private consultaTabla As Result
Public Sub _new()
'Inicializamos la clave, que posteriormente
'será usada para conocer el número de fila
'en el que se encuentra el cliente que necesitemos
clave = "0"
'Inicializamos los campos
campos[0] = "id"
campos[1] = "Nome"
campos[2] = "Apelido"
campos[3] = "Idade"
campos[4] = "NIF"
campos[5] = "Ano"
campos[6] = "Fone"
End
Public Sub Form_Open()
'Introducimos los datos de la cabecera de nuestra tabla
'cvClientes es el objeto de tipo ColumnView que hemos añadido
'al form
cvClientes.Clear()
'Especificamos el numero de columnas de la tabla
cvClientes.Columns.Count = 7
cvClientes.Columns[0].Text = campos[0]
cvClientes.Columns[1].Text = campos[1]
cvClientes.Columns[2].Text = campos[2]
cvClientes.Columns[3].Text = campos[3]
cvClientes.Columns[4].Text = campos[4]
cvClientes.Columns[5].Text = campos[5]
cvClientes.Columns[6].Text = campos[6]
'Comprobamos si tenemos conexión a la base de datos
If AbrirConexion() Then Return
'En cuyo caso almacenamos sus valores en la variable
'de tipo Result consultaTabla
consultaTabla = conexion.Exec("select * from Clientes")
'Hemos seleccionado todos los elementos de la base Clientes y
'almacenado en la variable consultaTabla
'Si hay elementos en la base los mostramos en la tabla
If consultaTabla.Available Then MostrarRegistros()
End
Public Function AbrirConexion() As Boolean
'Esta funcion devuelve False si la conexion se lleva a cabo
'correctamente
'Si ya hay una conexion salimos de la funcion
If conexion <> Null Then Return False
'En caso contrario, instanciamos un objeto del tipo Connection y creamos la conexión
conexion = New Connection
conexion.Type = "sqlite3"
conexion.Host = "/home/joao/gambices/basedado/BaseDatosClientes"
conexion.Name = "Clientes"
Try conexion.Open()
If Error Then
Message.Error("Error al conectar a la base de datos")
conexion = Null
Return True
Endif
Return False
End
Public Sub CerrarConexion()
'Aquí cerramos la conexión en caso de que así se requiera
'Si la conexion esta cerrada, se sale del método, y si no lo esta
'se cierra
If conexion = Null Then Return
conexion.Close()
conexion = Null
End
Public Sub MostrarRegistros()
'Aqui se van a volcar todos los valores de la base de datos en
'nuestra tabla. Previamente tenemos los valores volcados
'en la variable consultaTabla, que es del tipo Result
Do While consultaTabla.Available
'Aqui recogemos el valor de la clave, que en nuestra base
'de datos es el registro correspondiente a id.
clave = consultaTabla["id"]
'Debemos primeramente añadir la nueva fila en la tabla. Para ello
'se utiliza el método Add.
cvClientes.Add(clave, clave)
'El primer elemento de la nueva fila es id
'A esa fila se accede utilizando la referencia "clave"
'Como ya hemos indicado que tenemos 6 columnas, podemos
'ir indicando la posición dentro de esa fila
cvClientes[clave][1] = consultaTabla[campos[1]]
cvClientes[clave][2] = consultaTabla[campos[2]]
cvClientes[clave][3] = consultaTabla[campos[3]]
cvClientes[clave][4] = consultaTabla[campos[4]]
cvClientes[clave][5] = consultaTabla[campos[5]]
cvClientes[clave][6] = consultaTabla[campos[6]]
consultaTabla.moveNext()
Loop
CerrarConexion()
End
Public Sub btnNuevo_Click()
'Para introducir un nuevo elemento vamos a utilizar otra
'ventana, que debe ser llamada desde este método
'y que cuando se cierre vuelva aquí
'Comprobamos primero si la conexión es posible
If AbrirConexion() Then Return
'En cuyo caso llamamos a la nueva ventana y le enviamos
'las variables que necesite para operar
FData.RunNew(conexion, clave)
'Cuando se cierre la nueva ventana el programa vuelve a este
'punto, por lo que debemos cerrar la operación
CerrarConexion()
'Y llamar a la rutina Form_Open para que muestre el nuevo
'cliente en nuestra tabla (recordemos que dentro de esa rutina se
'llama al metodo MostrarClientes)
Form_Open()
End
Public Sub btnModificar_Click()
'Cuando el botón modificar es pulsado hay que
'hacer comprobaciones
'Necesitamos también de una variable Result para
'ser pasada a la nueva ventana
Dim consultaTablaModificar As Result
If cvClientes.Current = Null Then Return
If cvClientes.Current.Selected = False Then
Message.Info("Debe seleccionar algun cliente")
Return
Endif
If AbrirConexion() Then Return
consultaTablaModificar = conexion.Edit("Clientes", "id=&1", cvClientes.Current.key)
'Ya tenemos la variable con el Cliente de la base de datos que corresponde, así
'que podemos proceder a llamar a la nueva ventana enviando las variables
FData.RunEdit(consultaTablaModificar)
'Cuando se cierre la nueva ventana el programa seguirá su ejecución por aquí
'Ahora debemos actualizar nuestra tabla y cerrar la conexion
cvClientes.Current[0] = consultaTablaModificar[campos[0]]
cvClientes.Current[1] = consultaTablaModificar[campos[1]]
cvClientes.Current[2] = consultaTablaModificar[campos[2]]
cvClientes.Current[3] = consultaTablaModificar[campos[3]]
cvClientes.Current[4] = consultaTablaModificar[campos[4]]
cvClientes.Current[5] = consultaTablaModificar[campos[5]]
cvClientes.Current[6] = consultaTablaModificar[campos[6]]
CerrarConexion()
End
Public Sub btnBorrar_Click()
'Cuando el botón borrar es pulsado
'hay que hacer una serie de comprobaciones
'La primera es comprobar si existe el cliente
If cvClientes.Current = Null Then Return
'Después si hay alguno pulsado
If cvClientes.Current.Selected = False Then
Message.Info("Debe seleccionar algun cliente")
Return
Endif
'Comprobamos si hay conexión (recordar que si devuelve True indica
'que no hay conexión)
If AbrirConexion() Then Return
If Message.Question("Borrar Cliente", "si", "no") = 2 Then
CerrarConexion()
Return
Endif
Try conexion.Exec("delete from Clientes where id=&1", cvClientes.Key)
If Error Then Message.Error("Imposible eliminar el Cliente")
CerrarConexion()
cvClientes.Current.Delete()
clave = Str((Val(clave)) - 1)
End
Public Sub btnSalir_Click()
Me.Close()
End
Public Sub VBox1_MouseDown()
End
Private conexion As Connection
Private clave As String
Private campos As New String[7]
Private consultaTabla As Result
Public Sub _new()
'Inicializamos la clave, que posteriormente
'será usada para conocer el número de fila
'en el que se encuentra el cliente que necesitemos
clave = "0"
'Inicializamos los campos
campos[0] = "id"
campos[1] = "Nome"
campos[2] = "Apelido"
campos[3] = "Idade"
campos[4] = "NIF"
campos[5] = "Ano"
campos[6] = "Fone"
End
Public Sub Form_Open()
'Introducimos los datos de la cabecera de nuestra tabla
'cvClientes es el objeto de tipo ColumnView que hemos añadido
'al form
cvClientes.Clear()
'Especificamos el numero de columnas de la tabla
cvClientes.Columns.Count = 7
cvClientes.Columns[0].Text = campos[0]
cvClientes.Columns[1].Text = campos[1]
cvClientes.Columns[2].Text = campos[2]
cvClientes.Columns[3].Text = campos[3]
cvClientes.Columns[4].Text = campos[4]
cvClientes.Columns[5].Text = campos[5]
cvClientes.Columns[6].Text = campos[6]
'Comprobamos si tenemos conexión a la base de datos
If AbrirConexion() Then Return
'En cuyo caso almacenamos sus valores en la variable
'de tipo Result consultaTabla
consultaTabla = conexion.Exec("select * from Clientes")
'Hemos seleccionado todos los elementos de la base Clientes y
'almacenado en la variable consultaTabla
'Si hay elementos en la base los mostramos en la tabla
If consultaTabla.Available Then MostrarRegistros()
End
Public Function AbrirConexion() As Boolean
'Esta funcion devuelve False si la conexion se lleva a cabo
'correctamente
'Si ya hay una conexion salimos de la funcion
If conexion <> Null Then Return False
'En caso contrario, instanciamos un objeto del tipo Connection y creamos la conexión
conexion = New Connection
conexion.Type = "sqlite3"
conexion.Host = "/home/joao/gambices/basedado/BaseDatosClientes"
conexion.Name = "Clientes"
Try conexion.Open()
If Error Then
Message.Error("Error al conectar a la base de datos")
conexion = Null
Return True
Endif
Return False
End
Public Sub CerrarConexion()
'Aquí cerramos la conexión en caso de que así se requiera
'Si la conexion esta cerrada, se sale del método, y si no lo esta
'se cierra
If conexion = Null Then Return
conexion.Close()
conexion = Null
End
Public Sub MostrarRegistros()
'Aqui se van a volcar todos los valores de la base de datos en
'nuestra tabla. Previamente tenemos los valores volcados
'en la variable consultaTabla, que es del tipo Result
Do While consultaTabla.Available
'Aqui recogemos el valor de la clave, que en nuestra base
'de datos es el registro correspondiente a id.
clave = consultaTabla["id"]
'Debemos primeramente añadir la nueva fila en la tabla. Para ello
'se utiliza el método Add.
cvClientes.Add(clave, clave)
'El primer elemento de la nueva fila es id
'A esa fila se accede utilizando la referencia "clave"
'Como ya hemos indicado que tenemos 6 columnas, podemos
'ir indicando la posición dentro de esa fila
cvClientes[clave][1] = consultaTabla[campos[1]]
cvClientes[clave][2] = consultaTabla[campos[2]]
cvClientes[clave][3] = consultaTabla[campos[3]]
cvClientes[clave][4] = consultaTabla[campos[4]]
cvClientes[clave][5] = consultaTabla[campos[5]]
cvClientes[clave][6] = consultaTabla[campos[6]]
consultaTabla.moveNext()
Loop
CerrarConexion()
End
Public Sub btnNuevo_Click()
'Para introducir un nuevo elemento vamos a utilizar otra
'ventana, que debe ser llamada desde este método
'y que cuando se cierre vuelva aquí
'Comprobamos primero si la conexión es posible
If AbrirConexion() Then Return
'En cuyo caso llamamos a la nueva ventana y le enviamos
'las variables que necesite para operar
FData.RunNew(conexion, clave)
'Cuando se cierre la nueva ventana el programa vuelve a este
'punto, por lo que debemos cerrar la operación
CerrarConexion()
'Y llamar a la rutina Form_Open para que muestre el nuevo
'cliente en nuestra tabla (recordemos que dentro de esa rutina se
'llama al metodo MostrarClientes)
Form_Open()
End
Public Sub btnModificar_Click()
'Cuando el botón modificar es pulsado hay que
'hacer comprobaciones
'Necesitamos también de una variable Result para
'ser pasada a la nueva ventana
Dim consultaTablaModificar As Result
If cvClientes.Current = Null Then Return
If cvClientes.Current.Selected = False Then
Message.Info("Debe seleccionar algun cliente")
Return
Endif
If AbrirConexion() Then Return
consultaTablaModificar = conexion.Edit("Clientes", "id=&1", cvClientes.Current.key)
'Ya tenemos la variable con el Cliente de la base de datos que corresponde, así
'que podemos proceder a llamar a la nueva ventana enviando las variables
FData.RunEdit(consultaTablaModificar)
'Cuando se cierre la nueva ventana el programa seguirá su ejecución por aquí
'Ahora debemos actualizar nuestra tabla y cerrar la conexion
cvClientes.Current[0] = consultaTablaModificar[campos[0]]
cvClientes.Current[1] = consultaTablaModificar[campos[1]]
cvClientes.Current[2] = consultaTablaModificar[campos[2]]
cvClientes.Current[3] = consultaTablaModificar[campos[3]]
cvClientes.Current[4] = consultaTablaModificar[campos[4]]
cvClientes.Current[5] = consultaTablaModificar[campos[5]]
cvClientes.Current[6] = consultaTablaModificar[campos[6]]
CerrarConexion()
End
Public Sub btnBorrar_Click()
'Cuando el botón borrar es pulsado
'hay que hacer una serie de comprobaciones
'La primera es comprobar si existe el cliente
If cvClientes.Current = Null Then Return
'Después si hay alguno pulsado
If cvClientes.Current.Selected = False Then
Message.Info("Debe seleccionar algun cliente")
Return
Endif
'Comprobamos si hay conexión (recordar que si devuelve True indica
'que no hay conexión)
If AbrirConexion() Then Return
If Message.Question("Borrar Cliente", "si", "no") = 2 Then
CerrarConexion()
Return
Endif
Try conexion.Exec("delete from Clientes where id=&1", cvClientes.Key)
If Error Then Message.Error("Imposible eliminar el Cliente")
CerrarConexion()
cvClientes.Current.Delete()
clave = Str((Val(clave)) - 1)
End
Public Sub btnSalir_Click()
Me.Close()
End
Public Sub VBox1_MouseDown()
End
' gambas class file
Private conexion As Connection
Private clave As String
Private modificando As Boolean
Private consultaTablaModificar As Result
Public Sub RunNew(DataConexion As Connection, DataClave As String)
'Este método recibe las variables conexion y clave de
'la ventana principal
modificando = False
'Estas variables son almacenadas para ser usadas si el
'cliente clica Aceptar
conexion = DataConexion
clave = DataClave
'La nueva Clave debe incrementarse en uno, asi que
clave = Str((Val(clave)) + 1)
'Esta ventana estará activa mientras no sea cerrada
Me.ShowModal()
End
Public Sub RunEdit(DataConsultaTablaModificar As Result)
consultaTablaModificar = DataConsultaTablaModificar
modificando = True
txtNombre.Text = consultaTablaModificar["Nome"]
txtApellido1.Text = consultaTablaModificar["Apelido"]
txtApellido2.Text = consultaTablaModificar["Idade"]
txtNIF.Text = consultaTablaModificar["NIF"]
txtLetra.Text = consultaTablaModificar["Ano"]
txtFone.Text = consultaTablaModificar["Fone"]
Me.ShowModal()
End
Public Sub btnAceptar_Click()
If modificando Then
consultaTablaModificar["Nome"] = txtNombre.Text
consultaTablaModificar["Apelido"] = txtApellido1.Text
consultaTablaModificar["Idade"] = txtApellido2.Text
consultaTablaModificar["NIF"] = txtNIF.Text
consultaTablaModificar["Ano"] = txtLetra.Text
consultaTablaModificar["Fone"] = txtFone.Text
consultaTablaModificar.Update()
Else
Try conexion.Exec("insert into Clientes values (&1,&2,&3,&4,&5,&6,&7)", clave, txtNombre.Text, txtApellido1.Text, txtApellido2.Text, txtNIF.Text, txtLetra.Text, txtFone.Text)
Endif
Me.Close()
End
Public Sub btnCancelar_Click()
Me.Close()
End
Private conexion As Connection
Private clave As String
Private modificando As Boolean
Private consultaTablaModificar As Result
Public Sub RunNew(DataConexion As Connection, DataClave As String)
'Este método recibe las variables conexion y clave de
'la ventana principal
modificando = False
'Estas variables son almacenadas para ser usadas si el
'cliente clica Aceptar
conexion = DataConexion
clave = DataClave
'La nueva Clave debe incrementarse en uno, asi que
clave = Str((Val(clave)) + 1)
'Esta ventana estará activa mientras no sea cerrada
Me.ShowModal()
End
Public Sub RunEdit(DataConsultaTablaModificar As Result)
consultaTablaModificar = DataConsultaTablaModificar
modificando = True
txtNombre.Text = consultaTablaModificar["Nome"]
txtApellido1.Text = consultaTablaModificar["Apelido"]
txtApellido2.Text = consultaTablaModificar["Idade"]
txtNIF.Text = consultaTablaModificar["NIF"]
txtLetra.Text = consultaTablaModificar["Ano"]
txtFone.Text = consultaTablaModificar["Fone"]
Me.ShowModal()
End
Public Sub btnAceptar_Click()
If modificando Then
consultaTablaModificar["Nome"] = txtNombre.Text
consultaTablaModificar["Apelido"] = txtApellido1.Text
consultaTablaModificar["Idade"] = txtApellido2.Text
consultaTablaModificar["NIF"] = txtNIF.Text
consultaTablaModificar["Ano"] = txtLetra.Text
consultaTablaModificar["Fone"] = txtFone.Text
consultaTablaModificar.Update()
Else
Try conexion.Exec("insert into Clientes values (&1,&2,&3,&4,&5,&6,&7)", clave, txtNombre.Text, txtApellido1.Text, txtApellido2.Text, txtNIF.Text, txtLetra.Text, txtFone.Text)
Endif
Me.Close()
End
Public Sub btnCancelar_Click()
Me.Close()
End