domingo, 31 de mayo de 2009

Programa en xHarbour "no se ve" cuando se ejecuta

Pues eso....

Si estas usando la última versión de xHarbour (Abril 2009 de xharbour.org ó 1.21 de xharbour.org), he de informarte que "algo" hicieron estos amigos en el compilador, que ahora es necesario hacer una llamada a la terminal que deseas utilizar de manera manual desde tu código fuente:

Function Main
request hb_gt_win // hay que agregar esta línea
SetMode(25,80)
CLS
@ 0,0 SAY "Hola Mundo"
WAIT
RETURN Nil

Con este pequeño cambio tus programas xHarbour en modo consola se volverán a ejecutar como lo hacían normalmente.

Obviamente no debes olvidar linkar la GTWIN.LIB para que funcione correctamente.

Este "bug" (preferiría llamarlo "issue") se ha reportado ya en el foro de xHarbour, pero Ron Pinkas insiste en que este cambio no es necesario, y que basta con linkar la libería en el orden correcto, desafortunadamente no nos dice en que orden debe de linkarse las libs, solo indica que su producto "xHarbour Builder" hace el linkeo correctamente.

miércoles, 20 de mayo de 2009

Foro de soporte para xHarbour.

Los foros de xHarbour pueden ser leídos por medio de un lector de grupos de noticias (news reader) como Outlook Express o Mozilla Thunderbird.

Los foros secundarios están hospedados en el propio servidor de xHarbour.com y se puede acceder a ellos en la siguiente dirección:

news://news.xharbour.com

En este servidor están hospedados los foros de soporte a xHabour Builder, el del grupo de desarrolladores (foro privado), se ofrecen 2 foros en idiomas extranjeros, uno en italiano y otro en español / portugúes (no se quién les dijo a la gente de xHarbour que ambos lenguajes se parecen mucho) y también hay un foro de soporte para el código fuente el cual se obtiene por CVS (Control Version System).

El foro de soporte principal no está hospedado en los servidores de xHarbour.com, al igual que Clipper, Visual Objects y otros lenguajes de programación el foro de xHarbour está hospedado en los servidores principales de grupos de noticias de UseNet:

news://comp.lang.xharbour

El problema con este servidor es que no todos los proveedores de internet te dan acceso a los grupos de UseNet (son muchísimos y tienen demasiada información), por ello, si quieres usar un lector de noticas, te recomiendo que abras una cuenta en MOTZARELLA.ORG.

Motzarella te ofrece un servidor para lectura de grupos de noticias, este es un servidor privado, pero gratuito, lo único que te piden es crear una cuenta con ellos y te enviarán un password por correo electrónico para que puedas usar tu lector de noticias.

Si prefieres otro medio que no sea el lector de noticias, entonces puedes crearte una cuenta Google Groups y acceder al grupo comp.lang.xharbour para leer y publicar mensajes.

viernes, 15 de mayo de 2009

Generar PDFs con Xailer

Xailer incorpora nativamente la capacidad de generar todos sus informes en PDF, requiriendo sin embargo de una utilidad de terceros llamada Image2PDF.

Image2PDF es una DLL de la empresa Utility Warrior que a partir del motor de vista previa de Xailer exporta el reporte presentado a un archivo .PDF.

No hay que hacer nada en programación para generar el PDF, Xailer al detectar la existencia del DLL de Image2PDF instalado en el equipo, automática presentará en la barra de botones del motor de vista previa, un botón para realizar el proceso de exportación.

martes, 5 de mayo de 2009

¿ Existe un IDE para Xbase++ ?

De momento no.

Xbase++ tiene en marcha un proyecto para hacer un IDE llamado Visual xBase++.

Hasta donde tengo entendido, es un trabajo en desarrollo, no sido liberado ni tiene una versión funcional al 100% y solo hay versiones de evaluación para usuarios registrados del producto.

La herramienta tiene buena apariencia, pero parece que no la veremos hasta la versión 2.0 o 3.0 de Xbase++

Configuración de ADS para usar con Xailer.

No es necesaria ninguna configuración adicional para usar Advantage Database Server (ADS) con Xailer.

El cliente que usa Xailer para conectarse con ADS es el mismo cliente que utiliza (x)Harbour y todas sus interfaces gráficas, por lo mismo no es necesario hacer ninguna configuración en el servidor para usarlo con una aplicación Xailer.

Lo unico que tienes que hacer, como con cualquier programa (x)Harbour que vaya a utilizar ADS es linkear las libs RDDADS.LIB, ACE32.DLIB y tener las DLLs clientes de ADS en la misma carpeta donde tienes la aplicación: AXWCS32.DLL (cliente ADS), ACE32.DLL (Funciones de acceso al servidor) y opcionalmente ADSLOC32.DLL (cliente local de ADS).

La forma de uso con Xailer es idéntica a como se hace con cualquier programa xHarbour.

Usar lenguaje SQL sobre archivos DBF

Si es posible hacerlo, pero hay que hacer algunas anotaciones al respecto.

Microsoft provee de un componente ADO y uno ODBC para tablas DBF, sin embargo no es recomendable usar estos componentes ya que no actualizan los índices ni NTX ni CDX cuando haces alguna operación de mantenimiento de tablas. Se puede usar perfectamente para consultas pero no para mantenimiento.

Si existe una forma de usar SQL con tablas DBFs y que se actualicen los índices tanto NTX y CDX y es usando el servidor de Advantage DataBase Server, tanto en su versión local gratuita, o con el servidor remoto o el internet.

Toda la información sobre como hacer está disponible haciendo click aquí.

domingo, 3 de mayo de 2009

XEdit 2.0 y Clipper

¿ Se puede usar XEdit 2.0 para compilar un programa en CA-Clipper 16 bits ?

No, se puede usar el editor de código fuente y el gestor de proyectos, pero no la herramienta "make" ya que internamente está programada para ejecutar el "harbour.exe" y no el "clipper.exe".

Adicionalmente XEdit está programado para usar el compilador del "C" de Borland, paso que no es necesario con Clipper.

Y finalmente XEdit agrega las librerías nativas de (x)Harbour al momento del proceso de enlazado.

Usando CDX con xHarbour y Advantage al mismo tiempo

Advantage Database Server utiliza su propio mecanismo de bloqueo de tablas lo que garantiza la seguridad de los datos.

Mientras una aplicación cliente ADS está en uso de una tabla DBF con índices CDX o NTX solo otra aplicación cliente ADS puede hacer uso de la tabla esto para evitar posibles daños en los índices y mantener las ventajas de la tecnología Cliente / Servidor.

Sin embargo, el ACE32.DLL incluye una función para hacer compatible el mecanismo de bloqueo, usandola, una aplicación cliente ADS puede compartir los datos con un programa en Clipper o en xHarbour.

La función es AdsLocking(.f.) y su equivalente para aplicaciones ADS con CA-Clipper es AX_Locking(.F.)

Su uso no se recomienda ya que la compatiblidad con programas no clientes ADS pone en riesgo la integridad de los índices.

viernes, 1 de mayo de 2009

Sumar fechas con xHarbour

xHarbour ofrece la misma funcionalidad en manipulación de tipos de campo fecha que la que ofrecía Clipper en su momento, todas las operaciones son soportadas:

dNewDate := DATE() + 30 // suma 30 días a la fecha actual
nDias := CTOD("01/01/2009") - DATE() // devuelve el número de dias transcurridos desde el 1 de enero.


Adicionalmente xHarbour ofrece total soporte a campos tipo Date-time, para mas información haz click aquí

Clipper en VPN

¿ Se puede correr un programa Clipper sobre una VPN ?

¡ Claro que se puede !, pero es TREMENDAMENTE LENTO.

La razón es que los programas Clipper operan bajo "arquiectura distribuida" bajo este esquema los datos son copiados del servidor a la estación de trabajo, procesados en la estación de trabajo y devueltos al servidor cada vez que haces un COMMIT.

Si tienes un DBF de 10 megas por ejemplo, los 10 megas son copiados por la VPN hasta la estación de trabajo que abrió el archivo, los datos son procesados localmente y cuando haces algún cambio o un alta y aparece un COMMIT en el código los datos se vuelven a copiar de vuelta al servidor.

En experiencias propias hemos tenido que esperar un promedio de 20 minutos para abrir una tabla DBF de poco menos de 10 megas sobre una VPN y no solo con Clipper, la lentitud también ocurre en programas con (x)Harbour.

Sin embargo SI ES POSIBLE TENER UNA VELOCIDAD SIMILAR A LA DE UNA LAN con programa en Clipper y xHarbour, el truco consiste en utilizar una herramienta Cliente / Servidor, que puede ser un servidor de datos SQL o bien Advantage Database Server para archivos DBF.s

SQLite y FiveWin Harbour

Como comenté en algún post anterior SQLite es un estupendo producto para incluir un manejador de bases de datos SQL no cliente/servidor en nuestras aplicaciones.

SQLite es super ligero, todo el invento está metido en un solo archivo .LIB, es tan ligero que hasta lo puedes usar en un Pocket PC sin mucho consumo de memoria, como lo hace Basic4PPC.

Para incluirlo en tus aplicaciones simplemente tienes que linkear la LIB de SQLite a tu programa y ¡ listo !, el servidor y el cliente quedan integrados en tu archivo .EXE.

Como SQLite es una lib para lenguaje "C", para usarlo en (x)Harbour ya sea en modo consola o con FiveWin o MiniGUI es necesario hacer una serie de "wrappers" para compatibilizar la llamada a funciones en "C" desde (x)Harbour.

Hace aproximadamente un par de años mi buen amigo Rafa Carmona (The Full) se dió a la tarea de comenzar los wrappers para compatibilizar la lib de SQLite para Harbour, donando su trabajo como parte de su proyecto Open Source T-GTK. Una GUI multiplataforma para (x)Harbour que funciona en Windows y Linux.

Ignoro el grado de avance que logró, pero todo el código fuente junto con algunos PRGs para pruebas, así como los wrappers en "C" y un archivo MAKE para construir la librería están disponibles haciendo click aquí.

Por otro lado, Xailer puede acceder nativamente a SQLite en la versión Enterprise, ya que cuenta con un DataSource nativo que facilita enormemente la conexión con este servidor de base de datos.

miércoles, 29 de abril de 2009

Como conectar FiveWin con MySQL

Como con todas las bases de datos SQL, la conexión con MySQL se hace por medio de ADO (ActiveX Data Objects)

En el blog de mi amigo Armando Estrada SQLCmd, encontrarás toda la información para acceder a MySQL desde FiveWin y en general desde cualquier programa basado en xHarbour, ya sea desde modo consola, MinGUI, Xailer, etc.

Como puedo abrir DBFs por Internet

Sí es posible abrir un DBF por internet incluso con Clipper.

No es necesario tener una VPN o algún tipo de enlace dedicado, pero si un enlace de banda ancha ya sea ADSL, Cable o 3G.

Para acceder a los datos via internet, es necesario utilizar un componente de Advantage Database Server (ADS), llamado Advantage Internet Server (ó AIS), que viene incluído con el servidor de datos.

El proceso no es complejo pero sí laborioso, una lista de los paso básicos son:

En el servidor de datos:
  • Instalar el servidor de ADS en el equipo
  • Configurar en la configuración del servidor ADS los puertos para uso de internet.
  • "Abrir" el puerto correspondiente en el router y hacer el "forward" al equipo que tiene instalado el servidor ADS
  • Crear un diccionario de datos ADS para establecer los usuarios y los passwords de los mismos que podrán acceder a los datos vía internet.
En el cliente (programa en [x]Harbour):
  • Usar el RDDADS en el código fuente
  • Linkar las librerías correspondientes (RDDADS.LIB y ACE32.LIB)
  • Utilizar el tipo de servidor 4
  • Configurar el archivo ADS.INI con la IP publica del servidor y el puerto al cual conecgtar.
  • Conectar con el equipo remoto usando la función AdsConnect60()
  • Abrir los archivos DBF con el comando USE de toda la vida o con la función que comúnmente usas
Aquí puedes descargar algunos ejemplos y se incluye el código fuente de cada uno de ellos:

Ejemplo en xHarbour modo consola
Ejemplo en Xailer
Ejemplo en FiveWin

Estos programas se conectan a nuestro servidor en la Ciudad de México y te permiten hacer cosas como Altas, Bajas, modificaciones e imprimir reportes.

Manual de TOleAuto

TOleAuto es una clase nativa de xHarbour que se utiliza para manejar componentes COM como si fueran objetos nativos de xHarbour.

Esta clase fue desarrollada originalmente para FiveWin 16 bits por José Gimenez, quien es parte del equipo Xailer y posteriormente se integró nativamente a xHarbour (en Harbour existe como una LIB externa no nativa), y se puede utilizar directamente desde aplicaciones para modo consola y para Windows con cualquier GUI.

TOleAuto no tiene un manual como tal, porque lo único que hace es "instanciar" un objeto COM y lo carga dentro de una variable xHarbour, luego para manipular las propiedades y métodos del objeto COM, es necesario el manual del componente COM que hemos instanciado, no de TOleAuto.

xHarbour cuenta con una función llamada CreateObject() (muchos lenguajes de programación tienen esta función con el mismo nombre), se puede utilizar indistintamente TOleAuto o CreateObject().

Por ejemplo si queremos trabajar con Excel, haríamos algo como esto:

objExcel = TOleAuto():New("Excel.Application")

objExcel:Visible := .T.
objExcel:Workbooks:Add()
objExcel:Cells(1, 1):Value := "Prueba"

Es necesario saber el "ProgID" o nombre del servicio COM que queremos usar, en este caso: "Excel.Application".

Las propiedades ::Visible, ::Workbooks, ::Value y los métodos ::Add() y ::Cells() están documentados en la AYUDA DE VISUAL BASIC PARA APLICACIONES que se instala (o deberías de instalar) al momento de instalar el paquete OFFICE.

Por lo tanto, no hay un manual de la clase TOleAuto, si quieres manipular un objeto COM creado a partir de instanciar un objeto de esta clase, deberás contar con el manual de ayuda correspondiente de cada servicio COM que quieras manipular.

Nota: Los componentes COM requieren estar instalados localmente en la computadora que los vaya a utilizar.

jueves, 23 de abril de 2009

DBUs Visuales

Las herramientas DBU (DataBase Utilities) son bastante populares para manejo de tablas DBFs, hoy en día hay varias opciones muy buenas, la mayoría de los productos soportan DBFs, tanto indices NTX como CDX, y algunos de ellos hasta ADTs de Advantage Database Server.

martes, 21 de abril de 2009

Como meter un formulario en una pestaña de un folder con Xailer

Sí es posible meter un formulario dentro de una pestaña de un folder, hay que proceder así:

1) Crea un formulario nuevo, agrega tus controles, pero cambia la clase padre (FROM TFORM) y cámbialo por TFolderPage (FORM TFOLDERPAGE).

2) Crea en otro formulario un folder SIN PESTAÑAS, sólo el folder.

3) Usando el evento ON INITIALIZE de este formulario, crea las pestañas, y llama al formulario creado en el paso (1), al momento de llamarlo pásale como parámetro EL OBJETO FOLDER contenedor Tform():New(::oFolder).

El ejemplo DBFData6 utiliza esta técnica para meter formularios en folders, puedes revisarlo para tener un ejemplo funcional.

¿ Cómo verifico que una dirección de correo es válida ?

Dentro del protocolo SMTP existe el comando VRFY, el cual se utiliza para preguntarle a servidor de correo si una dirección de correo existe en dicho servidor.

Por ejemplo si tu quieres saber si la dirección info@ciber-tec.com existe, entonces tienes que realizar un enlace al servidor ciber-tec.com y preguntar si la cuenta "info" existe.

Si utilizas Funcky 6.0 para enviar tus mensajes de correo, el objeto SMTP de Funcky tiene el método Verify que te permite verificar si existe la dirección de correo antes de enviarlo:

WITH OBJECT TOleAuto():New("FunckySmtp")

IF :Validate("ciber-tec.com","info@ciber-tec.com")
...
...
...
ENDIF

END WITH

Si usas FiveWin con su clase TSMTP, tienes que modificar el código fuente de la clase para que realice el envío del comando VRFY al servidor.

Nota: No todos los servidores de correo soporta la verificación de direcciones, esta tiene que estar configurada en el servidor, si el servidor de correo no soporta el comando VRFY, entonces el uso de este comando siempre devolverá FALSE.

Conectar con base de datos en red

La pregunta de la semana:

Instalé una base de datos SQL en mi computadora con Windows XP o Vista y ahora quiero que todos los usuarios de la red local se conecten con mi computadora para que puedan ver los datos.

Pasos a seguir:

1) Asegúrate que el servidor de base de datos se esté ejecutando en el equipo que será el servidor
2) Asegúrate que el equipo servidor tenga una dirección IP, preferentemente FIJA
3) Asegúrate que los equipos en el resto de la red puedan ver a tu equipo en el entorno de red

y el mas importante de todos:

4) DESBLOQUEA EL PUERTO QUE USA EL SERVIDOR DE DATOS EN EL FIREWALL DE WINDOWS, de lo contrario NUNCA te vas a poder conectar.

jueves, 16 de abril de 2009

ActiveX para FiveWin y MiniGUI

Si tienes versiones antiguas de FiveWin de 32 bits o usas MiniGUI con xHarbour y no tienes soporte para ActiveX aquí tienes la solución.

Oskar Lira, brillante programador de C, ha desarrollado un soporte ActiveX para xHarbour independiente de la plataforma de desarrollo Windows.

Trabajo original de Andy Wos, ha sido retomado por Oskar y cedido al dominio publico con el código fuente incluído y lo puedes descargar haciendo click aquí.

XEdit ó Xailer

Aunque son productos similares, no son del todo iguales.

XEdit es el hermano pequeño de Xailer.

XEdit comparte algunos componentes con Xailer que son básicamente operativos:

1) El gestor de proyectos
2) El editor de código fuente
3) El editor de archivos .DBF (DBU)
4) La herramienta de compilado y enlazado.

El objeto de XEdit es el de proporcionarte una herramienta para que puedas migrar tus programas de CA-Clipper a xHarbour sin complicarte mucho en lidiar con compiladores de C y otras cosas. XEdit puede ser utilizado para programas en modo consola (MS-DOS) o bien para programa gráficos para Windows con FiveWin, MiniGUI o Clip4Win o bien para generar un archivo .LIB.

Xailer es el hermano mayor de XEdit porque además de lo que tiene XEdit, aporta otros componentes mas enfocados a la programación y que están ligados con la librería de clases y la interfaz gráfica de Xailer:

1) Diseñador de formularios
2) Debugger
3) Controles de Acceso a Datos (DataControls)

Xailer es capaz de generar programas para Windows directamente, sin necesidad de librerías externas, mientras que XEdit requiere de otros productos para generar un programa para Windows.

Más información sobre el uso de XEdit.

Mas información sobre Xailer.

Xailer en modo "híbrido"

Añadir archivo de recursos a un programa Clipper

Si es posible hacerlo.

El enlazador BLINKER tiene el comando RC

Notas:

1) El archivo .RES debe de estar previamente compilado con un compilador de recursos como el Borland C++, el Pelles C o algún otro.

2) Los archivos de recursos solo funcionan para programas Windows, es decir con FiveWin o Clip4Win.

Reindexar CDX con Visual Basic

Pues va a ser que no se puede.

Tanto el controlador ADO y el ODBC provistos por Microsoft para acceso a tablas de FoxPro (DBFs) no tiene contemplado el manejo de índices, ya que el acceso a los datos lo hace via SQL y hay que recordar que en SQL un índice no sirve para lo mismo que en Xbase.

El acceso que realizan los controladores que proporciona Microsoft trabaja directamente haciendo queries sobre las tablas sin tomar en cuenta el indice, de tal forma que si tu haces un "insert" en una tabla o un "delete", los indices no se actualizan.

Lo ideal en estos casos si vas a tener aplicaciones que "convivan" como programas en Fox y en VB o bien en Clipper o xHarbour, es tener un controlador "común" para todos los lenguajes y que soporte además los índices CDX.

Ese controlador existe y es grautito, y es ni mas ni menos que el "cliente" de Advantage Database Server, el cual tiene un RDD para Clipper / xHarbour, y controladores ADO yODBC para Fox y Visual Basic.

Es grautito porque puedes usar el "servidor local" de ADS (ADSLOC32.DLL) y luego usar el cliente que mejor se acomode a tu lenguaje de programación, RDD, ADO u ODBC, los clientes de ADS garantizan total compatiblidad con DBFCDX y las operaciones realizadas por SQL si actualizan los índices.

miércoles, 15 de abril de 2009

Descargar Clip4Win

Clip4Win (Clipper para Windows) no existe ya en su versión de 16, peeeeero, existe para 32 bits con (x)Harbour y además ES GRATIS....

Si lo quieres obtener gratis.... leer mas

Editor para Clipper

Hay muy buenos editores para programadores en Internet, unos de paga otros gratuitos, configurables y no configurables.

Esta es un lista de mis favoritos para programar con Clipper y xHarbour.

MultiEdit: El de toda la vida y una laaaaarga historia de premios como el mejor editor de código fuente para CA-Clipper por muchos años (su precio lo dice todo), ahora también para (x)Harbour, pero además funciona prácticamente con cualquier lenguaje de programación ($179.00 USD)

XEdit: Una de sus características es el editor de código fuente que ademas "entiende" el lenguaje CA-Clipper, además del editor, tiene el gestro de proyectos y tiene un DBU para tus archivos DBFs incluido, lo mejor de todo.... ES GRATIS.

xMate: De Andy Wos, tiene la ventaja de ser GRATIS y de entenderse muy bien con Clipper y xHarbour, con funcionalidad similar a la de XEdit, es mas que un editor, es todo un gestor de proyectos.

UltraEdit Studio: El favorito de los programadores de FiveWin porque gestiona proyectos, compila, tiene "templates" que entienden el lenguaje CA-Clipper y ademas tiene su propio editor de recursos y hay versión en Español, la historia detrás del producto es muy buena, si visitas su web no dejes de leerla. ($ 129.95 USD)

MED: Otro de mis favoritos, no es gratuito pero se entiende bien con Clipper y tiene un montón de opciones muy muy interesantes ($30.00 USD)

GWD: También es otro de los de toda la vida, con buenas características no es gratis, pero es muy bueno. ($ 29.00 USD)

IDE para (x)Harbour.

Mucha gente confunde "harbour" con "clipper para windows", nada mas alejado de la realidad.

(x)Harbour es un compilador compatible con Clipper de 32 bits, toma tu código Clipper tal cual lo tienes en este momento y genera un nuevo EXE en funcionalidad y apariencia IDENTICO a lo que tenías en MS-DOS.

Si lo que buscas es un entorno integrado de desarrollo, que te permita desde un solo lugar hacer todo lo que antes hacías con Clipper, pero ahora bajo Windows, puedes hecharle un vistazo a XEdit, del equipo Xailer, te sirve para programas MS-DOS y para programas Windows con FiveWin.

Si lo que buscas es un IDE visual que te permita desarrollar aplicaciones Windows a partir de programas xHarbour, puedes hecharle un vistazo a Xailer y a su modo híbrido. La ventaja de este producto es que cambio a Windows puede ser paulatino y no necesariamente todo al mismo tiempo.

Otra opción recién liberada es Visual XHarbour.

Harbour MiniGUI tiene un ide también pero desconozco el estado de avance y si es usable.

viernes, 10 de abril de 2009

Xailer en Linux

No existe versión de Xailer para Linux.

Xailer está fuertemente basado en el API de Windows no solo de la parte de controles gráficos, sino de muchos otros aspectos internos que no se ven.

Muchas de las APIs que usa Xailer no están disponibles ni las GTK (biblioteca multiplataforma para desarrollar interfaces gráficas) ni en el API de Linux.

Una versión para Linux no está en los planes del equipo Xailer ni a corto ni a largo plazo.

Probablemente veamos primero una versión par PocketPC que para Linux.

Manual de Xailer en Español

Xailer viene con un completísimo manual en Español e Inglés.

El manual de Xailer está dividido en 2 partes:

1) Manual del IDE donde se encuenta toda la información de las herramientas del IDE como son el Gestor de proyectos, el editor de código, el inspector de objetos, etc.

2) Manual del Clases: Donde se documentan la jerarquía de clases de Xailer y toda la documentación de métodos eventos y propiedades.

El demo de Xailer incluye ambos manuales y se puede descargar haciendo click aquí

Un documento en PDF con el manual puede descargarse haciendo click aquí

miércoles, 8 de abril de 2009

Alias dinámicos con tablas ADT de Advantage Database Server

Las tablas ADT de Advantage Database Server, a pesar de no tener los mismos tipos de campos que un DBF se comportan EXACTAMENTE IGUAL que un DBF.

Todo lo que puedes aplicar sobre archivos DBF para su manipulación (Append, Replace, Use, Rlock(), etc) se aplica EXACTAMENTE IGUAL sobre tablas ADT, eso incluye a la técnica de "alias dinámicos".

Browse de FiveWin con datos SQL

Si estas usando ADO para recuperar datos de una base de datos SQL y luego quieres mostrarlos en un browse de FiveWin hay que tener varias cosas en cuenta.

Al definir el RecordSet:

  1. El tipo de cursor tiene que ser adOpenKeySet (1) ó adOpenDynamic (2) para que puedas moverte sobre el cursor para arriba y para abajo, de lo contrario solo puedes ir hacia abajo.
  2. El tipo de bloqueo tiene que ser adLockOptimistic (3), para dejar al servidor que se encargue de los bloqueos al momento de actualizar los datos.
  3. La ubicación del cursor tiene que ser adUseClient (3) si quieres que el browse vaya rápido, de lo contrario cada avance de página tiene que ir a buscar los datos al servidor y eso se puede llevar mucho tiempo.
Al definir el Browse:

  1. En la clausula FIELDS del BROWSE tienes que indicar los campos usando el objeto RecordSet: REDEFINE BROWSE FIELDS oRs:Fields(0):Value, oRs:Fields(1):Value.....
  2. Tienes que cambiar los métodos de movimiento del Browse, porque el Browse de FiveWin solo sabe "moverse" sobre campos de DBFs o bien sobre elementos de arrays.
Los métodos de movimiento del browse (TWBrowse) de FiveWin son:

oBrw:bGoTop := {|| oRS:GoTop() }

Se usa para indicarle al browse la operación que debe realizar para ir al primer registro, en este caso usamos el método ::GoTop() del RecordSet, para poder "movernos" libremente por el recordset, el tipo de cursor tiene que ser KeySet o Dynamic.

oBrw:bGoBottom := {|| oRs:GoBottom() }

Se usa para indicarle al browse la operación que debe realizar para ir al final de los datos, en este caso usamos el método ::GoBottom() del RecordSet, para poder "movernos" libremente por el recordset, el tipo de cursor tiene que ser KeySet o Dynamic.

oBrw:bLogicLen := {|| oRs:RecCount()}

Se usa para dibujar la barra de desplazamiento vertical del lado derecho del browse, su valor representa el numero de renglones presentes en el browse y se asigna al método ::RecCount() del RecordSet, el cursor tiene que ser KeySet o Dynamic, de lo contrario devueve -1.

oBrw:bSkip :={|nRegs| AdoSkip(nRegs)}

Esta es la operación de movimiento mas importante, porque define el número de registros que se mueve el browse cuando se utilizan las teclas de flechas arriba y abajo, PgUp y PgDn y Ctrl+PgUp y Ctrl+PgDn, usualmente se asigna a una función que se puede llamar como quieras (usualmente se le llama "skipper") y que devuelve el número de registros que se ha desplazado el browse (ojo: El RecordSet tiene que estar visible para la función):

Function AdoSkip( nSkip )
LOCAL nStart, nEnd, nMoved := 0

nStart := oRecst:Recno()
oRecst:Skip( nSkip )
nEnd := oRecst:Recno()
DO CASE
CASE nEnd > 0
nMoved := nEnd - nStart

CASE nEnd == -3
oRecst:GoBottom()
nMoved := oRecst:RecCount() - nStart

CASE nEnd == -2
oRecst:GoTop()
nMoved := - nStart + 1

ENDCASE
RETURN nMoved


El ejemplo completo quedaria así:

REDEFINE ListBox oBrw FIELDS oRs:Fields(0):Value, oRs:Fields(1):Value, ...oRS:Fields(n)...

WITH OBJECT oBrw
:bSkip := {|nRecs| nAdoSkip( nRecs )}
:bGoTop := {|| oRecst:Gotop() }
:bGoBottom := {|| oRecst:Gobottom() }
:bLogicLen := {|| oRecst:RecCount()}
END WITH
.....
....
....

Function AdoSkip( nSkip )

LOCAL nStart, nEnd, nMoved := 0

nStart := oRecst:Recno()
oRecst:Skip( nSkip )
nEnd := oRecst:Recno()
DO CASE
CASE nEnd > 0
nMoved := nEnd - nStart

CASE nEnd == -3
oRecst:GoBottom()
nMoved := oRecst:RecCount() - nStart

CASE nEnd == -2
oRecst:GoTop()
nMoved := - nStart + 1

ENDCASE
RETURN nMoved


En Xailer no es necesario nada de lo anterior, porque el control DBBrowse de Xailer resuelve directamente el tipo de base de datos que se está utilizando ya sea un Array, una tabla DBF o un Query SQL (versiones Profesional y Enterprise).

Para mas información sobre ADO con FiveWin, recomiendo la lectura de estos 2 estupendos blogs:

BielSys de mi amigo Biel y SQLCmd de mi amigo Armando.

Crystal Reports y FiveWin (y Xailer y xHarbour en general)

Hay varias maneras de "entrarle" a Crystal Reports desde FiveWin y en general desde xHarbour.

Para FiveWin:

Tom Groeger, un programador Alemán, hizo una clase llamada TCRPE (Crystal Reports Print Engine) que funcionaba con FiveWin de 16 bits y por lo menos hasta la version 8.0 de Crystal funcionaba bastante bien, en el paso a 32 bits, yo me tomé la libertad de modificar dicha clase para adaptarla a 32 bits, los cambios son mínimos y la puedes descargar haciendo click aquí.

En versiones posteriores de Crystal, es decir de la 8.0 en adelante, el motor de impresión viene con un ActiveX que facilita manipular Crystal desde FiveWin, la manipulación se puede hacer fácilmente por OLE o por ActiveX con el nombre del servidor:

oCrys := tOleAuto():New("CrystalRunTime.Application")


WITH OBJECT oRpt :=oCrys:
OpenReport("file.rpt") //Report File

:
Database:Tables(1):Location:= "ruta archivo+'file.dbf' //DBF File

IF :HasSavedData
:DiscardSavedData()
ENDIF

END

DEFINE WINDOW oWnd ....

oCrRpt:= TActiveX
():New(oWnd,"CrystalReports11.ActiveXReportViewer.1")
oCrRpt:SetProp("ReportSource",oRpt)
oCrRpt:SetProp("DisplayGroupTree",.F.)

oCrRpt:DO("ViewReport")
oWnd:oClient:=oCrRpt

ACTIVATE WINDOW oWnd VALID (oCrRpt:END(),oCrys:END(),oRpt:END(),.T.)

El código anterior ha sido facilitado por Biel Maimó (www.bielsys.blogspot.com).

Para Xailer, el equipo Xailer ha creado una clase TCrystalPreview heredada de TFORM que te permite "incrustar" facilmente reportes hechos en Crystal dentro de un Formulario Xailer:



Un ejemplo de la clase puede ser obtenido haciendo click aquí.

lunes, 6 de abril de 2009

Tablas ADT con Xailer

Realmente es muy simple utilizar tablas ADT de Advantage Database Server con Xailer.

Si tienes la versión PERSONAL, entonces basta con usar las funciones correspondientes del RDDADS al momento de cargar tu aplicación en el módulo Main.

Procedure Main

REQUEST ADS
RddSetDefault("ADS")
AdsSetServerType(7)
AdsSetFileType(3) // 3 te indica que vas a trabajar con tablas ADT.
....
....
....

Y a continuación usa tus tablas ADT como si fueran DBFs comunes y corrientes (USE, APPEND, REPLACE, etc funcionan igual en ADT y DBF).

Si tienes la versión PROFESIONAL o ENTERPRISE es mas sencillo todavía:

1) Selecciona de la barra de DataSets el ADSDataSource y colócalo dentro de tu formulario
2) En el inspector de objetos, busca la propiedad nFileType y ponla en el valor afADT.
3) Para utilizar el DataSource con tablas ADT deberás usar el DBFDataSet, seleccionalo de la barra de herramientas, ponlo en tu formulario y conectalo con el DataSource definido en el paso 1.

Todo esto se puede hacer de manera visual en las versiones PRO y ENTERPRISE

SUPER.LIB para xHarbour

Para todos aquellos que usen Super.LIB con Clipper, existe una versión de dicha librería para xHarbour, se puede descargar desde la web de xHarbour Comunity, en la página de xHarbour.com, o bien haciendo click aquí

Están incluídas todas las funciones en codigo fuente PRG excepto aquellas escritas en "C" o ASM.

domingo, 5 de abril de 2009

Descargar FileXLS.lib

FileXLS es una librería que te permite generar hojas de cálculo XLS para Excel 97 que son perfectamente compatibles con todas las versiones posteriores de Excel, hasta con Office 2007.

Su gran ventaja contra otras clases como XLScript o el mismo OLE es que puedes generar archivos XLS sin necesidad de tener Excel instalado en el equipo.

FileXLS fue creada originalmente por Ramón Avendaño para FiveWin Clipper de 16 bits y la versión original puede ser descargada haciendo click en el siguiente enlace:

FileXls para FiveWin 16 bits.

Posteriormente Ramón Avendño donó el código fuente de la librería para que lo pudieras recompilar con FiveWin Harbour, el código fuente para FiveWin Harbour, un archivo .BAT y hasta un proyecto XEdit para volver a construir la librería para tu versión de FiveWin Harbour esta disponible aquí:

FileXLS para FiveWin Harbour 32 bits.
(requiere XEdit para generar la LIB mas fácilmente aunque también incluye un archivo .BAT si no quieres usar XEdit.)

Y dado el tremendo éxito de la librería en su momento para FiveWin, me tomé la libertad de hacer algunas modificaciones en el código fuente original para crear una versión para Xailer, en el siguiente enlace puedes descargar el código fuente modificado junto con el proyecto Xailer para volver a construir la librería.

FileXLS para Xailer

Gracias Ramón Avendaño por tan estupendo aporte.

FreeImage y Xailer

Aunque Xailer soporta sin ningún problema todos los tipos gráficos de Windows (BMP, GIF, JPG, etc) por medio de la clase TImage, también es posible utilizar la FREEIMAGE.DLL para tener soporte de algun formato gráfico adicional como TIFF por ejemplo.

No hay que hacer nada en la programación, simplemente poner la FREEIMAGE.DLL en la misma carpeta donde tienes tu EXE en Xailer y el programa hace el resto, si detecta que existe la FREEIMAGE la usa, y si no utiliza el API de Windows para desplegar las imagenes.

FreeImage es un proyecto OpenSource de Hervé Drolon y Floris van der Berg para crear una librería que permite visualizar gráficos en los formatos mas usados, para mas información y para descargarla haz click aquí

sábado, 4 de abril de 2009

FiveWin, programas fuentes o clases

FiveWin tiene montones de ejemplos en código fuente en la carpeta SAMPLES, y la mayoría de su código fuente está incluído en el producto original en la carpeta SOURCE\CLASSES.

Hay varios programadores de FiveWin que han donado algunos de sus sistemas con código fuente incluido.

En México el Despacho Arteaga, de mi buen amigo Alfredo Arteaga ofrece comercialmente el código fuente de su sistema CA-eXtended para Windows totalmente desarrollado en FiveWin Harbour y con opción para manejar base de datos cliente/servidor SQL.

Midas para FiveWin

Midas es un diseñador de reportes NO-VISUAL para archivos DBFs creado por la empresa BiSoft con sede en Bilbao, España.

Actualmente existe también una versión Midas para Xailer, disponible en la web de BiSoft.

La versión de Midas para FiveWin es de 16 bits, nunca fue pasada a 32 bits, de hecho tengo entendido que ningún software de BiSoft hecho FiveWin + Clipper nunca paso a FiveWin Harbour.

Aunque es difícil de conseguir, en CiberTec tenemos copia de todo, puedes descargar la versión de Midas para FiveWin 16 bits, haciendo click aquí.

BiSoft desarrolla además un sistema de contabilidad (BiConta) totalmente en Xailer, con soporte a MySQL, gestor documental y diseñador de reportes visual.

BiSoft es llevado por 2 excelentes programadores y mejores amigos: Bingen Ulgadebere y Juanjo García.

Consultas SQL con Advantage Database Server

Advantage Database Server ofrece un soporte total al lenguaje SQL sobre tablas DBF y ADT y para todos los lenguajes de programación soportados por ADS EXCEPTO PARA CA-CLIPPER.

El soporte SQL solo funciona con tablas DBF e índices CDX y para tablas ADT con índices ADI, no para índices NTX, el cliente ADS para CA-Clipper no ofrece soporte para SQL.

Toda la información para usar SQL con Advantage y con xHarbour está disponible aquí

Migración Clipper a xHarbour

En el post anterior está la respuesta.

Tutorial de xHarbour para Windows

La mejor y mas facil forma de migrar tus programas de CA-Clipper a xHarbour es usando la herramienta XEdit del equipo Xailer.

Toda la información del uso de XEdit y un tutorial para los primeros paos está disponible aquí.

Para migrar de CA-Clipper a Windows, personalmente recomiendo Xailer, que soporta modo híbrido, click aquí para mas información.

Descargar compilador Clipper

Aunque usted no lo crea CA-Clipper sigue siendo un producto comercial.

Los derechos de CA-Clipper y CA-Visual Objects pertenecen ahora a la empresa GrafXSoft, con base en Miami.

CA-Clipper 5.3 tiene un precio de 199.00 USD y se puede comprar directamente en la tienda electrónica de GrafxSoft

Como convertir un DBF a XLS desde Clipper 5.x

Si estas trabajando con Clipper 5.x y quieres generar hojas de Excel nativas, no archivos de texto con separadores, necesitas una librería que existía hace muuuucho muuuucho tiempo en una lejana galaxia llama ClipWKS.

ClipWKS es una librería para Clipper que genera hojas de cálculo en distintos formatos, Lotus 1-2-3, Quattro, y obviamente Excel, es obra de Joseph D. Booth, un gurú de Clipper, y que trabajó muchos años en colaboración con el no menos famoso gurú Greg Lief (Grumpfish library).

ClipWKS ahora es un producto GRATUITO y se puede descargar directamente de la página de Joe Booth, haciendo click aquí.

Xailer y SQLite

SQLite es una base de datos SQL no cliente/servidor que cabe completa en un archivo .LIB y que no necesita de ningún componente externo para accder a los datos.

Xailer puede utilizar NATIVAMENTE SQLite, sin necesidad de ningún componente externo como ODBC u OLE.

En la versión ENTERPRISE y en el DEMO de Xailer existe el componente SQLite DataSource que provee de acceso directo a esta base de datos.

En el EXE final no es necesario contar con ningún DLL ni conector ADO ni nada por estilo, simplemente añadir al proyecto la librería SQLITE.LIB y el EXE sale listo para accesar SQLite.

Donde hay documentación de xHarbour

Pregunta super frecuente, ¿ donde puedo encontrar documentación xHarbour ?.

En la página de la empresa xHarbour.com.

Ahí puedes comprar en formato electrónico la documentación por $ 49.00 dólares, en formato Help de Windows o bien en PDF para consultarla en tu computadora.

También hay una versión ON-LINE gratuita en la misma página de xHarbour.com, pero necesitarás estar conectado siempre a internet para poder consultarla.

Existen también 2 foros públicos para exponer tus dudas:

comp.lang.xharbour
news.xharbour.com (con foro en español y portugués)

Para acceder a estos foros necesitas un lector de grupos de noticias (Outlook Express o Mozilla Thunderbid) o bien crear una cuenta en Google Groups.

Los lenguajes de programación mas usados

Esta pregunta aparece cada semana en nuestras estadísticas por lo menos 10 veces.

La respuesta haciendo click aquí.

Las estadísticas son proporcionadas por TIOBE Software

Crack para Xailer

Lamentamos (no es cierto, no lo lamento) informarles que no existe un crack para Xailer, por el mecanismo de protección del mismo: tienes que realizar 4 procesos de registro, en 2 de los cuales hay intervención humana.

Desde que descargas la versión de DEMO de Xailer, tienes que realizar un primer proceso de registro vía internet (este es automático), sin el cual la versión de demo no funcionará, en este proceso de registro intervienen 3 datos básicos.

Nombre del usuario
Empresa
dirección de correo electrónico.

En este primer registro da igual los datos que pongas, se utilizan únicamente como estadística para el equipo Xailer.

La dirección de correo electrónico es muy importante porque toda la comunicación del registro del usuario definitivo, así como la información sobre nuevas versiones y actualizaciones será enviada a dicha dirección de correo, pero, si en esta primer etapa de registro no das una dirección de correo electrónica válida, tampoco pasa nada.

La cosa cambia cuando compras tu licencia, aquí viene el segundo proceso de registro que vincula intervención humana. Tienes que confirmar forzosamente con las oficinas de Xailer o con alguno de sus representantes los 3 datos anteriores, y en base a estos 3 datos se genera un número de serie, este número de serie es generado por intervención humana que verificará que el pago se haya realizado e ingresará los datos en un programa interno en las oficinas de Xailer en España que genera el número de serie, el cual tiene este formato:

X???-NNNNNNNN-NN

??? identifica el tipo de versión de Xailer: PERsonal, PROfesional ó ENTerprise
NNNNNNNN : es una mezcla de digitos y letras generado por el programa interno de Xailer y no es secuencial, como mencioné anteriormente se genera en base a los 3 datos básicos.
NN: el número de distribuidor

De tal forma que si compraste un Xailer Enterprise, tu número de serie comienza con XENT, luego los digitos y/o letras y al final número de distribuidor, con este último dato, las oficinas de Xailer saben que distribuidor vendió que licencia y a quien.

Este número de serie también es importante porque te da acceso a los foros de consulta privados (para versiones Pro y Enterprise) en news.xailer.com.

Una vez que tienes tu número de serie deberás ingresarlo en el IDE de Xailer instalado en tu computadora y realizar UN TERCER proceso de registro del producto via internet y/o correo electrónico, en este tercer proceso de registro, el IDE de Xailer genera una "firma electrónica" o KeyCode de 160 caracteres, esta firma electrónica identificará a tu equipo dentro de la comunidad Xailer, la firma electrónica varía por cada equipo porque para generarla se utilizan, además de los 3 datos principales, un nombre de identificación del equipo, (como puede ser: EscritorioMio, LapTopViajes, etc.) y algunos datos de ciertos componentes de hardware del equipo, de tal forma que cada "firma electrónica" es distinta para cada equipo donde instales Xailer.

La firma electrónica o keycode debe ser enviada a las oficinas de Xailer nuevamente via electrónica para un cuarto y último proceso de registro, en el cual se genera una "clave de activación" de 180 caracteres misma que te es enviada por correo electrónico y que deberás de ingresar en el IDE para completar el proceso de registro.

Cada licencia de Xailer te da derecho a 3 "activaciones" es decir, que puedes utilizar el mismo número de serie hasta en 3 computadoras distintas lo que se hace normalente es usar una activación para tu computadora de escritorio, otra para la computadora portátil y se deja la tercera activación "por si acaso" tienes que formatear alguna.

Las activaciones se pueden "cancelar" cuando lo desees, Xailer provee de una página web para hacerlo de manera automática, pero hay ciertas restricciones: No puedes cancelar una activación sino hasta pasados 90 días de que activaste un equipo, y un equipo "cancelado" con anterioridad no puede volver a ser activado sino hasta pasados 180 días desde que se desactivó.

¿ Puedo instalar al mismo tiempo las 3 activaciones en distintos equipos ?

Sí, aunque no deberías, en caso de que tengas que formatear alguno de los equipos te quedarás sin activaciones de reserva porque el mismo equipo no puede ser vuelvo a activar sino hasta 6 meses después y deberás comprar una nueva licencia.

¿ Puedo comprar mas activaciones ?

No, lo ideal es contar con una licencia individual para cada equipo, si en tu empresa hay por ejemplo 5 equipos lo ideal es tener cuando menos 2 licencias.