Dpxbase
Dpxbase
TABLA DE CONTENIDO
Tdpdit ............................................................................................................................................ 25
Controles de la Librería Fivewin para Formularios. ................................................. 28
Módulos HRB ...................................................................................................... 31
Glosario de Términos........................................................................................... 34
CAPITULO VI PROGRAMACIÓN
DPXBASE es un ambiente de desarrollo para léxico de tipo Xbase y diseñado para crear
aplicaciones de tipo comercial de manera rápida y sencilla. Además incorpora un conjunto de
componentes tecnológicos que logran aportar robustez en las aplicaciones finales. Dentro de ellas
tenemos:
DPxbase, posee un (DataBase IDE) que permite definir todas las tablas “SQL” que serán utilizadas
por el sistema de manera jerárquica: Campos, Índices, Claves Primarias y referencias entre tablas.
Además; importa estructuras desde formatos DBF.
FICHEROS
Agrupa todas las tablas maestras de este módulo, en las que se especificarán las definiciones de
aplicaciones o módulo del sistema, tablas de datos, menú de acceso, programas fuentes DPxbase,
botones de la barra del menú principal y enlaces entre tablas.
Permite modificar y eliminar los módulos existentes, así como también crear nuevos módulos
al sistema. Los efectos se verán en “Aplicaciones”.
TABLA DE DATOS
El usuario selecciona la tabla de datos y por cada campo debe indicar el tipo de control “GET,
COMBO, RADIO, CHECK, Etc.” y atributos para cada campo, que será utilizado para crear el
programa fuente xBase permitiendo la ejecución de un formulario de carga de datos que incluye toda
la funcionalidad necesaria para: Incluir o Modificar un registro de una tabla SQL. DPxbase provee la
clase TDPEDIT que controla el formulario con la tabla de datos y el navegador de registros, posee
métodos "methods" para: Iniciar, Grabar, Cancelar, Imprimir, Validar, enlaces, campos únicos y un
sin número de utilidades. Cuando DPxbase detecta que un campo esta referenciado con otra tabla
que incluye un formulario con toda la sintaxis en formato xBase, hace posible vincular a una o varias
tablas con las propiedades de acceder, buscar y regresar con el campo deseado.
En cada campo, se puede personalizar el mensaje interactivo, el control requerido y las validaciones
necesarias.
DPxbase, sugiere sintaxis para cada control, si un campo está referenciado con otra tabla, será
sugerido el control BMPGET con toda la sintaxis que permita al usuario acceder a la tabla
referenciada y relacionar ambos valores. La siguiente imagen, muestra los controles creados por
DPxbase para campos vinculados con tablas referenciadas, para los primeros casos el programador
seleccionó BMPGET, y el segundo seleccionó el control “COMBOBOX”, en ningún momento el
programador ha necesitado escribir una sola línea del código. DPxbase, sugiere la sintaxis
necesaria.
expresan en líneas y columnas, estas posiciones pueden ser reubicadas en tiempo de ejecución, el
formulario dispone de esta opción. La siguiente imagen muestra un formulario definitivo compuesto
por encabezado y Cuerpo “Renglones” y en ningún momento fue necesario escribir una línea de
código, sólo fue necesario reubicar los controles.
Luego de Crear las tablas de Datos, DPxbase genera una lista de navegación utilizando la
clase xBrowse, incluye botones sugeridos como: Grabar, Ejecutar, crear programa para
formulario, entre otros. Además; el usuario puede seleccionar de manera ordenada los
campos de las tablas con sus respectivos títulos que conformarán la lista de navegación de
cursores de una o varias tablas SQL.
Al presionar la tecla “Ejecutar”, despliega el Browse definitivo en ventana MDI, con todas las
opciones disponibles para: Incluir, Consultar, modificar, eliminar, buscar y funciones de
navegación. Este nuevo Browse, puede ser modificado en tiempo de ejecución, todas las
instrucciones están grabadas en un archivo de formato plano que permite ampliar sus
alcances, como por ejemplo: Agregar nuevos botones.
Forma parte del diccionario de datos y tiene como finalidad definir las diferentes opciones
seleccionables a través del control “COMBOBOX” para asignar el valor de un campo durante
la carga de datos desde formularios o emisiones de reportes.
También contribuye en la generación del código fuente para los formularios y reportes, el
sistema detecta los campos que poseen opciones y construyen la sintaxis para el control
COMBOBOX suministrando el contenido de opciones. Para emplear de manera dinámica se
incluye en el código fuente la función: GETOPTIONS("TABLA","CAMPO"), facilitando emplear
las nuevas opciones que pueden ser agregadas para el campo.
Para asignar nuevas opciones para el campo, acceda al formulario de tablas, en la barra de
Esta ventana para el mantenimiento de opciones, indica el nombre de la tabla y nombre del
campo, contiene las diversas opciones ya registradas y a través de: Incluir, Modificar y
Eliminar, es posible actualizar cada línea de la lista.
Es importante tomar en cuenta la longitud del campo, si posee un dígito, será asumido el
primer carácter de la opción. Ejemplo: La opción “Carácter” al ser seleccionada, solo podrá
almacenar el primer carácter “C”, debido al espacio físico que soporta. En caso que requiera
más opciones y dos o más de ellas coinciden en el primer carácter, debe ampliar la longitud
del campo. Si la longitud del campo es de tres (3) dígitos, serán guardados los primeros tres
valores de la opción especificada para el almacenamiento físico en la tabla
Consideraciones:
Los controles combobox mostrarán las opciones en el mismo orden como se registren.
Para utilizar los valores de las opciones en las columnas de los reportes puede
emplear la función SayOptions() como expresión de la columna. Ejemplo:
SayOptions(“DPTABLAS”,”CAM_TYPE”,oCursor:CAM_TYPE)
MENÚ DE ACCESO
Permite modificar y eliminar los menús de los módulos existentes, así como también crear
nuevos menús para los módulos del sistema. Los efectos se verán en “Ficheros, Transacciones,
Informes, Procesos y Otros”.
DPxbase, tiene un concepto de trabajo sistematizado donde el nombre de cada programa, reporte y
formulario está directamente asociado a las tablas, si la tabla se llama DPMENU, el Browse se
llamará DPMENU.LBX, el Programa DpXbase para el formulario se llamará DPMENU.SCR, el
Reporte será: DPMENU.REP, logrando así ubicar cualquier componente para adaptarlo. Además;
facilita personalizar el nombre de las tablas y formularios en tiempo de ejecución, logrando así que el
usuario pueda indicar nombres específicos en cualquier tabla y directamente a las opciones de:
Menú, Formularios y Reportes, ejemplo: Si la descripción de la tabla Menú de Acceso “DPMENU” es
“Menú de Acceso”, el título del formulario de productos adoptará el nombre de “Menú de Acceso”,
igualmente el campo “Singular” es utilizado para indicar el nombre de la tabla dentro de un tercer
formulario que esté enlazado con la tabla. La sintaxis necesaria para asociar el nombre de las tablas
dentro del menú de acceso debe ser: {oDp:DPMENU} en el campo “Título del Menú” después de
hacer clic en el icono “Menú de Acceso” de la barra de herramientas del sistema y luego en el
Todas las opciones del menú principal del sistema, son definibles por el usuario, y está
esquematizado por módulo, dentro de cada módulo están los menú: Ficheros,
Transacciones, Informes, Procesos y Otros asociados exclusivamente a cada aplicación, las
opciones: Macros y Barra de tareas también son definibles de la misma manera, solo difieren
que estas opciones son generales para todas las aplicaciones, también podemos decir que
una aplicación en un módulo y un sistema está compuesto por módulos.
Otras de las ventajas en la definición del menú es colocar el nombre de la tabla asociada
como título de la opción en el menú, es decir; si la tabla de productos está definida como
“Productos del Inventario”, este nombre puede figurar en el título de la opción del menú
cuando se ejecuta, permitiendo adaptar las opciones de manera directa escrita “La opción” o
a través del nombre de uso de una tabla, logrando personalizar las mismas opciones según
el tipo de empresa o país. Como por ejemplo en Venezuela denominamos “Nota de Entrega”
a un documento que indica los productos que se le entregan al cliente antes de facturar, en
Colombia se llama “Nota de Despacho” y en España se denomina “Albarán”.
DPxbase, genera y reconoce un código de léxico xBase basado en xHarbour y comandos para
FiveWin. Este lenguaje es compilado e interpretado en tiempo de ejecución permitiéndole al usuario
agregar o modificar programas sin necesidad de rehacer el programa ejecutable final. DpXbase
acepta: IF, ELSE, ENDIF, WHILE, ENDDO, DOCASE, ENDCASE, y todos los comandos
Clipper/xHarbour/FiveWin.
Ésta opción permite buscar en todos los programas fuentes ya sea una “PALABRA” ó un
campo determinado.
Al igual que el menú principal, los botones son definidos por el usuario logrando indicar: El
Archivo Bitmap, acción que ejecutará, aplicación asociada y condición de ejecución. Se pueden
indicar las tablas más utilizadas para una aplicación específica o para todas las aplicaciones.
DPxbase ofrece a la aplicación final un conjunto de herramientas útiles para la operatividad del
sistema, tales como: Usuarios, accesos para transacciones con tabla, restricciones para campos,
menú de acceso, auditoria de actividades de usuario.
Como su nombre lo indica, permite hacer el enlace entre las tablas por medio de un campo
común entre ambas tablas. Por ejemplo la tabla del trabajador “nmtrabajador” hay que enlazarla con
la tabla de departamento, cargo, unidad funcional, ausencia, etc., para ello se utiliza el campo código
del trabajador.
OTRAS FUNCIONES
DISEÑO DE FORMULARIOS
Partiendo del programa Fuente “xBase” creado por DPxbase, el usuario puede diseñar,
modificar en tiempo de ejecución todos los controles del formulario utilizando el Mouse, para
cada uno puede configurar: Línea, Columna, Alto, Ancho, Colores y Fuentes de Letra. Sin
necesidad de utilizar recursos creados en otras aplicaciones.
Luego de activar el modo diseño, es posible focalizar cualquier control a través del mouse,
moverlo en cualquier posición, ampliar o reducir su tamaño y para mayor comodidad
DPxbase ofrece alternativas para agilizar el diseño.
La siguiente imagen, muestra la posibilidad de cambiar el color del texto del control y
también la fuente de las letras.
Todas las tablas de datos en formato DBF, son totalmente portables en estructura y
contenido hacia el nuevo formato de datos utilizado por DPxbase (Motor SQL). La opción
Incluir Tablas, dispone de la opción “Importar desde DBF”, el usuario solo debe indicar el
nombre de la tabla de Datos DBF y DPxbase se encarga de definirla en el diccionario de
Aunque DPxbase esta compilado con C++, el leguaje Xbase incorporado soporta en gran
parte los procedimientos desde las versión DOS, siempre y cuando no requieran interactuar
con una interfaz de video o de impresión. Las tablas de datos en las versiones anteriores se
identificaban a través de “ALIAS” ejemplo: “alias->campo”, ahora en DPxbase será
apuntando a un cursor, ejemplo “oCursor: Campo”, los tipos de datos son 100% compatibles.
Parte de los programas escritos en DpXbase para DPxbase han sido obtenidos de versiones
anteriores con muy pocos cambios, donde se aprovecha la madurez del código ya escrito.
COMPONENTE DATASET
Es un gestor de datos controlado a través de una clase de objetos que interactúan con una
tabla de datos y tiene como finalidad manipular cualquier tipo de datos compatible con el
léxico xBase.
El sistema dispone de dos DataSet, cada uno almacena los valores en tablas distintas,
“DPDATACNF” es utilizada para todo lo referido a la configuración general del sistema y
“DPDATASET” almacena valores de manera independiente en cada empresa definida a
través de un “DSN”.
Para los parámetros del generador de informes (Fijar: Rango y Criterio) es empleado
“DPDATACNF”, debido a que todos los reportes pueden ser empleados en cualquier DSN y
la configuración de cada empresa se almacena en “DPDATASET”.
PROCE MAIN()
LOCAL oData
oData:=DataCnf(“MISECCION”)
oData:cValor:=”Prueba”
oData:End()
RETURN NIL
Para leer los datos del DataSet, debe ser realizado de la siguiente forma:
PROCE MAIN()
Local oData
oData:=DataCnf(“MISECCION”)
MsgAlert(oData:cValor)
oData:End()
RETURN NIL
Puede observar que en ambos casos, se emplea un valor virtual “oData:cValor” de la clase
TDataSet y de manera automática detecta la asignación de un nuevo valor, lo almacena y
también lo restaura cuando se encuentra guardado en la tabla. El método “End()” almacena
de manera automática los nuevos valores o los valores existentes que sufran algún cambio.
Por ello es muy práctico emplear este componente en el almacenamiento de datos.
PROCE MAIN()
Local oData,oDlg
oData:=DataSet(“DATEMPRESA”)
oData:cDir:=oData:Get(“DIR”,SPACE(20))
oData:cTel:=oData:Get(“TEL”,SPACE(12))
oData:cRep:=oData:Get(“REP”,SPACE(40))
oData:End()
RETURN
// EOF
CLASE TDATASET:
Se encarga de gestionar, leer, grabar todo lo referente al DataSet, se genera desde las
funciones DataCnf() y DataSet(), ambas devuelven el objeto de la clase TDataSet, a
continuación detallamos sus métodos.
▪ Get(cVarName,uValue):
Obtiene el valor referido de “cVarName” en caso de no existir el auto creado con el valor
indicado en “uValue”. También puede ser empleado de manera directa:
oDataSet:cVarName.
▪ IsDef(cVarName):
Devuelve .T. o .F. si el valor de “cVarName” existe.
▪ Set(cVarname,uValue):
Asigna el valor “uValue” para “cVarname”, también puede ser utilizado como:
oDataSet:cVarname:=uValue.
▪ Save():
Almacena en la tabla todos los valores del DataSet.
▪ Del():
Elimina un valor del DataSet y de la tabla, ejemplo: oDataSet:Del(cVarName).
▪ DelGroup(cGroupName):
Elimina todos los componentes asociados a un grupo.
▪ Load():
Carga todos los valores desde la tabla y generan los valores virtuales del Dataset.
“ALL”: Almacena y recupera los datos para todos los usuarios y “PC” que accedan al
sistema.
“PC”: Almacena y recupera los datos sólo para el PC que lo solicita, el nombre del PC es
obtenido del Sistema Operativo. Cabe destacar que en cada PC es posible generar
diferentes configuraciones.
“USER”: Almacena y recupera los datos sólo para el usuario que solicita, es decir; cada
usuario puede disponer de configuraciones distintas.
GetWhere(cOperador,uValor)
Construye una condición para la sentencia WHERE o SET para armar un comando SQL.
Ejemplo
cNomre:=”Datapro”
cWhere:=”WHERE CAMPO”+GetWhere(“=”,cNombre)
WHERE CAMPO=’Datapro’
Recuerde utilizar comillas [‘] o Chr(39) simples para indicar cadenas dentro de un comando
SQL. Igualmente esta función está vinculada con la configuración de fechas empleadas por
el motor de la base de datos, puede ser usada cómodamente sin tomar en cuenta las reglas
para las fechas y la complejidad de construirla:
Ejemplo:
dFecha:=DATE()
cWhere:=”WHERE FECHA”+GetWhere(“=”,dFecha)
WHERE
FECHA=[’]+STRZERO(YEAR(dFecha),4)+STRZERO(MONTH(dFecha),2)+STRZERO(DAY
(dFecha),2)+[‘]
Todo el manejo de datos en Datapro se realiza a través de comandos SQL, el acceso a los
datos de una o varias tablas se solicita utilizando sentencias que retornan un cursor de datos
en un plano bidimensional compuesto por líneas y columnas: Las líneas representan los
registros y las columnas representan los campos.
OPENTABLE(CSQL,LDATA)
Solicita un cursor de datos SQL.
<cSql> Debe contener una sentencia de léxico SQL
<lData> Indica con .T. si carga los datos. Por defecto su valor es .T.
Ejemplo:
oCursor:=OpenTable(“SELECT TAB_NUMERO,TAB_TABLE”+;
“ FROM DPTABLAS ”+;
“ ORDER BY TAB_NUMERO”,.t.)
oCursor:Gotop()
WHILE !oCursor:Eof()
? oCursor:TAB_NUMERO,oCursor:TAB_TABLE
oCursor:DbSkip()
ENDDO
oCursor:End()
Puede observar que la consulta puede ser manejada de manera similar a una tabla DBF
abierta a través de funciones del RDD o mejor dicho abierta con: USE TABLA. Para mayor
información consulte la clase TTABLE de este manual.
ASQL(CSQL)
Devuelve en tipo de datos Arreglo bidimensional el contenido del cursor generador por la
consulta SQL. Ejemplo: aSql:=ASQL(“SELECT CAMPO FROM XTABLA”). aSql Contiene la
lista de datos. MsgAlert(aSql[1,1]), muestra la primera columna. Para evaluar la respuesta
puede utilizar: ViewArray(aSql).
SQLDELETE(CTABLA,CWHERE)
Borra de la tabla <CTABLA> la cantidad de registros indicados en <CWHERE>
SQLUPDATE(CTABLA,CCAMPO,XVALOR,,CWHERE)
Permite Actualizar el valor de un campo de la cantidad de registros indicados en la cláusula
cWhere. Ejemplo:
SqlUpdate(“NMTRABAJADOR”,”TIP_NOM”,”Q”,”TIPO_NOM=’S’”) Cambia el Tipo de
Nómina para Quincenal de todos los trabajadores de Nómina Semanal.
SQLGET(CTABLA,CCAMPO,CWHERE)
Obtiene el valor de un campo desde una tabla según la condición indicada en Where. Where
puede incluir la clausula JOIN.
SQLGET(“NMTRABAJADOR”,”CONCAT(APELLIDO,”,”,NOMBRE)”,”CODIGO=’00001’”).
Obtiene el nombre y apellido del Trabajador.
SqlGet(), puede fácilmente reemplazar el uso de las funciones DBLocate() y DbSeek()
utilizadas en las tablas DBF según RDD.
DTOSQL(DFECHA)
Convierte el formato de fecha xBase en formato de fecha para el Motor SQL, según el
formato definido en “oDp:cSqlDate” previamente configurado en ODBC.INI [SQLDATE].
Queda Así:
SQLTODATE(CFECHA)
Convierte las fechas SQL en fecha xBase, según el formato definido en “oDp:cSqlDate”
previamente definido en ODBC.INI [SQLDATE]. Algunas funciones MAX o MIX de SQL
aplicadas sobre campos de tipo de fecha, generan expresiones de tipo carácter el cual
requiere ser convertida en forma de fecha real.
bDate:=SQLGETMAX(“DATABLA”,”CAMPO”,<WHERE>) // 2005-05-02
bData:=SQLTODATE(cFecha) // 02/05/2005
BDLIST(CTABLE,AFIELDS,LGROUP,CWHERE)
Genera un cursor de datos según:
Ejemplo:
uValue:=BDLIST(“NMTRABAJADOR”,”CODIGO,APELLIDO,NOMBRE,SALARIO”)
BDSELECT(CTABLE,AFIELDS,LGROUP,CWHERE))
Genera un cursor de datos según:
Presenta la consulta “Cursor” a través del editor de registros, con la finalidad de realizar
selección múltiple de registros, es decir; marcar los registros necesarios, al finalizar devuelve
una cadena con todos los valores seleccionados y representados por la primera columna.
cValue:=BDSELECT(“NMTRABAJADOR”,”CODIGO,APELLIDO,NOMBRE,SALARIO”)
aList:=MacroEje(“{“+cValue+”}”)
Tambien, recomendada:
aList:=_Vector(cValue)
GETOPTIONS("TABLA","CAMPO")
Devuelve en un arreglo todas las opciones registradas para un campo de determinada tabla.
Ejemplo:
aOpcion:=GETOPTIONS(“DPTABLAS”,”CAM_TYPE”)
Devuelve una lista o arreglo con los siguientes valores: “Numerico”, ”Date(Fecha)”,
”Carácter”, ”Logica” y ”Memo”.
SAYOPTIONS(cTable,cField,uValue)
INNERJOIN(cTabla1,cTabla2,cInner)
Ejemplo: INNERJOIN(“DPTABLAS”,”DPCAMPOS”)
OBJETOS
Clase TTable
Clase DpLbxRun
Clase DpEdit
ARCHIVOS DE AYUDA
Está compuesto por dos tipos de archivos “Tradicionales HLP” que componen la ayuda
ofrecida por las librerías FiveWin y estas no forman parte de la licencia.
TPUBLIC
Esta clase genera un objeto en público que está disponible en todo el sistema y tiene como
finalidad almacenar todos los valores que el sistema necesita para su funcionamiento técnico
y conceptual. Este novedoso modelo de datos es altamente productivo al evitar el uso
excesivo de memoria para declarar variables públicas.
DpXbase provee el objeto <oDp> desde que arranca el sistema y contiene toda la
información referida a la configuración del sistema, por ejemplo:
oDp:cMiDato:=”Cualquier Dato”
MsgAlert(oDp:MiDato)
Mostrará la ventana de dialogo Alert indicando “Cualquier Dato”
El programa DPINI es la primera ejecución DpXbase que se realiza al iniciar Datapro. Aquí
se asignan la mayoría de valores que definen la ejecución y/o presentaciones del sistema.
Como por ejemplo el tamaño de los botones
Métodos:
TTABLE
Es una clase propietaria de DpXbase que accede a consultas SQL empleando la función
OpenTable(cSql,lRead) que devuelve un Objeto contentivo de la consulta SQL al estilo de
datos RDD (xBase). Ttabla hereda todos los campos de la estructura permitiendo navegar
en cada registro y conocer el contenido de cada campo, ejemplo: oCursor:CAMPO.
Ttable es utilizada en toda la aplicación para acceder a las consultas de la Base de Datos
necesarias en los Browser, Formularios, Consultas e Informes.
oTable:End()
También puede manejar campos virtuales con la finalidad de rediseñar la consulta, ejemplo:
oTable:Replace(“CAMPONUEVO”,oCursor:Monto*2), genera un nuevo campo llamado
CAMPONUEVO que se derivó de la expresión: oCursor:Monto*2
Sintaxis: Ttable():New(cSql)
CtoDbf(cFile): Crea una tabla en formato DBF/FPT con el contenido del Cursor. Es
necesario que las consultas que utilicen funciones, representen los resultados a
través de etiquetas. Ejemplo SELECT MAX(XCAMPO) AS CAMPO , la columna
MAX(XCAMPO) será representada por CAMPO.
PROCE MAIN()
LOCAL oTable
RETURN
En este ejemplo se puede observar que el cursor <oTable> se requiere sin datos,
por esta razón la función OpenTable(“SELECT * FROM
XTABLA”,.F.).Solicitó a través de .F. el cursor en forma vacía, debido a que solo
es necesaria la estructura de la tabla y como será realizado el proceso de inclusión
no es necesario leer datos de la tabla.
#INCLUDE "DPXBASE.CH"
PROCE MAIN()
LOCAL oTable,xValor,nLen
xValor:=SQLGET(“XTABLA”,”MAX(XCAMPO)”)
xValor:=VAL(xValor)
RETURN
El método commit() construye la real sentencia SQL para la inserción del registro de
la siguiente forma:
INSERT INTO XTABLA (CAMPO1,FECHA) VALUES (‘0001’,’3005-05-
2005’).
TDPEDIT
Es una clase DpXbase que permite diseñar formularios de tipo (MDI) en forma declarativa,
es decir a través de comandos xbase para la declaración de Controles que en tiempo de
ejecución puedan ser rediseñados en forma visual. El formulario acepta como métodos
virtuales todas las funciones definidas con “FUNCTION” en el mismo programa DpXbase,
igualmente permite la asignación de Data en forma dinámica con tan solo ejecutar la
declaración “oForm:nVariable:=100”
Ejemplo
#INCLUDE "DPXBASE.CH"
PROCE MAIN()
LOCAL oFont
oFrm:=DPEDIT():New("Titulo","Fichero.edt","oFrm" , .T. )
oFrm:cVarName:=SPACE(20)
oFrm:nValor :=100
oFrm:dFecha :=oDp:dFecha
XSAY("Nombre")
XSAY("Valor")
XSAY("Fecha")
oFrm:Activate()
RETURN
FUNCTION MyValid()
IF Empty(oFrm:cVarName)
MensajeErr("Nombre no Puede Estar Vació")
RETURN .F.
ENDIF
RETURN .T.
FUNCTION XSAY(cText)
LOCAL oObj
oObj:=ATAIL(oFrm:oDlg:aControls)
RETURN .T.
FUNCTION ACEPTAR()
MsgAlert("Aquí se ejecuta el proceso")
RETURN .T.
Métodos de la clase
bEnd: Bloque de Código que debe ejecutarse al cierre del formulario, si éste
devuelve .f., el formulario no puede ser cerrado. Esta utilidad es de gran ayuda para
realizar validaciones de cierre.
bValid: Bloque de código que permite validar el cierre del formulario, puede evitar
salirse con [X] de la ventana MDI.
lEscClose: Indica con .T. si el formulario puede ser cerrado con la tecla ESC.
Todos los controles definidos deben ser asociados sólo con el formulario.
oFrm:nValor:=1000
oFrm:oCol:=oFrm:oBrw:aCols[1]
oFrm:oCol:cHeader:="Código"
oFrm:oCol:nWidth :=140
oFrm:oCol:=oFrm:oBrw:aCols[2]
oFrm:oCol:cHeader:="Apellido"
oFrm:oCol:nWidth :=200
oFrm:oCol:=oFrm:oBrw:aCols[3]
oFrm:oCol:cHeader:="Nombre"
oFrm:oCol:nWidth :=200
oFrm:oBrw:bClrStd := {|oBrw|oBrw:=oFrm:oBrw,;
{0, iif( oBrw:nArrayAt%2=0, 15790320, 16382457 ) } }
oFrm:oBrw:CreateFromCode()
BAR (Barra de Botones). Debido a que el formulario provee el control Dialogo como
contenedor de controles es necesario definir la barra de botones en la cláusula (ON INIT) del
dialogo, para lograrlo la clase TDPEDIT del formulario permite definir en el primer parámetro del
método Activate(bInit) la llamada al método virtual o función donde se ejecuta la iniciación del
formulario.
#INCLUDE “DPXBASE.CH”
PROCE MAIN()
oFrm:=DPEDIT():New("Titulo","Fichero.edt","oFrm" , .F. )
oFrm:CreateWindow()
oFrm:Activate({||oFrm:HacerBarra()})
RETURN
FUNCTION HacerBarra()
LOCAL oCursor,oBtn
RETURN .T.
MÓDULOS HRB
En la carpeta hrb ubicada dentro de la carpeta principal del sistema se encuentran los siguientes
ficheros.
Harbour.exe (Compilador 32 Bits)
Build.bat (Fichero de lotes para compilar)
Testhrb.prg (programa prg ejemplo)
Programa test.prg
// Ubicado c:\dpnmwin\hrb\test.prg
#INCLUDE "DPXBASE.CH"
MEMVAR oDp
FUNCTION HRBtest(cText)
MensajeErr(oDp:cEmpresa,cText)
RETURN NIL
// eof
Pueden notar que el test.prg posee la función HrbTest() que puede ser ejecutada desde cualquier
parte de DpXbase. La función HrbTest(), puede hacer llamadas a funciones propias de DpXbase
“MensajeErr” y llamadas a procedimientos Dpxbase con tan solo indicar:
EJECUTAR(“XPROGRAMA”,xValor).
BUILD TEST
Build.bat se encarga de compilar el programa test.prg y generar c:\dpnmwin\test.hrb listo para ser
cargado y utilizado desde DpXbase.
#INCLUDE "DPXBASE.CH"
PROCE MAIN()
HRBLOAD("test.hrb")
HRBTEST(“Desde DpXbase”)
RETURN
Reglas generales: Las funciones no deben tener nombres similares a las funciones existentes en
DpXbase. No deben declarar variables estáticas ni definir clases para objetos. La principal función
de los módulos HRB es la definición de funciones. Si al cargar el módulo HRB desde DpXbase se
presenta un mensaje de error se debe a que el programa HRB está haciendo llamado a funciones no
existentes en el ejecutable de DpXbase.
Los módulos HRB sólo se generan desde la compilación de un programa PRG y no como los DLLs
de los productos Datapro DOS que requerían compilación y enlazamiento (Linkado) donde se podían
involucrar varios programas *.PRG, archivos objetos *.OBJ y archivos de librerías *.LIB
Ambos modos de trabajo tienen sus ventajas. La principal ventaja de los módulos HRB está en la
velocidad de ejecución que es mucho mayor que DpXbase, además la declaración de variables
locales son reales permitiendo crear diversas instancias de controles como diálogos (no modales) o
ventanas MDI. El programa fuente no es necesario para la ejecución, lo cual permite proteger la
propiedad intelectual del código.
DpXbase, posee su editor propietario y es más cómodo, escribir, compilar y ejecutar. Siempre estará
disponible el programa fuente. No permite crear instancias para diálogos no modales ni ventanas
MDI, por ello siempre debe apoyarse en clases como TDPEDIT o TMDI.
INFORMES
Este reporte muestra todos los campos de las tablas a través de los campos; descripción, tipo,
longitud y decimales. Está ordenado por tabla.
Muestra los reportes de las tablas a través de; tablas enlazadas, campos de la tabla enlazada,
campos de la tabla solicitante, modifica y elimina. Está ordenado por tabla.
TABLAS
Muestra todas las tablas a través de los campos número, nombre de la tabla, utilización, aplicación y
nombre del destino. Está ordenado por número.
PROCESOS
RECOMPILAR PROGRAMAS
Proceso mediante el cual se puede volver a precompilar todos los programas fuentes en caso que
uno de ellos se haya modificado y se requiera volver a la configuración inicial del mismo.
GLOSARIO DE TÉRMINOS
UDF: User Define Function. Definición otorgada a las definiciones creadas por el usuario.
CURSOR: Respuesta recibida en un plano bidimensional (Línea y Columnas) desde una consulta
SQL.DSN: Data Source Name. Nombre de las conexiones ODBC con servidores de bases de datos,
previamente definidas en orígenes de Datos ODBC de Herramientas Administrativas del Panel de
Control de Windows.
CLASE: Código fuente o partitura de las acciones de un objeto, contiene: clase padre (opcional si
hereda desde otro objeto), métodos que indica lo que hace el objeto y Data que indica lo que tiene el
objeto. Obligatoriamente debe poseer un método constructor denominado NEW() y un Destructor
denominado END().
MÉTODO. Method de la clase. Conforman las funciones o actividades que realiza el objeto, en forma
analógica, puede ser comparada con las funciones estáticas de un programa que solo se pueden
usar desde el mismo programa donde fue declarada. Para utilizar el método de una clase debe ser
llamada indicando el nombre del objeto, seguido dos puntos y finalmente el nombre del método con
sus respectivos parámetros. Ejemplo: oObjeto:Metodo(uPar1,uPar2,uParn). Método Virtual, ha sido
una definición adicional implantada en DpXbase.
DATA: Valores o contenidos del Objeto. Se representan a través de nombres válidos como
variables. También puede ser definido como “Lo que tiene el objeto”. Ejemplo: Objeto:xData.
OBJETO: Componente abstracto que realiza actividades según las tareas definidas en los métodos
y valores almacenados en memoria (data). El objeto permite trabajar múltiples veces en forma
simultánea (Instancias). Una clase puede ser definida a partir de otra clase aprovechando toda su
partitura (herencia).
ENLAZAMIENTO: Definición del proceso final para la generación de un programa ejecutable o DLL
donde se utilizan programas objetos producidos por la compilación y librerías contentivas de las
funciones invocadas por los programas fuentes.
COMPILACION: Proceso de conversión en archivo objeto (OBJ) a partir de las instrucciones escritas
en forma (humana) por un programador.
DLLS: Dynamic Link Library. Programas compilados y enlazadas de la misma forma que un
programa ejecutable con la diferencia que se carga una sola vez en memoria y sus funciones
pueden ser llamados o utilizados desde varios programas ejecutables. Otro uso de ficheros DLLs
pueden estar compuestos de recursos compuestos por diseños de controles: Combobox, text,
checkbox, etc.