Posteado por: jjmoncar | Enero 17, 2010

Gb.Report. Componente para Generar Reportes

Este es uno de los componentes menos utilizados en Gambas. Porque? bueno, casi no existen ejemplos de como utilizarlo. La información que aparece en la ayuda de Gambas se limita solo a mostrar las propiedades, metodos y eventos de este componente, pero nada mas.

Afortunadamente alguien desarrollo un ejemplo que andaba rodando por la red desde el año 2007, pero estaba incompleto y erroneo.

Luego de mucho ensayo y error, logre conseguir que funcionaria, aqui les dejo una pantalla:

Ejemplo de reporte con Gb.Report

El formulario en vista de diseño, debe ser algo asi:

Formulario en vista de diseño

y el codigo es el siguiente:

PRIVATE hCon AS NEW Connection
PRIVATE hResult AS Result

PUBLIC SUB _new()
hcon.host = “localhost”
‘hcon.Port = 3306
hCon.User = “root”
hCon.Type = “mysql”
hcon.Name = “tu_bd” ‘nombre de la bd
hCon.Password = “tu_password” ‘tu password

hResult = hcon.Exec(“select nombre, password, saldo from usuarios”) ‘consulta a una tabla interna de mysql
InitReport()
DrawingArea1.Width = Printer.Width
DrawingArea1.Height = Printer.Height
Report.Zoom = 0.75 ‘para imprimir ponemos el zoom a 1
CATCH
Message(Error.Text & “\n” & Error.Where & “\n\n¿Password Incorrecto?”)

ME.Close
END

PUBLIC SUB Form_Open()

SpinBox1_Change ‘al disparar este evento, se dibuja el reporte

END

PRIVATE SUB InitReport()
DIM hCloner AS ReportCloner
DIM hLabel AS ReportLabel
DIM hField AS ReportField
DIM hHbox AS ReportHBox
DIM hEmpty AS ReportHBox
DIM hVBox AS ReportVBox
DIM hSpecialField AS NEW ReportSpecialField

Report.width = “21 cm”
Report.Height = “29.7 cm”
‘ Report.Size = “A4″

Report.Orientation = Report.Portrait ‘Report.Landscape
Report.LineStyle = line.Solid
Report.Padding = “1 cm”
Report.Resolution = Desktop.Resolution ‘Printer.Resolution
‘para imprimir cambiamos a printer.resolution

hLabel = NEW ReportLabel(Report)
hLabel.Text = “PRUEBA DE REPORTE BD CIBER KAISER”
hLabel.Height = “2.5 cm”
hLabel.Alignment = Align.Center
hLabel.Font.Size = 25
hLabel.LineStyle = Line.Solid
hLabel.FillColor = Color.LightBackground
hLabel.FillStyle = Fill.Solid

hVBox = NEW ReportVBox(Report)
hVBox.Height = “1.5 cm”

hCloner = NEW ReportCloner(Report)
hCloner.Expand = TRUE
hCloner.Count = hResult.Count
hCloner.Tag = “cloner”
hCloner.Spacing = “0.3 cm”

hVBox = NEW ReportVBox(hCloner)
hVBox.Height = “1.5 cm”
hVBox.Padding = “0.2 cm”
hVBox.LineStyle = line.Solid
hVBox.Tag = “hVBox”

hHbox = NEW ReportHBox(hVBox)
hHbox.Height = “1 cm”
hHbox.Padding = “0.2 cm”
hHbox.Tag = “hHbox”

hLabel = NEW ReportLabel(hHbox)
hLabel.Text = “Nombre:”
hLabel.Width = “2 cm”
hLabel.Font.Bold = TRUE
hLabel.Tag = “hLabel”

hField = NEW ReportField(hHbox) AS “FieldNombre”
‘creamos tantos ReportField como columnas de la bd queramos mostrar
‘con su manejador de evento correspondiente “Data”
hField.tag = “FieldNombre”
hField.LineStyle = Line.Dot
hField.Width = “5 cm”
hField.Font.Bold = TRUE
hField.ForeColor = color.Gray

hEmpty = NEW ReportHBox(hHbox)
hEmpty.Expand = TRUE

hLabel = NEW ReportLabel(hHbox)
hLabel.Text = “Password:”
hLabel.Width = “2 cm”

hField = NEW ReportField(hHbox) AS “FieldPassword”
hField.Tag = “FieldPassword”
hField.Width = “5 cm”
hField.LineStyle = Line.Dot
hField.ForeColor = color.Gray

‘hHbox = NEW ReportHBox(hVBox)
‘hHbox.Height = “0.5 cm”

hLabel = NEW ReportLabel(hHbox)
hLabel.Text = “Saldo:”
hLabel.Width = “2.2 cm”
hLabel.ForeColor = color.Red

hField = NEW ReportField(hHbox) AS “FieldSaldo”
hField.Tag = “FieldSaldo”
hField.Font.Italic = TRUE
hField.ForeColor = color.Gray
hField.Width = “5 cm”
hField.LineStyle = Line.Dot

hSpecialField = NEW ReportSpecialField(Report)

hSpecialField.Text = “Pagina $PAGE/$NPAGE”
hSpecialField.Height = “1 cm”
hSpecialField.Alignment = align.Center

END

PUBLIC SUB FieldNombre_Data()
hResult.MoveTo(LAST.Index – 1)
LAST.Data = hResult!nombre
DEBUG LAST.Data
‘CATCH
END

PUBLIC SUB FieldPassword_Data()
hResult.MoveTo(LAST.Index – 1)
LAST.Data = hResult!password
‘CATCH
END

PUBLIC SUB FieldSaldo_Data()
hResult.MoveTo(LAST.Index – 1)
LAST.Data = hResult!saldo
‘CATCH
END

PUBLIC SUB SpinBox1_Change()
DrawingArea1.Clear
Draw.Begin(DrawingArea1) ‘para imprimir, cambiamos el device a Printer
Report.Layout
SpinBox1.MaxValue = Report.count
Report.Draw(SpinBox1.Value)
Draw.End

END

Espero que sea de utilidad para todos. hasta la proxima!

Posteado por: jjmoncar | Enero 9, 2010

Sistema para cibers Cafe: Ya tiene nombre y fecha

Asi lo decidimos el equipo de desarrollo. Se llamara Ciber Kaiser 1.0, en honor a unos de los desarrollares del sistema cuyo seudonimo en la red es kaiser. La fecha estimada para su lanzamiento será el 08-03-2010. El producto podra ser adquirido por un bajo costo en el sitio web de solucioneslibres.com; este programa se distribuira con su codigo fuente y tendra licencia GPLv3.

La dirección de la tienda virtual, se puede acceder desde aqui.

Posteado por: jjmoncar | Enero 6, 2010

Curso On Line de Programación bajo Gambas

A partir del dia de hoy esta disponible un curso de programación bajo gambas. El curso es totalmente en linea pero con asistencia bajo la modalidad de chat, ademas de  tener un foro para los inscritos. Cuenta con ejercicios practicos y teoricos, ademas de evaluaciones para medir el rendimiento de los participantes.

Los topicos van desde lo mas basico (conocimiento teorico y uso de controles), hasta lo mas avanzado (base de datos, FTP, HTTP, socket, etc).

Si desean participar aqui les dejo el link.

El costo es accesible, considerando que se entrega certificado de aprobación y se envia a cualquier destino sin costo adicional.

Posteado por: jjmoncar | Enero 5, 2010

Actualizado: Ejemplo DataBrowser, DataCombo, etc.

Pues, esta era una vieja deuda. Para todos aquellos que estan buscando como se utilizan los controles data (datacombo, databrowser, etc) en Gambas, les participo que el ejemplo ha sido colocado de nuevo pero esta vez en mediafire. El que desee descargarlo, puede hacerlo aqui, o dirigirse a la entrada original.

Posteado por: jjmoncar | Enero 3, 2010

Concatenacion con Ciclo For

Aqui les dejo un pequeño ejemplo de como concatenar los resultados de un ciclo for y presentarlos en un TextBox.

El ejemplo es sumamente sencillo y carece de utilidad alguna, pero nos da la idea de como usar algunos controles basicos para presentar resultados.

Formulario de ejemplo

El codigo que debe llevar el boton que dice “presioname” es el siguiente:

PUBLIC SUB Form_Open()
ME.Center()
END

PUBLIC SUB Button1_Click()

DIM contador AS Integer

FOR contador = 1 TO 5
TextBox1.text = TextBox1.Text & contador & ” “
NEXT

END

Posteado por: jjmoncar | Enero 2, 2010

Software para Cyber Cafe

Antes de entrar en materia, quiero desearles un Feliz Año 2010 a todos los lectores de mi blog, y en especial a mis amigos del CNSL y proyecto GNU de Venezuela. Espero que todos sus deseos y anhelos se hagan realidad.

En los ultimos meses se ha estado desarrollando un sistema que permita la administración y control de equipos en un cyber cafe. Desde mi punto de vista, este es una de las maneras de penetrar a nivel de los usuarios.

El sistema inicialmente se desarrollo como un proyecto de la materia programación IV en el IUT “Jacinto Navarro Vallenilla” de Carúpano, realizado por el Bachiller Ezequiel Navas. Actualmente, y con su apoyo al ceder el código fuente, estoy realizado mejoras al mismo y agregandole los modulos que faltan, como por ejemplo, el modulo de cobranza (muy importante!)

Muy pronto estara completo; por ahora les dejo algunas imagenes del sistema.

Datos Tecnicos: Sistema Operativo GNU/Linux Debian. Software para desarollo: Gambas 2.17. Base de Datos: Mysql.

Posteado por: jjmoncar | Septiembre 24, 2009

Off Topic: Conficker se esta comiendo a windows 7

El director del Conficker Working Group admite que el gusano representa una “amenaza masiva” para Internet.

Los expertos en seguridad admiten que el gusano les desconcierta. Conficker ha infectado a más de cinco millones de ordenadores creando un botnet que es lo suficientemente potente como para bloquear la red de Austria, según hemos podido leer en el Sydney Morning Herald.

Rodney Joffe, director del Conficker Working Group,c erado para acabar con el gusano, afirma que el consenso general en el mundo de la seguridad es que Conficker es la mayor amenaza a la que nos enfrentamos desde un punto de vista del cibercrimen. “Se ha probado que es extremadamente resistentes, que es casi imposible de eliminar”, afirma Jofee

El gusano surgió el pasado mes de noviembre, cuando se expandió rápidamente entre los Pcs explotando un fallo en Microsoft Windows.

Los ordenadores infectados son arrastrados a una red de botnes controlados por los autores del gusano Conficker, y por eso los investigadores de seguridad temen que pudieran utilizar ese botnet para lanzar ataques a través de Internet.
Confiquer cuenta con mecanismos para impedir que el usuario que explore sus ordenadores con programas antivirus lo detecte. El gusano se extiende sin conocimiento del usuario y no haga otra cosa más que encender su ordenador.

De forma que según los investigadores si un administrador de red puede desinfectar 99 máquinas de una red de cien y sólo una queda infectada, ésta logrará infectar al resto de nuevo.

Y aun asi, hay empresas, instituciones publicas y personas que afirman que windos y toda su generacion, es lo mejor de lo mejor…

fuente: http://www.itespresso.es/es/news/2009/09/23/conficker-confunde-a-los-expertos-en-seguridad

Posteado por: jjmoncar | Agosto 22, 2009

Insertar Imagen con PictureBox

Luego de una larga ausencia, lo prometido es deuda. He vuelto… y en esta oportunidad les traigo algo que siempre me preguntan. ¿como hago para insertar una imagen en un PictureBox sin hacerlo por las propiedades del Proyecto?. Bueno, realmente es muy fácil.  Solo deben crear un proyecto nuevo, que para efectos prácticos quede mas o menos asi:

PictureBox1

y el código para que cargue la imagen seria el siguiente:

PUBLIC SUB BtnCerrar_Click()

ME.Close

END

PUBLIC SUB BtnCargar_Click()
DIM Himagen AS String

Himagen = User.Home & “/proyectosgambas/fotoBD/fotos/dsc00447.jpg”
CajaFoto.Picture = Picture[Himagen]

END

si quieres que salga un dialog para que puedas seleccionar la imagen que tu quieras, debes hacer algunas modificaciones que incluyen agregar el siguiente codigo, y ajustarlo al ya existente.

Dim Ruta as String                           (declaras una variable tipo string)
Dialog.OpenFile                              (esto te abre el navegador para que selecciones tu imagen)
Ruta=Dialog.Path                             (almacena en la variable la ruta y archivo seleccionado en el navegador)
picturebox.picture=Picture[Ruta]    (coloca en el objeto picturebox la imagen que seleccionaste)

Ahora si lo quieres desde una base de datos…. bueno eso te lo dejo a tu inmaginacion, ya con esto tienes las herramientas necesarias para hacerlo… que les sea de provecho. ;-)

Posteado por: jjmoncar | Marzo 12, 2009

5to. Congreso Nacional de Software Libre 2009

El Quinto Congreso Nacional de Software Libre (Venezuela 2009) es una serie ordenada de eventos que se iniciarán en abril y culminarán en julio de 2009. entre uno de sus principales objetivos se encuentra el de concentrar a una selección importante de expertos nacionales e internacionales en el uso de GNU/Linux y el Software Libre en un ciclo de ponencias y demostraciones, ofreciendo a todos los participante una muestra integral del Software Libre y el Sistema Operativo GNU/Linux, su implementación, características y posibilidades. Con el V CNSL se prepara el terreno y se impulsa la formación de proyectos locales y nacionales de Software Libre, contando con comunidades de expertos, desarrolladores y usuarios que desean intercambiar conocimiento y a la vez destacando el talento local y trayectoria de investigación o desarrollo de nuestros profesionales en cada uno de los estados visitados.

El CNSL busca promocionar el talento venezolano. En cada una de las regiones y sedes visitadas buscamos los talentos que tengan algo que decir, que muestren sus conocimientos y se den a conocer. Así colaboraremos con los procesos de Migración a Software Libre en el sector Público y Privado, promoviendo a todos los profesionales, llamándolos para que las empresas e instituciones locales consigan en ellos, muy seguramente, las personas capacitadas en el área de Software Libre para los procesos de administración y desarrollo de sistemas.

En esta oportunidad, el Quinto Congreso tendrá por primera vez como una de sus sedes a la Ciudad de Carúpano, Estado Sucre. El evento se realizará el 01 y 02 de Mayo del presente año, de 8:00 a.m. a 6:00 p.m. en el I.U.T “Jacinto Navarro Vallenilla”. Estan todos cordialmente invitados a participar en este importante evento.

Para mayor información pueden visitar los siguientes links:

http://www.cnsl.org.ve/tiki-index.php

http://www.cnsl.org.ve/tiki-index.php?page=Carupano

http://grulica.wordpress.com/ (Grupo de Usuario de Linux de Carúpano)

Posteado por: jjmoncar | Febrero 5, 2009

CARGA DE DATA DE DOS COMBOBOX

A continuacion les coloco el codigo y el formulario de como cargar dos combobox con la data contenida en una BD.

Imagen del formulario en vista de diseño

Imagen del formulario en vista de diseño

El codigo de este formulario es el siguiente:

PUBLIC Atencion AS Boolean

PUBLIC SUB Form_Open()

ME.Center()
LlenarCombo()
LaFecha()

END

PUBLIC SUB LaFecha()

DIM FechaActual AS Variant

FechaActual = Date(Day(Now) & “/” & Month(Now) & “/” & Year(Now))
Label9.Text = FechaActual

END

PUBLIC SUB LlenarCombo()

DIM query AS String
DIM resultado AS Result
DIM captura AS Integer
DIM i AS Integer

ModConexion.rs1 = ModConexion.db.Exec(“select codigo FROM laboratorio.datoslab”)
ModConexion.rs1.MoveFirst
captura = ModConexion.rs1.Count
i = 1
WHILE i <= captura
ComboBox1.Add(ModConexion.rs1!codigo)
ComboBox1.Refresh()
ModConexion.rs1.MoveNext
DEC (captura)
WEND
END

PUBLIC SUB Button4_Click()

ME.Close()

END

PUBLIC SUB ValidarVacios()

IF ComboBox1.Text = “” OR ComboBox2.Text = “” OR TextBox1.Text = “” OR TextBox2.Text = “” OR TextEdit1.Text = “” THEN
Message.Error(“Existen casillas vacias\n asegurese de llenarlas todas”)
Atencion = FALSE
TextBox1.Clear()
TextBox2.Clear()
TextEdit1.Clear()
ELSE
Atencion = TRUE
ENDIF

END

PUBLIC SUB ComboBox1_Change()

DIM Respuesta AS String
DIM query AS String
DIM resultado AS Result
DIM captura AS Integer
DIM i AS Integer

ComboBox2.Clear()
TextBox1.Clear()
TextBox2.Clear()

Respuesta = Trim(ComboBox1.Text)

query = “select * from laboratorio.datosequipo where codigo =’” & Respuesta & “‘”
ModConexion.consulta(query)

resultado = db.Exec(query)
ModConexion.rs1.MoveFirst
captura = ModConexion.rs1.Count
i = 1

WHILE i <= captura
ComboBox2.Add(ModConexion.rs1!codequipo)
ComboBox2.Refresh()
ModConexion.rs1.MoveNext
DEC (captura)
WEND

END

PUBLIC SUB ComboBox2_Change()

DIM Respuesta AS String
DIM query AS String
DIM resultado AS Result

Respuesta = Trim(ComboBox2.Text)

query = “select * from laboratorio.datosequipo where codequipo =’” & Respuesta & “‘”
ModConexion.consulta(query)

resultado = db.Exec(query)

IF resultado.Count > 0 THEN
TextBox1.Text = ModConexion.rs1!marca
TextBox2.Text = ModConexion.rs1!modelo

END IF

END

PUBLIC SUB Button1_Click()

DIM query AS String

ValidarVacios()
IF Atencion = TRUE THEN
query = “INSERT INTO laboratorio.mantenimiento set codlab=’” & UCase(comboBox1.Text) & “‘, fecha=’” & Trim(Label9.Text) & “‘, codequipo=’” & UCase(ComboBox2.Text) & “‘, marca=’” & UCase(TextBox1.Text) & “‘, modelo=’” & UCase(textbox2.text) & “‘, falla=’” & UCase(Trim(TextEdit1.text)) & “‘, entregado=’” & UCase(TextBox3.Text) & “‘, dpto=’” & UCase(ComboBox3.Text) & “‘”
ModConexion.consulta(query)
IF ModConexion.conexion() THEN
message.Info(“Los dato se insertaron satisfactoriamente”)
TextBox1.Clear()
TextBox2.Clear()
TextBox3.Clear()
TextEdit1.Clear()
ComboBox2.Clear()

ELSE
message.Error(“Los datos no se pudieron insertar”)
ENDIF
ENDIF

END

PUBLIC SUB Button2_Click()

END

Entradas antiguas »

Categorías