You are on page 1of 70

Programación

TABLA DE CONTENIDO
PROGRAMACIÓN............................................................................................................................................3 FICHEROS.......................................................................................................................................................22 aplicaciones o modulo del sistema................................................................................................................22 TAbla de datos ..............................................................................................................................................22 Generador de Browses o Listas.................................................................................................................24 Opciones Para Los Campos.....................................................................................................................25 menú de acceso..............................................................................................................................................27 Definición del Menú................................................................................................................................28 programas fuentes dpXbase........................................................................................................................28 Botones de la Barra del menú Principal .....................................................................................................31 enlace entre tablas.........................................................................................................................................32 otras funciones..................................................................................................................................................32 Generador de Informes..................................................................................................................................32 Diseño de Formularios..................................................................................................................................32 Continuidad EN Datapro para Tablas DBF................................................................................................36 Continuidad en el Léxico XBase desde los Productos DOS..........................................................................36 Componente DataSet.....................................................................................................................................36 Clase TDataSet:.........................................................................................................................................38 FUNCIONES PARA SENTENCIAS SQL......................................................................................................40 FUNCIONES PARA EL MANEJO DE DATOS............................................................................................41 OpenTable(cSql,lData).............................................................................................................................41 asql(csql)...................................................................................................................................................41 SQLdELETE(Ctabla,CwHERE)...............................................................................................................42 SQLUPDATE(Ctabla,CCAMPO,xVALOR,,CWHERE).........................................................................42 SQLGET(Ctabla,CCAMPO,CWHERE)..................................................................................................42 DTOSQL(dfecha)......................................................................................................................................43 sqltodate(cfecha).......................................................................................................................................43 BDLIST(cTable,aFields,lGroup,cWhere).................................................................................................43 BDSELECT(cTable,aFields,lGroup,cwhere))..........................................................................................44 OBJETOS .....................................................................................................................................................46 GridEdit(cTable , cLinkdHead , cLinkGrid , cSql )......................................................................................50 archivos de ayuda..........................................................................................................................................51 Clases Propietarias Datapro............................................................................................................................52 TPUBLIC.......................................................................................................................................................52 Ttable.............................................................................................................................................................53 TDPEDIT.......................................................................................................................................................58

Manual del Usuario

Capítulo VI. Pag: 1

Programación
CONTROLES de la librería fivewin para formularios................................................................................62 Módulos HRB....................................................................................................................................................66 utilizacion de otras herramientas de desarrollo.............................................................................................68 utilizacion de REPORTES DISEñADOS CON FOXPRO...........................................................................68

Manual del Usuario

Capítulo VI. Pag: 2

Programación

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: 1. Lenguaje de Programación xHarbour para 32 bits y C++ de Borland. 2. Acceso a Bases de Datos de tipo SQL a través de ODBC o Nativo MySQL. 3. Uso de Integridad Referencial en las bases de datos. 4. Reportes a Través de Crystal Report. 5. Generador de Reportes para la clase Treport. 6. Generador de Código Fuente para Formularios de múltiple propósitos: Mantenimiento de registros, Ventanas de Diálogos, Ventanas MDI. 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.

Tipos de Datos:
DpXbase soporta los mismos tipos de datos de las Tablas de Formato DBF de Dbase o Foxpro, adicionalmente soporta tipos de datos exclusivos de Clipper tales como: Bloques de Código, Arreglos, Objetos y Nulos . Para una fácil compresión o lectura de programas escritos en DpXbase utilizamos la notación Húngara que consiste en una técnica para declarar las variables con un prefijo que indica el tipo de dato que lo representa, ejemplo: LOCAL LOCAL LOCAL LOCAL LOCAL LOCAL LOCAL nNumerico:=100 cCaracter:=”Caracteres” dFecha:=DATE() lLogico:=.T. bBloq :={||NIL} aArray :={1,2,3,4,5} oObjeto:=OpenTable(“SELECT * FROM DPINV”)

Manual del Usuario

Capítulo VI. Pag: 3

2. Arreglos: También llamados vectores son listas de valores de una sola dimensión.3. Lógicos: Se obtiene por las comparaciones de valores mediante operadores lógicos y relacionales.3.} Para declarar arreglos multidimensionales. soporta 19 enteros y siete decimales.T.CTOD().2. Si preguntamos por su valor: MsgAlert(ValType(nValor)).nil.MONTH(). DpXbase al igual que clipper no soporta arreglos multimensionales en forma literal sin embargo un arreglo puede esta compuestos de listas contentivas de arreglos logrando la manipulación de arreglos multidimensionales. Pag: 4 .DTOC(). entre otras.5. Date o Fecha: Soporta datos según el formato “dd/mm/aaaa” y se refiere a fechas que pueden soportar operaciones matemáticas y su uso está vinculado con las funciones DAY(). Carácter o Memo: Acepta caracteres o cadenas de datos y soporta hasta 4 Gigas por cada variable.4. siempre su valor es verdadero .DOW().6}) // Puede Notar que estamos adicionando una lista de números Para mostrar el primer elemento.. debe utilizar la siguiente forma: aLista:={} AADD(aLista. o Falso .F.2. “LOCAL nValor”. Nulos: Se refiere al valor por defecto que posee una variable cuando se declara sin valor. se refiere a valores de tipo numéricos.date(). Ejemplo: aLista:={1.Programación Numéricos. mostrará NIL. La lista de los arreglos se declaran con {}.{1.4.CMES(). otra ventaja de los arreglos es que su contenido puede estar compuesto por datos de varios tipos. Igualmente soporta valores enteros (sin decimales). DTOS(). de esta manera nValor es NIL.T.5. se debe utilizar la siguiente sintaxis: Manual del Usuario Capítulo VI.6} aLista:={“Uno”.

AADD(aCampos.16.”L”.{|a.1])) // Mostrará 1 También puede utilizarse aLista[1][1] DpXbase provee un conjunto de funciones diseñadas exclusivamente para el manejo de arreglos: AADD().”M”. ADEL().”D”.10. ASCAN().Programación MsgAlert(STR(aLista[1. AINS().T. ASORT(). // Buscar en un arreglo Multidimensional #INCLUDE “DPXBASE.”N”.n| a=”POSGRES”) ? nAt. AADD(aCampos.T.”POSGRES”} nAt:=ASCAN(aData.2}) {“LOGICO” .2}) {“FECHA” . AEVAL(). Pag: 5 .CH” PROCE MAIN() LOCAL aCampos:={} AADD(aCampos. {“CARACTER”. Veamos sus más importantes usos: // Buscar en un arreglo Unidimensional #INCLUDE “DPXBASE.2}) {“MEMO” .{|a.n| a[2]=”L”) ? nAt.”Econtrado en 3” RETURN . ACLONE() Etc. AADD(aCampos. ARREDUCE().0}) {“NUMERICO”.n| a[2]=”L”) Manual del Usuario Capítulo VI. ASIZE().2}) nAt:=ASCAN(aCampos.”Encontrado en 3era posición” RETURN .08.10. AADD(aCampos. El uso de arreglos ha sido altamente explotado en DpXbase. se utilizan conjuntamente con bloques de código y objetos.01. “SQL-SERVER”.”C”. logrando una potencial herramienta de programación.CH” PROCE MAIN() LOCAL aData:={“MYSQL”.{|a. El ambos ejemplos podemos notar la siguiente sintaxis aplicada en la función ascan() nAt:=ASCAN(aCampos.

Bloques de Código: Como su nombre lo indica son datos que contienen código de ejecución “que ejecutan como si fuese parte del EXE”. en cada vuelta serán enviados como parámetros el elemento del arreglo “a” y la posición “n” del mismo.”Este es el mensaje”) Los bloques de código se comportan en forma similar a una función de un programa. la gran diferencia entre un programa ejecutable “Binario” y un bloque de código están en que el programa ejecutable se encuentra almacenado en un fichero de extensión EXE y el bloque de código está almacenado en una variable.Programación Estos dos parámetros |a.nValor2) LOCAL nResp:=nValor1+nValor2 RETURN nResp Manual del Usuario Capítulo VI. pueden recibir parámetros y devolver valores. Declaración: bBloque:={||MsgAlert(“Hola DpXbase”)}) Para ejecutarlo: Eval(bBloque) // Muestra en un dialogo “Hola DpXbase” También recibe parámetros. ejemplo: bBloque:={|cMensaje|MsgAlert(cMensaje)}) Eval(bBloque. es decir. si el arreglo está compuesto de 10 elemento. se ejecutará un proceso cíclico de 10 vueltas. Pag: 6 . ejemplo: FUNCTION SUMAR(nValor1.n| se refiere a: a Corresponde al elemento que está en evaluación n Se refiere al número del elemento. La funciones ASCAN() y AEVAL() realizan un recorrido ascendente del arreglo. El Bloque de código es un potencial altamente aplicado en todo DpXbase y en las reglas de negocio encargadas de generar las transacciones comerciales.

Pag: 7 .10. Manual del Usuario Capítulo VI.20) // Devuelve 30 Los bloques de código están en todas partes del sistema. tales como: Clic en un control (Botón. gran parte de las funciones DpXbase utilizan bloques de código en especial las funciones orientada al manejo de arreglos.nValor2|nValor1+nValor2} Para ejecutar la Suma. Menú.Programación Para Ejecutar la suma es necesario llamar a la función sumar de la siguiente manera: SUMAR(10. etc.20) y devuelve 30 La traducción literal de la función SUMAR() hacia bloque de código es: BSumar:={|nValor1. es necesario utilizar la función EVAL() de la siguiente manera: EVAL(bSumar.CH” PROCE TESTBLQ() LOCAL oDlg.1 BUTTON oBtn PROMPT “Cerrar” oBtn:bAction:={||oDlg:End() ACTIVATE DIALOG oDLG RETURN NIL En este ejemplo puede observar que la acción de botón “Cerrar” está definida mediante un bloque de código. cuando el usuario presione “Clic” será ejecutado el bloque de código “oBtn:bAction “ que está compuesto por la llama al método “End()” cerrar del dialogo identificado con la variable “oDlg”. principalmente donde están las ejecuciones.). Cada vez que el usuario presiona CLICK en un control está haciendo uso de un bloque de código que contiene la ejecución del control. Conocer ampliamente y dominar el concepto de bloque de código le ayudará a conocer DpXbase y construir soluciones aprovechando el potencial de los bloques de código.oBtn DEFINE DIALOG oDLG TITLE “Bloque de Código” @ 1. ejemplo: #DEFINE “DPXBASE. Los bloques de código están en todo el uso de DpXbase.

) y contiene datos “números del 0 al 9” para realizar operaciones matemáticas.DIALOG) son manipulados mediante objetos que se definen a través de comandos predefinidos en el fichero de encabezado “DPXBASE.edt". Operadores: Son un conjunto de símbolos utilizados para generar resultados aritméticos y/o lógicos.COMBO. etc. Aritméticos: Se encargan de realizar operaciones aritméticas de: Asignación."oObjeto".2 con la diferencia que están diseñadas para 32 bits.. Manual del Usuario Capítulo VI. Pag: 8 ."forms\formulario.TEXT. Podemos notar que DpXbase posee una calculadora totalmente diseñada bajo el concepto de programación “Objeto”. como por ejemplo una calculadora: Posee teclas que realizan tareas: (indicar un numero.CHM” ubicado en la carpeta HELP de sistema de gestión empresarial o nómina.Programación Objetos: El concepto de Objetos utilizado por DpXbase está basado bajo el concepto clásico de “Programación Orientado a Objetos (OOP)”. Por razones de comodidad y estandarización DpXbase utiliza las mismas funciones estándar xbase de Clipper 5. Multiplicación y División. sumar.CH” En el fichero “DPXFUNCTION. Todos los controles Windows (GET. para hacer llamada a un objeto utilizamos la siguiente sintaxis: oObjeto:=TDpEdit():New() oObjeto:=DPEDIT():New("Titulo".) oObjeto:Activate() Si evaluamos el tipo de dato de oObjeto con ValType(oObjeto) devuelve “O” Las funciones del objeto o mejor dicho lo que hace se denomina “Metodo()” y los datos que contiene se llama “Data”. Podemos definir que un objeto es un elemento que está compuesto por datos y que realizar actividades. contiene la documentación y ejemplo de cada una de las funciones estándar xbase utilizadas en DpXbase. restar. Resta. Los datos de tipo objeto se obtiene mediante la llamada a una clase Objeto preexistente en DpXbase.F. Suma.

también concatena valores de tipo carácter. Ejemplo: #INCLUDE “DPXBASE. Ejemplo: LOCAL nMonto:=5*5 ? nMonto. Realiza la división de valores numéricos.dFecha / Dividir. Suma en forma algebraica valores numéricos y fechas. Ejemplo: LOCAL nMonto:=5*5 ? nMonto ** Potenciacion.Restar. Genera el valor potencial de un valor numérico. Ejemplo: LOCAL nMonto:=200-100 LOCAL bFecha:=DATE()-1 ? nMonto. LOCAL nMonto:=100+200 LOCAL bFecha:=DATE()+100 LOCAL cChar:=NETNAME()+” este es mi PC” ? nMonto. Resta algebraicamente valores numéricos y fechas.CH” Manual del Usuario Capítulo VI. Pag: 9 . Realiza la multiplicación de valores numéricos.dFecha * Multiplicar.cChar .Programación := Asignar: Asigna el resultado hacia una variable. ejemplo: nValor:=100+200 + Sumar.dFecha.

(1=1) El símbolo # puede ser usado por .OR.OR. ejemplo: lResp:=(1<=0) Diferente que.NOT. Verdadero o . Y . Pag: 10 . ejemplo: lResp:=(1=0)que Cadena Asociada “A”$”ABEDARIO” Lógicos: Se encargan de realizar operaciones que generan resultados verdaderos y falsos con diversas comparaciones relacionadas. ejemplo: lResp:=(1=0) Menor que. Falso. Una de las condiciones debe cumplirse IF (1=0) . ejemplo: lResp:=(0<1) Menor o Igual que. ejemplo: lResp:=(1>0) Mayor o Igual que.T. (2=2) . (1=2) Tambien puede utilizar ¡ If ¡(1=0) Manual del Usuario Capítulo VI. todas las condiciones deben cumplirse: IF (1=1) . O. ejemplo: lResp:=(1=0) Exactamente igual que. IF . .Programación LOCAL nMonto:=3**2 ? nMonto Relacionales: Utilizado para realizar comparaciones entre valores y generan valores lógicos . = == > >= < <= <> $ Igual que. Negación.F.or.AND.NOT.and.0==1. IF (1=0) # (1=2) . ejemplo: lResp:=(1.1) Mayor .

Iniciación de Arreglo: aArray:={} Declaración de un Arreglo de elementos: aArray:=ARRAY(20) ? aData[1] // Muestra NIL Genera un arreglo con 20 elementos nulos.”Nuevo”) Medir la longitud del arreglo: Manual del Usuario Capítulo VI. Pag: 11 .4. La referencia de cualquier elemento se establece mediante su posición.Programación Manipulación de Datos: DpXbase al igual que Clipper tienen consideraciones especiales para manipular datos de tipo arreglos y bloques de código. Rellenar un arreglo Para rellenar el arreglo del carácter X: AFILL(aArray. los arreglos de dentro de un arreglo conforman arreglos multidimensionales o concatenados.6} . Manipulación de Arreglos: Este tipo de datos se manipulan mediante las siguientes funciones especialmente diseñadas para el manejo de arreglos y listas. una de las grandes ventajas de los arreglos es que soportan cualquier tipo de datos incluyendo arreglos. se refiere al segundo elemento de la lista. generando una lista: aLista:={1. ejemplo: aLista[2].5. Recordemos que los arreglos es un tipo de datos compuestos por otro tipo de datos.3.”X”) ? aData[1] // Muestra X Agregar un nuevo elemento: AADD(aData.2.

ahora queda con 20 elementos.3}) AADD(aData. También se puede remover un elemento con la siguiente función: ARREDUCE(aData.”Primero”) // Inserta un nuevo elemento en la primera posición Ordenar un Arreglo ASORT(aData) Ordenar un Arreglo Multidimensional LOCAL aData:={}.1}) aData:=ASORT(aData.1) elemento. y| x[1] < y[1] }) Manual del Usuario Capítulo VI..2}) AADD(aData. la lista se mantiene en 21 elementos.{“A”. Pag: 12 .{“B”. { |x.Programación ? LEN(aData) // Genera 21 Remover o Quitar el primer elemento del arreglo: ADEL(aData.. // Elimina físicamente el primer Asignar un Valor en cualquier posición del Arreglo: aData[1]:=”Nuevo Valor” Insertar un nuevo Elemento: AADD(aData.nAt AADD(aData.{“Z”.1) // Remueve el primer elemento con valor NIL.NIL) // Agrega un nuevo elemento al final AINS(aData. aData:=ASIZE(LEN(aData)-1) // Reduce el tamaño de la lista.

.3}) aNuevo:=Aclone(aData) Recorrer una lista LOCAL aData:={}.{“C”.. Para arreglos multidimensionales: LOCAL aData:={}.{“B”.”X”) // Realiza elementos de la lista.2}) Manual del Usuario Capítulo VI. {|a.{“B”.{“A”. Pag: 13 .nTotal:=0 AADD(aData.n| a[1]=”B” ? nAt // Respuesta 2 }) la búsqueda de X en los Visualizar un Arreglo: ViewArray(aData) Duplicar Arreglo: LOCAL aData:={}.nAt AADD(aData. ASCAN(aData. { |x.{“A”.1}) AADD(aData.{“B”. y| x[2] < y[2] }) Buscar en la Lista.{“C”.2}) AADD(aData.Programación // Si se require Ordenar por la segunda Columna numérica aData:=ASORT(aData.1}) AADD(aData.2}) AADD(aData.1}) AADD(aData.aNuevo AADD(aData.3}) nAt:=ASCAN(aData.{“A”.

2.{“B”. LOCAL cChar:=”” CChar:=cChar + “Nueva Cadena” Manual del Usuario Capítulo VI.4}) Aeval(aData.1}) AADD(aData. // totaliza los elementos cuya columna es “B” Obtener el ultimo elemento : LOCAL aData:={1.{“C”.n.6} ? ATAIL(aData) // Muestra 6 Otro uso.{“B”. Pag: 14 .{“C”.5.Programación AADD(aData.{“B”.3}) AADD(aData. Incrementar o Concatenar Cadenas.4. {|a.3.{“A”.3}) AADD(aData. DpXbase Incluye un conjunto de funciones que permiten trabajar ampliamente con este tipo de datos.4}) aTotales:=TOTALES(aData) ? aTotales[2] // Respuesta 10 Manipulación de Cadenas: El tipo de dato carácter se puede concatenar en forma literal.aTotal:=0 AADD(aData.b| nTotal:=nTotal + b }) b:=iif( a[1]=”B”.0).2}) AADD(aData. a[2] . puede ser ? aData[len(aData)] // Muestra 6 Totalizar una lista LOCAL aData:={}.

Programación Generando un valor de tipo Memo.¨BB¨.2) ? cChar // Muestra DD LOCAL cChar:=”ABBCCDD” cChar:=SUBS(cChar. Pag: 15 .2) ? cChar // Muestra BB Buscar Posición Manual del Usuario Capítulo VI.cChar) Leyendo desde Disco cChar:=Memoread(cChar) También puede ser cChar =+ cChar <eemplazando valores cChar:=”ABBCCDD cChar:=STRTRAN(cChar.2) ? cChar // Muestra AB LOCAL cChar:=”ABBCCDD” cChar:=RIGHT(cChar.2. cChar:=cChar + CRLF + “Nueva Lista” // CRLF es CHR(10)+ CHR(13) Grabando el Disco MemoWrit(¨Fichero.txt”.¨bb”) ? cChar // Muestra AbbCCDD Obtener parte de una Cadena LOCAL cChar:=”ABBCCDD” cChar:=LEFT(cChar.

? “A”==cChar // Muestra .B.cChar) // Muestra 4 LOCAL cChar:=”ABBCCDD” ? RAT(“B”.C.T.Programación LOCAL cChar:=”ABBCCDD” ? AT(“C”.T.F. Pag: 16 . ? “A”=cChar // Muestra .cChar) // Muestra 5 Comparar Cadenas LOCAL cChar:=”ABBCCDD” ? “B”$cChar // Muestra .E” LOCAL aData aData:=_Vector(cChar) ViewArray(aData) Conversión en Numérico LOCAL cChar:=”1000” LOCAL nValor nValor:=VAL(cChar) Conversión en Fecha LOCAL cChar:=”01/01/2007” LOCAL dFecha dFecha:=CTOD(cChar) ? dFecha+1 // Muestra 02/01/2007 Manual del Usuario Capítulo VI. Conversión en Arreglos LOCAL cChar:=”A.D.

A:=100. es decir se puede sumar o restar.B:=200 B:=BloqueCod(cChar) ? Eval(R) // Muestra 300 Repetir Carácter LOCAL cChar:=Repli(“-“.10) ? cChar // Muestra --------Rellenar de Ceros LOCAL cChar:=STRZERO(123. DpXbase Incluye un conjunto de funciones que permiten trabajar ampliamente con fechas.10) ? cChar // Muestra 0000000123 Manipulación de Fechas: El tipo de dato Fecha o Date se puede concatenar en forma literal.B:=200 R:=&cChar // Tambien puede usar R:=MACROEJE(cChar) ? R // Muestra 300 Convertir en Bloque de Código LOCAL cChar:=”A+B” LOCAL B. Declarando Fecha LOCAL dFecha:=CTOD(“”) ? dFecha // Muestra / / Obteniendo la Fecha desde el Sistema Operativo Manual del Usuario Capítulo VI. Pag: 17 .A:=100.Programación MacroEjecución LOCAL cChar:=”A+B” LOCAL R.

Programación LOCAL dFecha:=DATE() ? dFecha // Muestra 03/03/2007 Incrementar Fecha LOCAL dFecha:=CTOD(“01/01/2007”) dFecha:=dFecha + 7 ? dFecha // Muestra 08/01/2007

Disminuir Fecha LOCAL dFecha:=CTOD(“01/01/2007”) dFecha:=dFecha - 1 ? dFecha // Muestra 31/12/2006 Días entre Fechas LOCAL dFch1:=CTOD(“01/01/2007”) LOCAL dFch2:=CTOD(“08/01/2007”) ? dFch2-dFch1 // Muestra 7 Día de la Semana LOCAL dFecha:=CTOD(“01/01/2007”) ? DOW(dFecha) // Muestra 1 Domingo // 1 es Domingo // 2 es Lunes // 3 es Martes // 4 es Miércoles // 5 es Jueves // 6 es Viernes // 7 es Sábado Número del día LOCAL dFecha:=CTOD(“01/01/2007”)

Manual del Usuario

Capítulo VI. Pag: 18

Programación ? DAY(dFecha) // Muestra 1 Nombre del Día LOCAL dFecha:=CTOD(“01/01/2007”) ? CSEMANA(dFecha) // Muestra Lúnes Número del mes LOCAL dFecha:=CTOD(“01/02/2007”) ? MONTH(dFecha) // Muestra 2 Nombre del Mes LOCAL dFecha:=CTOD(“01/02/2007”) ? CMES(dFecha) // Muestra Febrero Número del Año LOCAL dFecha:=CTOD(“01/02/2007”) ? YEAR(dFecha) // Muestra 2007 Principio del Mes LOCAL dFecha:=CTOD(“15/02/2007”) ? FchIniMes(dFecha) // Muestra 01/02/2007 Fecha SQL LOCAL cChar:= SQLDATE(DATE()) ? cChar // Muestra 2007-03-08 // Depende de la configuración de fecha SQL Fin del Mes LOCAL dFecha:=CTOD(“15/02/2007”) ? FchFinMes(dFecha) // Muestra 28/02/2007

Manual del Usuario

Capítulo VI. Pag: 19

Programación

Primer día del año LOCAL cCharLOCAL dFecha

cChar:=”01/01/”+STRZERO(YEAR(DATE()),4) ? cChar // Muestra 01/01/2007 DFecha:=CTOD(dFecha) ? cChar // Muestra 01/01/2007

Funciones de Uso General:
Son un conjunto de funciones que se puede utilizar con varios tipos de datos. Detectar tipo de Dato LOCAL LOCAL LOCAL LOCAL LOCAL ? ? ? ? ? dFecha:=DATE() nValor:=100 lLogico:=.T. aData :={} indef

ValType(dFecha) // Muestra D ValType(nValor) // Muestra N ValType(lLogico) // Muestra L ValType(aData) // Muestra A ValType(indef) // Muestra U

Valores Iniciales:
Se definen en el fichero DATAPRO.INI y tiene como finalidad la asignación de valores necesarias para configurar valores del sistema que debe ser tomado en cuenta antes de iniciar cualquier proceso.

Manual del Usuario

Capítulo VI. Pag: 20

Con Valor . Si el sistema trabaja en forma nativa no necesita los DSN para ODBC.T. utilizará conexión ODBC mediante DSN.F. Pag: 21 . suguiere que genere los conectores DSN desde el formulario de “Conexión con la Base de Datos”.Programación NATIVO. consume más recursos debido a las imágenes. necesaria para el uso del sistema desde Linux mediante emuladores para Windows.doc” basado en experiencia de uso con este fabuloso motor de base de datos relacional. si la conexión para la base de datos se realiza en forma nativa. Manual del Usuario Capítulo VI. Además optimiza su ejecución debido a que no posee gráficos ni líneas. Recuerde que los permisos se otorgan por razones de seguridad de acceso para evitar que otro usuario con acceso a la dirección IP del servidor se conecte y pueda manipular o afectar los datos. Si la BD es MySQL algunos procesos de datos serán realizados en forma nativa debido a su alto rendimiento. para así conocer los procesos que se ejecutan durante el inicio del sistema. puede crearlos para acceder a la base de datos desde otras aplicaciones como Excel mediante MsQuery. Antes de instalar el sistema debe instalar la base de datos en el servidor y otorgarle permisos por cada usuario que le permita al sistema lograr la conexión.T. Además la sentencia SQL es copiar en el ClipBoard de Windows para luego ser pegada con <Pegar o Paste> en el programa de administración de base de datos.T. muestra en el título de la ventana principal la sentencia SQL que está en ejecución desde que se inicia el sistema. colores y sonidos que puede utilizar. MENUXP: Presenta el menú principal del sistema en forma clásica.T. Indica con .T. líneas. TRACERSQL :=Con . TRACER : Con . puede ser utilizado para Nativo y ODBC. pueden ser utilizando en Windows cuando requiere mayor rendimiento en la aplicación. muestra en el titulo de la ventana principal el nombre del programa DpXbase que está en ejecución. Con . Presenta el menú del sistema con una presentación acorde al estilo XP. también. Si el valor es . sin utilizar tecnología ODBC de MS que requiere previamente la definición de DSN para acceder a la base de datos. BASE DE DATOS MYSQL Para mayor comodidad hemos creado un manual “c:\dpadmwin\docs\mysql. CREADSN. es decir.

Programación Luego de instalado el sistema. CHECK. en caso de ser localhost “en el mismo PC”.” y atributos para cada campo. FICHEROS APLICACIONES O MODULO DEL SISTEMA Permite modificar y eliminar los módulos existentes. 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. campos únicos y un sin número de utilidades. El integrador podrá adaptarlo a sus necesidades. el sistema tratará de conectarse con la base de datos. 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. RADIO. Pag: 22 . se solicita la dirección IP del Servidor. enlaces. en caso de no ser lograda la conectividad el sistema ejecutara dos comandos “instalación de servicio e iniciación del servicio” que se encuentran en el fichero “mysql\mysqlstart. COMBO. Imprimir. Cuando DPxbase detecta que un campo esta referenciado con otra tabla que incluye un formulario con toda la sintaxis en formato xBase. DPxbase provee la clase TDPEDIT que controla el formulario con la tabla de datos y el navegador de registros. hace Manual del Usuario Capítulo VI. Cancelar. Validar. posee métodos "methods" para: Iniciar.bat”. Grabar. así como también crea nuevos módulos al sistema. Etc.

se puede personalizar el mensaje interactivo. es reducir considerablemente el tiempo de desarrollo de aplicaciones. y el segundo seleccionó el control “COMBOBOX”. muestra los controles creados por DPxbase para campos vinculados con tablas referenciadas. Pag: 23 . en ningún momento el programador ha necesitado escribir una sola línea del código. DPxbase. sugiere sintaxis para cada control. cada control esta definido y asociado al formulario contenedor y las coordenadas se expresan en Manual del Usuario Capítulo VI. La siguiente imagen. para los formularios crea un programa fuente escrito en formato PRG bajo las clases "classes" de Fivewin para el manejo de controles. DPxbase. para los primeros casos el programador seleccionó BMPGET. El objetivo de DPxbase. también brindar flexibilidad para acceder y adaptar los componentes creados. En cada campo. buscar y regresar con el campo deseado.Programación posible vincular a una o varias tablas con las propiedades de acceder. si un campo esta 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. el control requerido y las validaciones necesarias. sugiere la sintaxis necesaria.

AND. oINV:nOption!=0).oIVA:nOption). DPxbase genera lista de navegación utilizando la clase xBrowse. modificar. AccessField("DPINV"."INV_IVA". sólo fue necesario reubicar los controles. La sintaxis generada para el control “Combobox” es la siguiente @ 6. imprimir y navegar."INV_IVA". consultar. ITEMS aItems1. VAR oINV:INV_IVA. Para mayor comodidad el formulario asume como variables todos los campos y valores de la tabla de datos. estas posiciones pueden ser reubicadas en tiempo de ejecución. . Pag: 24 . VAR oINV:INV_IVA: Representa a la variable Virtual del formulario creada automáticamente desde los campos de la tabla de datos.1.Programación líneas y columnas. eliminar. GENERADOR DE BROWSES O LISTAS Luego de Crear las tablas de Datos. 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. 1. Manual del Usuario Capítulo VI. oINV_IVA: Representa al control “ComboBox” y para su nombre se utiliza el mismo campo del código con el prefijo “o” que lo asocia con “Objeto”. AccessField("DPINV". además.0 COMBOBOX oINV:oINV_IVA.oIVA:nOption) Esta función asocia el acceso de la tabla y campos con el mecanismo de seguridad definible por el usuario donde puede restringir el acceso a los campos de una tabla. incluye botones sugeridos para: Incluir. el formulario dispone de esta opción. WHEN. FONT oFontG Cada valor está representado por: oINV: Representa al Objeto de la clase TDPEDIT o formulario contenedor. el usuario puede seleccionar de manera ordenada los campos de las tablas con sus respectivos títulos que conformaran la lista de navegación de cursores de una o varias tablas SQL.

modificar. puede ser modificado en tiempo de ejecución. acceda al formulario de tablas. en la barra de botones se encuentra. Para asignar nuevas opciones para el campo. despliega el Browse definitivo en ventana MDI. el sistema detecta los campos que poseen opciones y construyen la sintaxis para el control COMBOBOX suministrando el contenido de opciones. “Opciones de los campos”. Para emplear de manera dinámica se incluye en el código fuente la función: GETOPTIONS("TABLA". Este nuevo Browse. todas las instrucciones están grabadas en un archivo de formato plano que permite ampliar sus alcances. con todas las opciones disponibles para: Incluir. eliminar y funciones de navegación. como por ejemplo: Agregar nuevos botones. También contribuye en la generación del código fuente para los formularios y reportes."CAMPO").Programación Al presionar la tecla “Ejecutar”. facilitando emplear las nuevas opciones que pueden ser agregadas para el campo. Presenta de la tabla que está focalizada una nueva ventana contentiva de todos los campos que pueden aceptar Manual del Usuario Capítulo VI. OPCIONES PARA LOS CAMPOS 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. Pag: 25 . Consultar.

debe ampliar la longitud del campo. será asumido el primer carácter de la opción. modificar o eliminar cada descripción que conforma las opciones del campo. indica el nombre de la tabla y nombre del campo. Si la longitud del campo es de 3 dígitos. solo podrá almacenar el primer carácter “C”. contiene las diversas opciones ya registradas y a través de: Incluir. serán guardados los primeros tres valores de la opción especificada para el almacenamiento físico en la tabla Consideraciones: Manual del Usuario Capítulo VI. nuevamente se presentará una ventana de dialogo que permite: agregar. es posible actualizar cada línea de la lista. si posee un dígito. debido al espacio físico que soporta. Pag: 26 . Modificar y Eliminar.Programación opciones. Focalice con el mouse el campo deseado y haga dos clic o presione el botón “modificar”. En caso que requiera más opciones y dos o más de ellas coinciden en el primer carácter. Es importante tomar en cuenta la longitud del campo. Ejemplo: La opción “Carácter” al ser seleccionada. Esta ventana para el mantenimiento de opciones.

DPxbase. si la tabla se llama DPMENU. facilita personalizar el nombre de las tablas y formularios en tiempo de ejecución. Ejemplo: SayOptions(“DPTABLAS”. 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: Si la descripción de la tabla Menú de Acceso “DPMENU” es “Menú de Acceso”. el Programa DpXbase para el formulario se llamará DPMENU.SCR. logrando así ubicar cualquier componente para adaptarlo. es decir delante de que y después de que. Pag: 27 . es en el generador de informes? MENÚ DE ACCESO Permite modificar y eliminar los menús de los módulos existentes. Procesos y Otros”. formulario está directamente asociado a las tablas. el Browse se llamará DPMENU.-En que pantalla.”CAM_TYPE”. 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 herramientas del sistema y {oDp:DPMENU} <Aplicaciones> “Menú de Acceso” de la barra de luego en el botón “Incluir”. el Reporte será: DPMENU.Programación Los controles combobox mostrarán las opciones en el mismo orden como se registren.oCursor:CAM_TYPE) Preguntas: 1. tiene un concepto de trabajo sistematizado donde el nombre de cada programa. Informes.-Donde se coloca esa instrucción. 2. reporte. logrando así que el usuario pueda indicar nombres específicos en cualquier tabla y directamente a las opciones de: Menú. Los efectos se verán en “Ficheros. Manual del Usuario Capítulo VI.LBX.REP. así como también crea nuevos menú para los módulos del sistema. Formularios y Reportes. Transacciones. Además. igualmente el campo “Singular” es utilizado para indicar el nombre de la tabla dentro de un tercer formulario que esté enlazado con la tabla. el título del formulario de productos adoptará el nombre de “Menú de Acceso”.

DpXbase acepta: IF. dentro de cada modulo están los menú: Ficheros. Los programas fuentes son almacenados en la tabla DPPROGRA y por razones de seguridad se guarda una copia en la carpeta \SCRIPT\ y cada programa es almacenado en formato plano con extensión “. 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. solo difieren que esta opciones son generales para todas las aplicaciones.SCR” y la versión anterior es almacenada con extensión “.ENDCASE. y esta esquematizado por módulo. ENDDO. Informes. 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. también podemos decir que una aplicación en un módulo y un sistema está compuesto por módulos. WHILE. las opciones: Macros y Barra de tareas también son definibles de la misma manera.Programación DEFINICIÓN DEL MENÚ Todas las opciones del menú principal del sistema. Transacciones. genera y reconoce código de léxico xBase basado en xHarbour y comandos para FiveWin. logrando personalizar las mismas opciones según el tipo de empresa o país. ELSE. este nombre puede figurar en el titulo de la opción del menú cuando se ejecuta. son definibles por el usuario. es decir. Manual del Usuario Capítulo VI. y todos los comandos Clipper/xHarbour/FiveWin. si la tabla de productos esta definida como “Productos del Inventario”. PROGRAMAS FUENTES DPXBASE DPxbase. Pag: 28 .BAK”. procesos y Otros asociados exclusivamente a cada aplicación. en Colombia se llama “Nota de Despacho” y en España se denomina “Albarán”. Otras de las ventajas en la definición del menú es colocar el nombre de la tabla asociada como titulo de la opción en el menú. permitiendo adaptar las opciones de manera directa escrita “La opción” o a través del nombre de uso de una tabla. DOCASE. ENDIF.

uPar2. Crear un nuevo Programa F2 Para Grabar F5 Compilar y Ejecutar El Proceso de compilado genera un nuevo archivo con extensión .uPar20) .”DXB” en la carpeta DPXBASE y este contiene las instrucciones y classes traducidas en léxico de ejecución DpXbase lista para ser ejecutado mediante la función EJECUTAR(“PROGRAMA”..uPar2.uPar1. Manual del Usuario Capítulo VI.. Pag: 29 .Programación El sistema provee un editor de texto de estilo “RTF” (Richt Text Format) que permite realizar la edición y/o escritura de programas DpXbase.

CH” FUNCTION MAIN() RETURN NIL 3.CH #define CLR_YELLOW 65535 #define CLR_WHITE 16777215 // RGB( 255. Debe Declarar el archivo de Cabecera #INCLUDE “DPXBASE” que se encuentra en la carpeta “INCLUDE” y contiene todas las traducciones de comandos hacia funciones y/o clases . CLR_WHITE y CLR_YELLOW están definidos en COLORS. La diferencia entre FUNCTION Y PROCEDURE solo está en RETURN que para el caso de PROCEDURE devuelve un valor nulo (NIL). Debe declarar el primer procedimiento o función de la siguiente forma: #INCLUDE “DPXBASE. Declaración de Variables: Solo aceptan dos modos de Declaración: LOCAL y PRIVATE. Debe finalizar la función con el comando RETURN cuando es declarado con PROCEDURE y el comando RETURN <uValor> debe ser utilizado cuando se define MAIN como una función mediante FUNCTION. Si desea utiliza FUNCTION para todos los casos puede cerrar con RETURN NIL. 0 ) // RGB( 255.CLR_YELLOW) . que muchas veces nos referimos mediante la siguiente expresión: oControl:SETCOLOR(CLR_WHITE.CH” .CH” PROCEDURE MAIN() RETURN O También #INCLUDE “DPXBASE. los valores locales son utilizables dentro de la función donde fueron declarados y los valores PRIVATES son utilizados en las demás funciones que son invocadas desde la Manual del Usuario Capítulo VI. 255. Pag: 30 . 4. 255.Programación Todos los programas DpXbase deben cumplir con las siguientes reglas: 1. 255 ) 2. además hace referencias con otros archivos de cabecera que contienen los valores predefinidos como por ejemplo: Colores definidos en “INCLUDE\COLORS.

Se pueden indicar las tablas más utilizadas para una aplicación específica o para todas las aplicaciones. No declare variables con PUBLIC ya que puede usar memoria innecesaria. aplicación asociada y condición de ejecución. restricciones para campos. Menú de Acceso.20) RETURN FUNCTION MULTIPLICAR(nValor.dFecha:=CTOD(“”) Multiplicar(nNum. accesos para transacciones con Tabla. Declaración de Funciones. acción que ejecutará. DPxbase ofrece a la aplicación final un conjunto de herramientas útiles para la operatividad del sistema. PERSONALIZAR MENSAJES EN LA BARRA DE BOTONES Manual del Usuario Capítulo VI.Programación función de su declaración.nPor) LOCAL nResp NResp:=nValor*nPor MsgAlert(STR(nResp)) RETURN nResp BOTONES DE LA BARRA DEL MENÚ PRINCIPAL Al igual que el menú principal.nNum:=100. Ejemplo para la declaración de Variables: PROCE MAIN() LOCAL cChar:=Space(40). DpXbase provee el Objeto oDp que reemplaza el uso de PUBLIC y administra mejor el consumo de memoria. puede declarar funciones mediante la sentencia FUNCTION y declarar parámetros que reciben valores y devolver un resultado. Ejemplo: PROCE MAIN() LOCAL cChar:=Space(40). tales como: Usuarios.dFecha:=CTOD(“”) MsgAlert(Len(cChar)) // Muestra 40 RETURN 5. auditoria de actividades de usuario. Pag: 31 .nNum:=100. los botones son definidos por el usuario logrando indicar: Archivo Bitmap.

Por ejemplo la tabla del trabajador “nmtrabajador” hay que enlazarla con la tabla de departamento. crea un objeto de tipo “TSAY” que presenta un recuadro en la barra de botones con la finalidad de indicar textos que puedan ayudar al usuario a identificar actividades como: Aplicación que se ejecuta. además.. ENLACE ENTRE TABLAS Como su nombre lo indica. tales como: Coordenadas. cargo. Pag: 32 . tamaño. color fondo. adicionalmente ejecuta “DPBARMSG” para mostrar los nuevos mensajes para la aplicación solicitada. para ello se utiliza el campo código del trabajador. ausencia.Programación El programa “DPBARMSG”. periodo contable o cualquier otra información que se desee indicar. Todos los parámetros del Objeto. permite hacer el enlace entre las tablas por medio de un campo común entre ambas tablas. quedando totalmente a criterio del usuario su utilización. Para mayor comodidad el programa “BOTBARCHANGE” que se ejecuta en cada cambio de aplicación elimina de la barra de botones todo su contenido para que luego el sistema coloque nuevamente los botones que cumplan con las condiciones de la aplicación. etc. fecha del sistema. color texto y mensaje pueden ser personalizados en este programa. OTRAS FUNCIONES GENERADOR DE INFORMES DPxbase ofrece un asistente que permite crear consultas de tipo SQL con facilidad y en pocos minutos. También genera código xBase para la clase TREPORT facilitando imprimir la consulta SQL diseñada. unidad funcional. DISEÑO DE FORMULARIOS Manual del Usuario Capítulo VI. fuente de letra. la consulta es posible exportarla hacia formato DBF con la finalidad de ser utilizada en diseños de reportes a través de Crystal Report.

Pag: 33 . colores y fuentes de letra a cada control en tiempo de ejecución sin necesidad de utilizar recursos creados en otras aplicaciones. Alto. ampliar o reducir su tamaño y para mayor comodidad DPxbase ofrece alternativas para agilizar el diseño. Columna. esta labor puede ser efectuada por el programador o usuario final. En la parte superior de la ventana o comúnmente denominado “SysMenú”. para cada uno puede configurar: Línea. permitiendo personalizarlo en tiempo de ejecución. moverlo en cualquier posición. es posible focalizar cualquier control a través del mouse.Programación Partiendo del programa Fuente “xBase” creado por DPxbase. modificar en tiempo de ejecución todos los controles del formulario utilizando el Mouse. Luego de activar el modo diseño. el formulario dispone de varias opciones que permiten activar el modo diseño del formulario. Manual del Usuario Capítulo VI. el usuario puede diseñar. Ancho.

Manual del Usuario Capítulo VI. se puede seleccionar el color del fondo. muestra la posibilidad de cambiar el color del texto del control y también la fuente de las letras. ilustrar el uso de la opción: “Color” seleccionado para el control focalizado. Pag: 34 .Programación La siguiente imagen. La siguiente imagen. es decir.

formulario para la carga de datos y Reportes bajo un conjunto de elementos identificados y asociados con la tabla de datos. DPxbase hereda toda la experiencia de DpXbase creado para Datapro durante 15 años bajo el popular y exitoso compilador "Clipper" que logró posicionarse en el mercado con miles de instalaciones satisfactorias. el Navegador “Browse”. en parte gracias a la comodidad y facilidad de complacer los requerimientos del usuario. DPxbase ha sido creado exclusivamente para crear aplicaciones de tipo comercial y orientado al léxico xBase. Manual del Usuario Capítulo VI. DPxbase mantiene con continuo desarrollo la búsqueda de la madurez de todas sus herramientas con el objetivo de darle valor agregado a los componentes de desarrollo y a los productos finales creados para el Cliente. generando productos finales en corto tiempo y bajo el concepto de arquitectura abierta facilitándole al integrador o usuario final adaptarlo a su criterio. programas fuentes “DpXbase”. Ahora es DPxbase para 32 bits y base de datos de tipo SQL.Programación DPxbase integra bajo un solo concepto: La tabla de datos. Pag: 35 .

Parte de los programas escritos en DpXbase para DPxbase han sido obtenidos de versiones anteriores con muy pocos cambios. dispone de la opción “Importar desde DBF”. La opción Incluir Tablas. COMPONENTE DATASET Es un gestor de datos controlado a través de una clase de objetos que interactúa con una tabla de datos y tiene como finalidad manipular cualquier tipo de datos compatible con el léxico xBase. ejemplo “oCursor: Campo”. Además DPxbase provee un proceso de Migración de Registros desde las tablas DBF utilizadas por productos anteriores. 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. son totalmente portables en estructura y contenido hacia el nuevo formato de datos utilizado por DPxbase (Motor SQL). donde se aprovecha la madurez del código ya escrito.. Rango y Criterio. el usuario solo debe indicar el nombre de la tabla de Datos DBF y DPxbase se encarga de definirla en el diccionario de Datos y construir su estructura. cada reporte conforma una sección Manual del Usuario Capítulo VI. El componente DataSet ha sido incorporado en el sistema con el objetivo del almacenar múltiples tipos de datos seleccionados sin que sea necesario emplear tablas específicas para su almacenamiento. siempre y cuando no requieran interactuar con una interfaz de video o de impresión. los tipos de datos son 100% compatibles. Pag: 36 .Programación CONTINUIDAD EN DATAPRO PARA TABLAS DBF Todas las tablas de datos en formato DBF. el leguaje Xbase incorporado soporta en gran parte los procedimientos desde las versión DOS. El generador de reportes es una aplicación del sistema que emplea altamente el componente Dataset para almacenar valores como: Parámetros. CONTINUIDAD EN EL LÉXICO XBASE DESDE LOS PRODUCTOS DOS Aunque DPxbase esta compilado con C++.

con el fin de retomarlos en futuras y suponiendo que esos parámetros sean comúnmente utilizados. “DPDATACNF” es utilizada para todo lo referido a la configuración general del sistema y y “DPDATASET” almacena valores de manera independiente en cada empresa definida a través de un “DSN”. El método “End()” almacena de manera automática los nuevos valores o los valores existentes que sufran algún cambio. cada uno almacena los valores en tablas distintas. debido a que todos los reportes pueden ser empleados en cualquier DSN y la configuración de cada empresa se almacena en “DPDATASET”. Para almacenar datos en el DataSet de configuración se emplea de la siguiente forma: PROCE MAIN() LOCAL oData oData:=DataCnf(“MISECCION”) oData:cValor:=”Prueba” oData:End() RETURN NIL Para leer los datos del DataSet.Programación del Dataset. El sistema dispone de dos DataSet. se emplea un valor virtual “oData:cValor” de la clase TDataSet y de manera automática detecta la asignación de un nuevo valor. está empleando el Dataset para almacenar todos los valores utilizados en esa ejecución del reporte. lo almacena y también lo restaura cuando se encuentra guardado en la tabla. 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. Por ello es muy Manual del Usuario Capítulo VI. Para los parámetros del generador de informes (Fijar: Rango y Criterio) es empleado “DPDATACNF”. Pag: 37 . Cuando el usuario desde la ventana de ejecución de un determinado reporte indica “Fijar Parámetros del reporte”.

SPACE(40)) DEFINE DIALOG oDlg TITLE “CONFIGURAR” @ 1.SPACE(20)) oData:cTel:=oData:Get(“TEL”. grabar todo lo referente al DataSet.SPACE(12)) oData:cRep:=oData:Get(“REP”. Para emplear el DataSet en la configuración de cada empresa es necesario utilizar el siguiente ejemplo escrito en DpXbase: PROCE MAIN() Local oData. También puede ser empleado de manera directa: oDataSet:cVarName  IsDef(cVarName): Capítulo VI.uValue): Obtiene el valor referido de “cVarName” en caso de no existir el auto creado con el valor indicado en “uValue”. ambas devuelven el objeto de la clase TDataSet. a continuación detallamos sus métodos.Programación práctico emplear este componente en el almacenamiento de datos. Pag: 38 Manual del Usuario .1 GET oData:cRep ACTIVATE DIALOG oDlg oData:End() RETURN // EOF CLASE TDATASET: Se encarga de gestionar.oDlg oData:=DataSet(“DATEMPRESA”) oData:cDir:=oData:Get(“DIR”. se genera desde las funciones DataCnf() y DataSet().1 GET oData:cTel @ 3.1 GET oData:cDir @ 2. leer.  Get(cVarName.

F. estos son: “ALL”: Almacena y recupera los datos para todos los usuarios y “PC” que accedan al sistema.uValue): Asigna el valor “uValue” para “cVarname”. cada usuario puede disponer de configuraciones distintas. ejemplo: Elimina un valor del DataSet oDataSet:Del(cVarName)  DelGroup(cGroupName): Load(): Elimina todos los componentes asociados a un grupo. sino que se generan de manera dinámica bien sea por asignación directa “oDataSet:nValue:=10000” o a través de la lectura de la tabla donde se almacenan los valores del Dataset.  Del(): y de la tabla. Pag: 39 .  Carga todos los valores desde la tabla y generan los valores virtuales del Dataset DataSet dispone tres modalidades para el almacenamiento y recuperación de datos. “USER”: Almacena y recupera los datos sólo para el usuario que solicita. también puede ser utilizado como: oDataSet:cVarname:=uValue  Save(): Almacena en la tabla todos los valores del DataSet. el nombre del PC es obtenido del Sistema Operativo. si el valor de “cVarName” existe. Se denominan valores virtuales aquellos “ClassData” o variables que no están definidas en la clase. o . el DataSet ha sido altamente empleado en el almacenamiento los tipos de nómina Manual del Usuario Capítulo VI.T.Programación Devuelve . “PC”: Almacena y recupera los datos sólo para el PC que lo solicita. Cabe destacar que en cada PC es posible generar diferentes configuraciones. es decir. Para el sistema de Nómina DpNmWin.  Set(cVarname.

Pag: 40 .Programación que se procesan con la finalidad de poder rescatar los tipos de nómina en las siguientes ejecuciones.dFecha) La sentencia resulta así: WHERE FECHA=’20041231’ Tradicionalmente la condición WHERE empleando fechas debe construirse así: WHERE FECHA=[’] +STRZERO(YEAR(dFecha).uValor) Construye una condición para la sentencia WHERE o SET para armar un comando SQL.4)+STRZERO(MONTH(dFecha). Ejemplo cNomre:=”Datapro” cWhere:=”WHERE CAMPO”+GetWhere(“=”.cNombre) Queda construida de la siguiente forma: WHERE CAMPO=’Datapro’ Recuerde utilizar comillas [‘] o Chr(39) simples para indicar cadenas dentro de un comando SQL. 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(“=”.2)+[‘] Cómodamente “ WHERE FECHA”+GetWhere(“=”.dFecha) lo simplifica. Igualmente esta función esta vinculada con la configuración de fechas empleadas por el motor de la base de datos.2) +STRZERO(DAY(dFecha). FUNCIONES PARA SENTENCIAS SQL GetWhere(cOperador. Manual del Usuario Capítulo VI.

“ ORDER BY 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.t.LDATA) Solicita un cursor de datos SQL. Pag: 41 . si carga los datos. “ FROM DPTABLAS ”+.T. Ejemplo: oCursor:=OpenTable(“SELECT TAB_NUMERO.TAB_TABLE”+.T..Programación FUNCIONES PARA EL MANEJO DE DATOS Todo el manejo de datos en Datapro se realiza a través de comandos SQL. <cSql> Debe contener una sentencia de léxico SQL <lData> Indica con . aSql Contiene la Manual del Usuario Capítulo VI. Por defecto su valor es . Ejemplo: aSql:=ASQL(“SELECT CAMPO FROM XTABLA”). ASQL(CSQL) Devuelve en tipo de datos Arreglo bidimensional el contenido del cursor generador por la consulta SQL. Para mayor información consulte la clase TTABLE de este manual.) oCursor:Gotop() WHILE !oCursor:Eof() ? oCursor:TAB_NUMERO. 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.

MsgAlert(aSql[1.”. Pag: 42 . {||nTotal:=nTotal+oCursor:DOC_NETO.. Manual del Usuario Capítulo VI. SQLGET(“NMTRABAJADOR”. Ejemplo: SqlUpdate(“NMTRABAJADOR”.T.”Q”.DOC_FECHA FROM DPDOCCLI”. #DPXBASE.CCAMPO.”TIP_NOM”.XVALOR.CWHERE) Borra de la tabla <CTABLA> la cantidad de registros indicados en <CWHERE> SQLUPDATE(CTABLA..bRun) Ejecuta en forma cíclica según el proceso indicado en <bRun> si se cumple la condición de <bFor> hasta que se cumpla <bWhile>.”. Para evaluar la respuesta puede utilizar: ViewArray(aSql) DO(bWhile. SqlGet().”CONCAT(APELLIDO. Where puede incluir la clausula JOIN.NOMBRE)”..CWHERE) Permite Actualizar el valor de un campo de la cantidad de registros indicados en la cláusula cWhere.oTablas:skip(1)}) Totaliza el Monto neto según los documentos emitidos según la fecha del sistema.Programación lista de datos.oCursor oCursor:=OpenTable(“ SELEC DOC_NETO. SQLGET(CTABLA. {||oCursor:DOC_FECHA=oDp:dFecha}.) DO({||!oCursor:Eof()}.”TIPO_NOM=’S’”) Cambia el tipo de Nómina para Quincenal de todos los trabajadores de nómina Semanal.1]). puede fácilmente reemplazar el uso de las funciones DBLocate() y DbSeek() utilizadas en las tablas DBF según RDD.CH FUNCTION MAIN() LOCAL nTotal:=0.bFor. Obtiene el nombre y apellido del Trabajador. muestra la primera columna y columna.CCAMPO.. SQLDELETE(CTABLA.”CO DIGO=’00001’”).CWHERE) Obtiene el valor de un campo desde una tabla según la condición indicada en Where .

puede conformar la cláusula WHERE de la consulta y permite filtrar las líneas de la consulta.INI [SQLDATE]. generan expresiones de tipo carácter el cual requiere ser convertida en forma de fecha real. puede ser un arreglo un una lista de campos entre comillas BDLIST(CTABLE.LGROUP. <cWhere> Valor opcional. ejemplo: “Campo1. puede ser un arreglo un una lista de campos entre comillas separas con coma.Campo3” <lGroup> si es verdadero .<WHERE>) // 2005-0502 bData:=SQLTODATE(cFecha) // 02/05/2005 <cTable> Nombre de la tabla <aFields> Lista de campos. Manual del Usuario Capítulo VI. genera el cursor empleando GROUP BY en todos los campos. [UPDATE FROM TABLA BCAMPO=’]+DTOSQL(<bFecha>)+[‘] Queda Así: UPDATE FROM TABLA BAMPO=’2005-04-02’ SQLTODATE(CFECHA) Convierte las fechas SQL en fecha xBase.Programación DTOSQL(DFECHA) Convierte el formato de fecha xBase en formato de fecha para el Motor SQL.AFIELDS. Su valor por defecto es . según el formato definido en “oDp:cSqlDate” previamente configurado en ODBC.”CAMPO”. Pag: 43 .Campo2. bDate:=SQLGETMAX(“DATABLA”. según el formato definido en “oDp:cSqlDate” previamente definido en ODBC. Algunas funciones MAX o MIX de SQL aplicadas sobre campos de tipo de fecha.CWHERE) Genera un cursor de datos según: <cTable> Nombre de la tabla <aFields> Lista de campos.f.INI [SQLDATE].T.

ejemplo: “Campo1.SALARIO”) Si el usuario seleccionó cuatro trabajadores.”CODIGO.LGROUP. permitiendo importar los valores de un campo hacia las casillas. el valor de cValue será: “001”. genera el cursor empleando GROUP BY en todos los campos.T. Su valor por defecto es . marcar los registros necesarios. recomendada: aList:=_Vector(cValue) Manual del Usuario Capítulo VI.”CODIGO. al finalizar devuelve una cadena con todos los valores seleccionados y representados por la primera columna.”002”. con la finalidad de realizar selección múltiple de registros.Campo2.APELLIDO.”003”. Presenta la consulta “Cursor” a través del editor de registros. es decir. <cWhere> Valor opcional.Campo3” <lGroup> si es verdadero .Programación Presenta la consulta a través de un editor de registros que permite seleccionar cualquier registro devolviendo el valor de la primera fila. Tiene alta utilización en las casillas de rango y criterio en la ejecución de un reporte.SALARIO”) BDSELECT(CTABLE.AFIELDS. cValue:=BDSELECT(“NMTRABAJADOR”.”004” Si desea convertirlo en arreglo puede emplear: aList:=MacroEje(“{“+cValue+”}”) Tambien.CWHERE)) Genera un cursor de datos según: <cTable> Nombre de la tabla <aFields> Lista de campos.NOMBRE .APELLIDO. puede conformar la cláusula WHERE de la consulta y permite filtrar las líneas de la consulta. puede ser un arreglo un una lista de campos entre comillas separas con coma.f. Pag: 44 .NOMB RE. Ejemplo: uValue:=BDLIST(“NMTRABAJADOR”.

"CAMPO") Devuelve en un arreglo todas las opciones registradas para un campo de determinada tabla.cField.Programación GETOPTIONS("TABLA". INNERJOIN(cTabla1. Ejemplo: MsgAlert( SQLINCREMENTAL(“DPCLIENTES”.”C”) El valor de <cOpcion> es “Carácter”.uValue) Busca y devuelve la opción encontrada según el valor de <uValue> según la lista de opciones registradas en campo <cField> de la tabla <cTabla>.”DPCAMPOS”) Devuelve: INNER JOIN DPCAMPOS ON TAB_NUMERO=CAM_NUMTAB SQLINCREMENTAL(cTable. ”Carácter”. ”Logica” y ”Memo”.”CLI_CODIGO”) ) VIEWARRAY(aArray) Manual del Usuario Capítulo VI.cInner) Busca en el diccionario de Datos la relación existente entre dos tablas y construye la cláusula INNER JOIN de la sentencia SQL necesarias para el enlace entre las tablas solicitadas. SAYOPTIONS(cTable. Ejemplo: INNERJOIN(“DPTABLAS”. ”Date (Fecha)”. devolvera valor vacio. Ejemplo: aOpcion:=GETOPTIONS(“DPTABLAS”. Pag: 45 .cField. En caso de no encontrar la opción buscada.”CAM_TYPE”) Devuelve una lista o arreglo con los siguientes valores: “Numerico”.cWhere) Obtiene el máximo valor del campo <cField> de la tabla <cTable> y e incrementa en 1.cTabla2.”CAM_TYPE”. determinando el valor siguiente. Ejemplo: cOpcion:=SAYOPTIONS(“DPTABLAS”.

Valores o Data de la Clase lBar Indicar con .f. que Incluya las opciones de navegación mediante la barra de botones. Para iniciar el formulario. ejemplo: Para la factura se relaciona con Clientes y los renglones se vinculan con productos. DOCENC(cTitle.Ejemplo Manual del Usuario Capítulo VI. Muestra en Ventana MDI oDp:lViewArrayMdi:=. Asientos Contables. realiza Where en la sentencia SQL. Comprobantes contables y la segunda tabla se refiere a los renglones o cuerpo que conforman el documento. Muestra en Caja de Dialogo. la primera se encarga del encabezado como por ejemplo: Factura.T. ejemplo: “oForm” cFileEdt Nombre del fichero donde para almacenar los parámetros de los controles.T.Programación Muestra en una ventana MDI el contenido de un arreglo multidimensional. También la tabla del encabezado y la tabla del cuerpo se relacionan con otras tablas. puede ser “Titulo” cForm Nombre del objeto para el formulario. como por ejemplo: Renglones de la factura.cFileEdt) Parámetros: cTitle Título del formulario. cScope Indica el filtro para la tabla del encabezado. entre otros. empleamos la función DOCENC que devuelve el objeto definido en la clase tDOCENC. Este tipo de documentos se genera comúnmente por tablas básicas relacionadas.cForm. oDp:lViewArrayMdi:=. OBJETOS Clase TTable Clase DpLbxRun Clase DpEdit Clase TDocEnc Clase TDocGrid Clase TGridCol Formularios de Documentos compuestos por Encabezado y Cuerpo. Pag: 46 .

nLeft. Nombre del programa DpXbase que contiene las funciones que serán ejecutadas. Lista de Botones para el modo navegacion Lista de Objetos de Grids que conforman el cuerpo del documento.nHeight Define en pixel el area del ) formulario. Objeto referido a la clase TXSCROLL Objeto de la Barra de Mensajes. Manual del Usuario Capítulo VI. Ejemplo: DOC_CODSUC=’00001’ AND DOC_TIPTRA=’D’ Contiene lista de campos para validar la no repetición del registro y vinculo con las tablas que conforman el cuerpo o grid. cScopeFind cPrimary cScript oScroll oSayMsgErr oTable oWnd oDlg oScript oBar aBtn aGrids aBtnEdit nOption cList cPresave cPostSave lSaved lInc lCon lMod lEli lPrn cSingular Metodos Windows(nTop. Nombre de la Función que se ejecuta antes de realizar la grabación del registro. Objeto script que ejecutar las funciones en DpXbase Control TBAR que contiene los botones con las opciones del formulario.Programación DOC_CODSUC=’00001’ Indica filtro para el proceso de búsqueda mediante la cláusula WHERE de la sentencia SQL. Indica si el registro ha sido grabado. Objeto ttable de la Tabla de datos para el encabezado. Ventana MDI de estilo CHILD que realiza el control del formulario. Pag: 47 . Ventana de tipo dialogo contentiva de los controles del formulario.nWidth. Lista de Botones para el modo edición Indica el estado de la opción: 0=Navegación 1=Incluir 2=Consultar 3=Modificar 4=Buscar 5=Eliminar Nombre del archivo para presentar en browse los datos de la tabla y hacer búsquedas. Nombre de la función que se ejecuta luego de grabar el registro. Permiso para Incluir Permiso para Consultar Permiso para Modificar Permiso para Eliminar Permiso para Imprimir Nombre singular para el registro.

Campo. Si devuelve . Si devuelve . PreDelete() Ejecuta proceso previo para borrar registro. SetTable(cTable. cLinkdHead . Crear objeto Grid.bEnd) Activa la ventana del formulario. cWhereRecord=Filtro o registros visibles. Presa Get(cVarName) ve() Valida el proceso de grabar.cNum Establece los datos que ero) generan campos incrementales. bInit es bloque de código de ejecución final y bEnd se refiere a la condición de salida.F. no se graba. Pag: 48 .cWhere. Ejecuta la función PRESAVE declarada en cPresave antes de grabar el registro. condición y valor inicial BuildIncremental(lSave) Genera valor incremental según los valores establecidos en SetIncremental() Printer() Ejecuta la función de impresión definida en la función PRINTER del script. SetScope(cScope) Cambia el filtro de la tabla encabezado. no se ejecuta borrar. cLinkGrid . cLinkHead= Campos del encabezado que enlaza la tabla hija. SetIncremental(cField. cTable=Nombre de la tabla cPrimary=Campo Unico.cPrimary.Programación Activate(bInit. GridEdit(cTable .cWhereRe Asignar tabla con el cord) formulario. Manual del Usuario Capítulo VI.F. cLinkGrid: Campos de la tabla hija que se enlazan con los campos de la tabla del encabezado. cSql ) cTable= Tabla asociada o tabla hija.

nHeight) ListBrw(cFileBrw) Obtiene el valor de una variable o Campo.nLeft.cActi on.nHeight . cAction=Proceso que debe ejecutar cFind = Identificación del Botón Agrega un botón cuando se active el modo de edición (Incluir o Modificar) cFile=Archivo BMP cText=Mensaje Tooltip cWhen=Condición de activación. Pag: 49 Manual del Usuario .n Width.cText.uValue) AddBtn(cFile.cWhen.c Find) AddBtnEdit(cFile. cFile=Archivo BMP cText=Mensaje Tooltip cWhen=Condición de activación.nLeft. área visual en píxel para la caja de dialogo sobre la ventana principal oDp:oFrameDp Realiza la presentación lista de campos mediante Capítulo VI.nWidth.cFind) SetMemo(cField.Programación Get(cVarName) Set(cField.cAction. cAction=Proceso que debe ejecutar cFind = Identificación del Botón Agrega el botón “Campo memo” en la barra de opción para el modo edición “Incluir o Modificar”.cTitle. Asigna valor a una variable o Data del encabezado.cText. nTop.nTop. cField=Indica el campo que hace referencia con la tabla DPMEMO cTitle = Titulo de la ventana. Agrega un Nuevo botón en la barra de botones para la navegación del formulario.cWhen.

PostGrabar. como por ejemplo: Pregrabar. Objeto script que realizar las ejecución de funciones DpXbase.brw data ::cList según GRIDEDIT(CTABLE . CLINKGRID . Objeto oDlg contenedor de controles. se obtiene de la data cSql enviada por GRIDEDIT Objeto de la clase xBrowse que realiza la navegación de los datos. Load. CSQL ) Genera el cuerpo del documento conformado por columnas. Color RGB para las líneas pares. oTable oBrw oScript Objeto TTabla referida a los datos del gris. Pag: 50 . Color RGB para el texto de las casillas Color RGB para el texto marcado para buscar. Objeto del encabezado mediante la clase TDOCENC.Programación archivo *. Ancho de los botones de las opciones. dibuja las líneas y columnas. Número de la línea del Gris basado en xBrowse Color RGB para la barra indicadora vertical Color RGB para las líneas impares. CLINKDHEAD . Tipo de Botón: 0=Ninguno 1=Bmp 2=Text Indica la columna que está en edición oHead oDlg nRowSel nRecSelColor nClrPane1 nClrPane2 nClrText nClrFind nBtnWidth nBtnHeight nBtnStyle nColEdit Manual del Usuario Capítulo VI. Alto de los botones de las opciones.

métodos y data. contienen documentación referida a la aplicación datapro y se compone de los siguientes archivos. Pag: 51 Manual del Usuario . Para facilitar los tópicos en cada capítulo su nombre debe ser asociado en cada tabla y en caso de referirse a algún proceso se identificará según la posición del menú: Ejemplo: Aplicación+Vertical+Horizontal. CHM Conceptos de FiveWin Clases. acepta archivos de ayuda HLP y CHM. Programación [n] se refiere al número del capitulo y cada uno se refiere a cada aplicación del sistema. GeneradorRPT. El “Capitulo1.HLP DPXFUNCTION.chm” y cada tabla también está asociada a una aplicación por ello es posible asociarlas y activar la ejecución del archivo de ayuda correspondiente al editor de registros que muestra el contenido de una tabla o un formulario para la carga de datos.C HM Capitulo[n].” Comandos Funciones de FiveWin Funciones Estándar DpXbase Generador de Reportes Datapro El segundo conjunto de archivos de extensión CHM. FIVEWIN.HLP FWFUN. Cada aplicación esta asociada a un “capitulo[n].Programación ARCHIVOS DE AYUDA Están ubicados en la carpeta “HELP\” de la aplicación.CHM Generador de Reportes.chm” se refiere al proceso de instalación y configuración del sistema. 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.HLP FWCMD.CH M GENERADORRPT.HLP FWCMD. Capítulo VI.C HM Programación.

Pag: 52 . los valores de <oDp> son Virtuales. no están definidos en la Clase sino. 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. oDp:cDsnConfig: Nombre del DSN de Datos de la base de datos de configuración. oDp:cDsnData : Nombre del DSN de Datos de la empresa Activa.Programación CLASES PROPIETARIAS DATAPRO Conforman un conjunto de clases que generan objetos para funciones específicas para Datapro. es decir. oDp:dFecha: Fecha del Sistema. Como por ejemplo el tamaño de los botones Manual del Usuario Capítulo VI. Aquí se asignan la mayoría de valores que definen la ejecución y/o presentaciones del sistema. 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. La asignación de valores se realiza en forma directa oDp:xValor:=”Nuevo Valor”. por ejemplo: oDp:cEmpresa: Nombre de la Empresa. DpXbase provee el objeto <oDp> desde que arranca el sistema y contiene toda la información referida a la configuración del sistema. se asigna en forma dinámica. oDp:cUsuario: Código del usuario que accede al sistema.

Programación Métodos: GET(cVarName). igualmente puede ser oDp:cEmpresa.oCursor:Monto*2) . Genera una nueva DATA Virtual dinámicamente y asigna el valor.uValue). oTable:=OpenTable(“SELECT CAMPO FROM XTABLA”. ejecute el programa INSPET escrito en DpxBase. según la identificación solicitada en <cVarName>. Si desea conocer todos los valores del objeto oDp. Ttable es utilizada en toda la aplicación para acceder a las consultas de la Base de Datos necesarias en los Browser. ejemplo: oDp:Get(“cEmpresa”). Formularios.”Nuevo Valor”). ejemplo: oCursor:CAMPO. si cVarName ya existe omite la solicitud.t. Obtiene el Valor de un DATA del Objeto.. 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). Pag: 53 .uValue): Asigna un valor a una Data. ejemplo: oTable:Replace(“CAMPONUEVO”. también puede ser: oDp:cEmpresa:=”Nuevo Valor” SET(cVarName. Si no existe es agregada automáticamente. Ejemplo: oDp:Add(“cEmpresa”.) MsgAlert(oTable:CAMPO) // Muestra el contenido del CAMPO oTable:End() También puede manejar campos virtuales con la finalidad de rediseñar la consulta. Consultas e Informes. También puede ser oDp:cEmpresa:=”Nuevo Valor”. Ttabla hereda todos los campos de la estructura en forma dinámica permitiendo navegar en cada registro y conocer el contenido de cada campo. genera un nuevo campo llamado CAMPONUEVO que se derivó de la expresión: oCursor:Monto*2 Sintaxis: Ttable():New(cSql) Manual del Usuario Capítulo VI. ADD(cVarname.

cada línea representa y cada columna representa la estructura de los campo: Nombre. GoBottom(): Posiciona el Ultimo Registro de la Consulta. puede ser el número del campo o nombre del campo. oOdbc: Contiene el Objeto de la conexión DSN donde pertenece la tabla.Programación Datos de la Clase TTABLE aDataFill: Un es arreglo multidimensional que contiene en forma bidimensional el contenido de la consulta SQL. Pag: 54 . longitud y Decimales. Cada línea representa un registro y cada columna representa un Campo. Para copiar aDataFill debe utilizar aData:=ACLONE(oTable:aDataFill). FieldName(<nField>): Devuelve el Nombre del campo según el número o posición del campo. RecNo(): Indica la posición del registro del cursor. Goto(<nRecord>) : Apunta al registro <nRecord> de la Consulta. FieldGet(<nField>): Obtiene el Valor de campo según la posición del campo. tipo. También es posible utiliza los métodos de esta clase: oCursor:oOdbc:Execute(<cSQL>) Métodos de la Clase TTABLE Eof() : Determina si la lectura a llegado al último registro de la consulta. <nField>. GoTop() : Posiciona el primer registro de la consulta. RecCount(): Indica la cantidad de líneas o registros del cursor o consulta. Manual del Usuario Capítulo VI. esta compuesta por líneas y columnas . Si desea visualizar su contenido puede utilizar ViewArray(oCursor:aDataFill) aFields: Contiene información de la estructura de la Tabla.

Programación FCount(): Determina la cantidad de campos utilizados por la consulta. Execute(<cSQL>): Ejecuta un comando SQL directamente con la conexión del Servidor de la Base de Datos. previa preparación con los métodos append() y replace(). Ejemplo para agregar un nuevo registro: #INCLUDE "DPXBASE.. previa preparación del método Replace().CH" PROCE MAIN() LOCAL oTable oTable:=OpenTable(“SELECT * FROM XTABLA”.uValue): Reemplaza el valor de la columna (Campo) identificada con <cField> según el valor de <uValue>. Browse(): Muestra el Contenido de la Consulta mediante una ventana MDI.DATE()) oTable:Commit() Manual del Usuario Capítulo VI.”Valor 1”) oTable:Replace(“FECHA” . Commit(<cWhere>): Ejecuta el comando UPDATE para actualizar uno o varios registros según la cláusula WHERE. Pag: 55 . DbSkip(<nSkip>): Permite (Ascendente/Descendente) sobre el cursor. Commit(): Ejecuta el comando INSERT INTO para agregar un nuevo registro en la tabla. Replace(cField. Es necesario que las consultas que utilicen funciones.) oTable:Append() oTable:Replace(“CAMPO1”. la columna MAX(XCAMPO) será representada por CAMPO. Ejemplo SELECT MAX(XCAMPO) AS CAMPO . representen los resultados a través de etiquetas. navegar Append(): Prepara el cursor para realizar la sentencia INSERT INTO. CtoDbf(cFile): Crea una tabla en formato DBF/FPT con el contenido del Cursor.F.

Programación oTable:End() RETURN En este ejemplo se puede observar que el cursor <oTable> se requiere sin datos. Manual del Usuario Capítulo VI.F.FECHA) VALUES (‘0001’.”MAX(XCAMPO)”) xValor:=VAL(xValor) oTable:=OpenTable(“SELECT * FROM XTABLA”.). no obstante es posible indicar la base de datos o agregar una nueva tabla en forma directa.DATE()) oTable:Commit() oTable:End() RETURN El método commit() construye la real sentencia SQL para la inserción del registro de la siguiente forma: INSERT 2005’) INTO XTABLA (CAMPO1...xValor. Si se requiere buscar información en la misma tabla para agregar un nuevo registro como sucede en los casos de numeración de documentos.’3005-05- TTable. utiliza las tablas declaradas en el diccionario de datos que contiene el DSN o Base de datos relacionada. 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.F.CH" PROCE MAIN() LOCAL oTable. podemos usar la siguiente sintaxis: #INCLUDE "DPXBASE. por tal motivo no es obligatorio indicar la Base de datos donde en encuentra la tabla. el curso en forma vacía. por esta razón la función OpenTable(“SELECT * FROM XTABLA”.xValor) oTable:Replace(“FECHA” .nLen) oTable:Append() oTable:Replace(“CAMPO1”.nLen xValor:=SQLGET(“XTABLA”. Pag: 56 .) nLen :=oTable:FieldLen(“XCAMPO”) xValor:=STRZERO(xValor+1.Solicitó a través de .F.

cSql.F.) oTable:Append() oTable:Replace(“CAMPO”.) Adiciona la tabla “MITABLE” (que debe existir) previamente en la base de datos oDp:cDsnData (esta es la base de datos activa según la empresa seleccionada).) // Abre el Cursos de Datos o Tabla oTable:=OpenTable(“MITABLE”.otable // Abre la Base de Datos oDB:=OpenOdbc(oDp:cDsnData) // Prepara la sentencia SQL cSql:="CREATE CREATE TABLE `MITABLE` (`CAMPO` VARCHAR (10) “ // Ejecuta la Sentencia SQL en la base de Datos oDB:EXECUTE(cSql) // Agrega la Tabla al diccionario de datos ADDTABLE("0998".otable // Abre la Base de Datos SGE0001 (Debe Existir) oDB:=OpenOdbc(“SGE0001”) oTable:=OpenTable(“MITABLE”.T.oDB) // Muestra los Datos oTable:Browse() otable:End() Manual del Usuario Capítulo VI.cSql.DBF”) otable:End() Acceso a tablas indicando la Base de Datos.."MITBLE".F.oDp:cDsnData.”DIEZ”) // Graba el Registro mediante INSERT INTO MITBLE oTable:Commit() // Exporta los datos hacia DBF oTable:CTODBF(“MITABLE.Programación Agregar una nueva Tabla al diccionario de datos: ADDTABLE("0998"...F.. Si desea crear la tabla puede hacerlo de la siguiente manera: LOCAL oServer."MITBLE".. LOCAL oDB. Pag: 57 .oDp:cDsnData.

SIZE 120.edt".oDB. igualmente permite la asignación de Data en forma dinámica con tal solo ejecutar la declaración “oForm:nVariable:=100” Ejemplo #INCLUDE "DPXBASE.Programación Acceso a tablas indicando la Base de Datos sin revisar el diccionario de Datos. ) oFrm:cVarName:=SPACE(20) oFrm:nValor :=100 oFrm:dFecha :=oDp:dFecha @ 0.) // Muestra los Datos oTable:Browse() otable:End() TDPEDIT Es una clase DpXbase que permite diseñar formularios de tipo (MDI) en forma declarativa.). ejemplo: LOCAL oDB.F.otable // Abre la Base de Datos SGE0001 (Debe Existir) oDB:=OpenOdbc(“SGE0001”) oTable:=OpenTable(“MITABLE”."MITBLE". SIZE 50.CLR_YELLOW @ 2. Manual del Usuario Capítulo VI.CH" PROCE MAIN() LOCAL oFont DEFINE FONT oFont NAME "Arial" SIZE 0.oDp:cDsnData.10.03 GET oFrm:oNombre VAR oFrm:cVarName."Fichero.F.10 RIGHT. . así evita utilizar la función ADDTABLE("0998".. Pag: 58 .0 SAY " Prueba de Texto ". 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."oFrm" . OF oFrm:oDlg.cSql.T. -12 BOLD ITALIC oFrm:=DPEDIT():New("Titulo".T.... COLOR CLR_HBLUE. El formulario acepta como métodos virtuales todas las funciones definidas con “FUNCTION” en el mismo programa DpXbase.

12.15 BUTTON " Cerrar ". SIZE 36.T.oObj:nLeft SAY cText PIXEL. ACTION oFrm:Close() oFrm:Activate() RETURN FUNCTION MyValid() IF Empty(oFrm:cVarName) MensajeErr("Nombre no Puede Estar Vació") RETURN . ENDIF RETURN . PICTURE "99/99/9999".8 Manual del Usuario Capítulo VI. FUNCTION XSAY(cText) LOCAL oObj oObj:=ATAIL(oFrm:oDlg:aControls) @ oObj:nTop-9. FONT oFont. SIZE 36. SIZE NIL.10 RIGHT.oFrm:dFecha). SIZE 50. ACTION LbxDate(oFrm:oFecha.bmp".F. SIZE 40.Programación FONT oFont.10.99".03 BMPGET oFrm:oFecha VAR oFrm:dFecha.03 GET oFrm:oValor VAR oFrm:nValor. FONT oFont. WHEN !Empty(oFrm:cVarName) XSAY("Fecha") @ 6. NAME "BITMAPS\Calendar. ACTION oFrm:Aceptar() @ 6. PICTURE "999999. WHEN !Empty(oFrm:cVarName) XSAY("Valor") @ 6.12. Pag: 59 .04 BUTTON " Aceptar ". VALID oFrm:MyValid() XSAY("Nombre") @ 4.

Métodos de la clase New(<cTitulo>. El formulario asume virtualmente los datos del cursos según los nombres de los campos para fácil utilización.edt) y ubicación “forms\” contentiva de los parámetros (linea. de esta manera el programador puede utilizar controles (GET) para editar su valores y mediante el método SAVE() del formulario los valores son almacenados en la Tabla. coForm: Nombre de la variable que contiene e identifica el formulario. El metodo Save() ejecutar previamente la función PRESAVE (que debe estar declarara en el formulario) con la finalidad de realizar verificaciones antes de grabar y PRESAVE devuelve . necesario para declarar los controles “@ Lin. será grabado el registro y luego será ejecutada la función POSTSAVE para Manual del Usuario Capítulo VI. Si oForm:nOption=1 se indica que se desea incluir .T.<coFrm>.ancho. Si el cursos se deriva de una consulta de productos oCursor:=oTable(“SELECT * FROM DPINV”. cTitulo: Nombre del título de la ventana.Col <CONTROL>” SetTable(oCursor): Asigna un cursor datos hacia el formulario permitiendo editar los valores de una tabla para ser modificados (oForm:nOption:=3) o Incluidos mediante (oForm:nOption:=1).columna. si oForm:nOption=3 se indica que los datos serán modificados.Programación RETURN . FUNCTION ACEPTAR() MsgAlert("Aquí se ejecuta el proceso") RETURN . ).T.T. color fondo y color texto) de cada control del formulario.T.<cFichero>. lWindows: Si es verdadero <. cFichero: Nombre del fichero con extension (.F.alto. Pag: 60 . el formulario asume las declaración de variables: oForm:INV_CODIGO. .<lWindows>): Inicia la construcción del formulario.> genera la ventana del formulario. oForm:INV_DESCRI.

restaurar. Pag: 61 . bEnd: Bloque de Código que debe ejecutarse al cierre del formulario. Esta utilidad es de gran ayuda para realizar validaciones de cierre. Todos los controles (GET..bResize): Presenta en el video y activa la ejecución del formulario. bInit: Bloque de código de iniciación y previa ejecución de la ventana. CreateWindows(): Dibuja la ventana MDI (oWnd) y el Dialogo (oDlg) para controles incrustado y dependiente de MDI. bResize: Bloque de Código que se ejecuta cuando el tamaño de la ventana es reajustado con el Mouse. oWnd: Nombre de la Ventana de estilo MDI (CHILD) hija de la ventana principal y se encarga de ejecutar todos los eventos de la venta: Minimizar. Activate(bInit.bEnd. Manual del Usuario Capítulo VI. puede ser utilizado para llamar a un método virtual (oFrm:xUDFunction) para crear barra de botones o ejecuciones previas a la presentación del formulario. en la construcción del formulario con NEW(). el formulario no puede ser cerrado. Windows() no es necesario si el parámetro <lWindows> es . Data de la Clase: oDlg: Nombre del Objeto Dialogo contenedor de Controles “oFrm:oDlg:aControls”.SAY. el sistema ejecutará ROLLBACK de la base de Datos para deshacer el nuevo registro agregado o modificado. Etc) se crean indicando por defecto a oDlg como contenedor.F. ajuste de tamaño y permitir el uso en forma MDI. oCursor: Contiene el objeto del cursor SQL de la consulta asociada con el formulario.COMBOBOX. Todos los controles deben ser definidos después de ejecutar el método Windows debido a que ::oDlg es el contenedor por defecto de todos los controles. si este devuelve .T.f.Programación realizar evaluaciones luego de grabar. si POSTSAVE devuelve .

en caso de ser . cPrint: Contiene el nombre de la función definida en el programa DpXbase que se encarga del proceso de impresión.hlp debido a que DpXbase utiliza al máximo el potencial de ésta fabulosa librería.F. LA LIBRERÍA FIVEWIN PARA Constituye un conjunto de controles de gran uso para la definición del formulario. Todos los controles definidos deben ser asociados sólo con el formulario.F.Programación bValid: Bloque de código que permite validar el cierre del formulario.fivetechsoft. CONTROLES DE FORMULARIOS. cList: Nombre del Fichero *.BRW (Browse) que realiza muestra vertical del datos del registro. lEscClose: Indica con . Check Box (Casilla de Selección) Manual del Usuario Capítulo VI.T. cDelete: Indica el nombre de la función que realiza el proceso de borrado. Si devuelve . no realiza la acción.F. suprime la barra de mensajes ubicada en la parte inferior del dialogo. cPreSave: Nombre de la función que se valida el proceso de grabación del registro. si el formulario puede ser cerrado con la tecla ESC. lMsgBar: Con . La sintaxis clásica de la librería fivewin (www.com) es utilizada en DpXbase logrando la mayor compatibilidad posible y aprovechamiento de toda la documentación existente c:\dpnmwin\help\fwcmd. lActivate: Indica si el formulario ha sido Activado o ejecutado el método Activate(). no realiza el borrado. puede evitar salirse con [X] de la ventana MDI. Pag: 62 . cPostSave: Nombre de la función que se ejecuta luego de grabar el registro.

ACTION oFrm:Close(). SIZE 90. MESSAGE "Cerrar Formulario". VALID. 43 SBUTTON oFrm:oBtn . Manual del Usuario Capítulo VI.02 CHECKBOX oFrm:oChk VAR oFrm:lVar.}.10. 23. PROMPT "Cerrar ". FILE "BITMAPS\XSALIR.T.BMP" NOBORDER. Pase del Mouse y Acción.T.T. LEFT PROMPT "Salir". OF oFrm:oDlg. @09. MESSAGE "Indique el valor del CheckBox".. VALID .oDp:nGris..Programación OFrm:lVar:=. 1 }. 1 GET oFrm:oGet VAR oFrm:cVar. WHEN . SIZE 36.T. Button (Botones Simples) @ 01.10.t. Presentación. Presenta el control Botón dibujado mediante tres botones BMP. @ 02. OFrm:oBtn:cToolTip:="Cerrar Formulario" OFrm:oBtn:cMsg :=”Mensaje en la Barra Inferior” Get (Introducir Datos) oFrm:cVar:=SPACE(40) @ 1.t. CLR_HGRAY. WHEN . ON CHANGE {||. OF oFrm:oDlg.01 BUTTON oFrm:oBtn. Pag: 63 . COLOR NIL. CANCEL SBUTTON (Boton con Imagen BMP). COLORS CLR_BLACK. WHEN . SIZE 42. SIZE NIL. ACTION (oFrm:Cancel()) CANCEL OFrm:oBtn:lCancel:=. { CLR_WHITE.12. OF oFrm:oDlg . MESSAGE "Indique el valor del Campo". PROMPT " CheckBox " .t..

t. ON CHANGE . VALID . 10 GET oFrm:oGet VAR oFrm:nValor.)}) Manual del Usuario Capítulo VI.t.200. El tamaño del browse de se define mediante el método Move(nlin. Texto" oFrm:cMemo:=Alltrim(oFrm:cMemo) @ 5. MESSAGE "Introduzca los textos".999. ComboBox (Cuadro Combinado) oFrm:aLista:={"Lúnes".T..200. ON CHANGE . 5 GET oFrm:oGet VAR oFrm:cMemo.T. Browse (Visualización y Edición de Datos).t. VALID . WHEN .100.t.999. Get (Introducir Datos en Campo MEMO) oFrm:cMemo:= "Campo Memo. WHEN .nil.. OF oFrm:oDlg."Viernes"} oFrm:cLista:=oFrm:aLista[1] @ 5.t. vacio".nAlto. RIGHT. // Get para Campos Numéricos oFrm:nValor:=1000 @ 4."Martes". FONT oFont.t. Pag: 64 .. OF oFrm:oDlg.{||!Empty(oFrm:cVar)}).) en la cláusula ON INIT del formulario (oFrm:Activate({|| oFrm:oBrw:Move(1.99". SIZE 100."Jueves". ON CHANGE .Programación MensajeErr("No puede estar Vacio”. MEMO.nAncho..t.1.T."Miércoles". MESSAGE "Indique el Monto"..15 COMBOBOX oFrm:oCbx VAR oFrm:cLista.nCol. ON CHANGE .t.. SIZE NIL..10. HSCROLL.. OF oFrm:oDlg. PICTURE "99. MESSAGE "Seleccione una Opción". WHEN . ITEMS oFrm:aLista.

38 OF oFrm:oDlg 3D CURSOR oCursor DEFINE BUTTON oBtn.CH” PROCE MAIN() oFrm:=DPEDIT():New("Titulo". OF oFrm:oBar.edt".) 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. 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. ) oFrm:CreateWindow() oFrm:Activate({||oFrm:HacerBarra()}) RETURN FUNCTION HacerBarra() LOCAL oCursor.APELLIDO. 16382457 ) } } oFrm:oBrw:CreateFromCode() BAR (Barra de Botones). . 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. iif( oBrw:nArrayAt%2=0.oBtn DEFINE CURSOR oCursor HAND DEFINE BUTTONBAR oFrm:oBar SIZE 38. 15790320.."oFrm" .T. #INCLUDE “DPXBASE..Programación oFrm:aData:=ASQL("SELECT CODIGO. Manual del Usuario Capítulo VI.F."Fichero.NOMBRE FROM NMTRABAJADOR") oFrm:oBrw := TXBrowse():New( oFrm:oDlg ) oFrm:oBrw:oFont := oFont // Recuerda Declarlo oFrm:oBrw:SetArray(oFrm:aData. Pag: 65 .

cText) RETURN NIL // eof Pueden notar que el test.prg // Ubicado c:\dpnmwin\hrb\test.prg (programa prg ejemplo) Programa test.T. Pag: 66 . La función HrbTest().prg posee la función HrbTest() que puede ser ejecutada desde cualquier parte de DpXbase. puede hacer llamadas a funciones propias de DpXbase “MensajeErr” y llamadas a procedimientos Dpxbase con tan solo indicar: EJECUTAR(“XPROGRAMA”.bat (Fichero de lotes para compilar) Testhrb.org) y se ejecutan en forma similar a los programas en DLLS. Harbour.oFrm:Close() oBtn:cToolTip:="Salir del Formulario" RETURN .prg #INCLUDE "DPXBASE.CH" MEMVAR oDp FUNCTION HRBtest(cText) MensajeErr(oDp:cEmpresa. MÓDULOS HRB Son programas generados por el compilador harbour (www.Programación NOBORDER. En la carpeta hrb ubicada dentro de la carpeta principal del sistema se encuentran los siguientes ficheros. están compuestos por funciones y/o procedimientos se cargan al inicio del programa y se puede hacer llamada a las funciones definidas en el programa HRB.harbourproject. ACTION MensajeErr("Salir").exe (Compilador 32 Bits) Build.xValor) Manual del Usuario Capítulo VI. FILENAME "BITMAPS\XSALIR.BMP".

OBJ y archivos de librerías *.hrb listo para ser cargado y utilizado desde DpXbase.LIB Que es mejor entre DpXbase y HRB? Ambos modos de trabajo tienen sus ventajas.CH" PROCE MAIN() HRBLOAD("test. Si al cargar el módulo HRB desde DpXbase se presenta un mensaje de error se debe a que el programa HRB está haciendo llamada a funciones no existentes en el ejecutable de DpXbase. No deben declarar variables estáticas. es necesario acceder a la carpeta c:\dpnmwin\hrb\ Ejecutar: BUILD TEST Build. Los módulos HRB sólo se generan desde la compilación 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 *.hrb") HRBTEST(“Desde DpXbase”) RETURN Reglas generales: Las funciones no deben tener nombres similares a las funciones existentes en DpXbase.prg y generar c:\dpnmwin\test. El programa fuente no es necesario para la ejecución.hrb. La principal ventaja de los módulos HRB está en la velocidad de ejecución que es mucho mayor que DpXbase. para ello utilizamos el siguiente ejemplo escrito en DpXbase. lo cual permite proteger la propiedad intelectual del código. Manual del Usuario Capítulo VI. no deben definir clases para objetos.bat se encarga de compilar el programa test. permitiendo crear diversas instancias de controles como diálogos (no modales) o ventanas MDI. además la declaración de variables locales son reales. Ejecución de Funciones del HRB Es necesario cargar en memoria las funciones definidas en test. #INCLUDE "DPXBASE. La principal función de los módulos HRB es la definición de funciones.PRG. archivos objetos *. Pag: 67 .Programación Para compilarlo.

Pag: 68 . UTILIZACION DE DESARROLLO. numérico y Date. No permite crear instancias para diálogos no modales ni ventanas MDI. para crear reportes. ambos utilizan tipos de datos: Carácter. En la carpeta c:\dpadmwin\foxpro se encuentra el programa foxrun. // Este ejemplo está Vinculado con el Cliente 0000000001 // DPXBASE FUNCTION MAIN() EJECUTAR(“FOXRUN”.prg que contiene un ejemplo funcional que lee parámetros creados desde DpXbase. utilizando FoxPro con tablas DBF.Programación DpXbase.DBF”) OTable:End() * FROM DPINV ORDER ON INV_CODIGO”. por ello siempre debe apoyarse en clases como TDPEDIT o TMDI. debe ejecutar el programa “FoxRun” con el siguiente parámetro. posee su editor propietario y es más cómodo. Desde DpXbase. lógico. escribir.STRZERO(1. compilar y ejecutar. Siempre estará disponible el programa fuente.T. memo. OTRAS HERRAMIENTAS DE DpXbase no pretende competir o desplazar herramientas o entornos de desarrollo de desarrollos como FoxPro o VisualBasic.10)) RETURN También.”DATOS. Manual del Usuario Capítulo VI. puede utilizar el siguiente ejemplo: //DpXbase FUNCTION MAIN() LOCAL oTable oTable:=OpenTable(“SELECT oTable:CTODBF(“DATOS. Para ejecutar programas binarios (EXE) desde DpXbase es necesario que instale FoxPro versión 8..DBF”) RETURN UTILIZACION DE REPORTES DISEÑADOS CON FOXPRO. Utilizando FoxPro: El modelo de datos que usa DpXbase es compatible con FoxPro.) EJECUTAR(“FOXRUN”.

previamente definidas en orígenes de Datos ODBC de Herramientas Administrativas del Panel de Control de Windows. ejemplo: C:\dpadmwin\crystal\dpinv. Conforman las funciones o actividades que realiza el objeto. seleccione la opción “Cristal Preview” o “Cristal Print” y finalmente presione el “Botón de Ejecución”. indica “nuevo reporte” e introduzca la denominación del reportes “Productos diseñador con FoxPro” y Nombre del archivo con su respectiva extensión y carpeta. seleccione el reporte identificado con FoxPro en la lista identificada “Diseño Cristal”. Obligatoriamente debe poseer un método constructor denominado NEW() y un Destructor denominado END(). Pag: 69 . CLASE: Código fuente o partitura de las acciones de un objeto. contiene: clase padre (opcional si hereda desde otro objeto). se deben asociar los reportes diseñados con FoxPro. DSN: Data Source Name. primero debe asociarlo con el reporte. Para ejecutar el reportes diseñado con FoxPro. Method de la clase. Vinculación de Reportes FRX con el generador de Reportes. Datapro genera archivos temporales de formato DBF en la carpeta “CRISTAL\”. acceda al diseñador de reportes de Datapro y seleccione la opción “Crystal Report”. Para mayor comodidad utilice el diseñador de reportes de FoxPro sobre las tablas temporales DBF ubicadas en la carpeta “\CRISTAL” y guarde el archivo de diseño preferiblemente con el mismo nombre de la tabla con extensión FRX y en la carpeta “CRISTAL\”.EXE que incluye el código fuente que permite conocer su contenido y ser adaptado para otros propósitos. Luego que el reporte posea la asociación con diversas opciones de diseño. De la misma forma en que se asocian los reportes diseñados con Crystal Report (*.frx”. Definición otorgada a las definiciones creadas por el usuario.Programación Con el objetivo de brindarle mayor comodidad a usuario del fabuloso generador de reportes que provee el entorno de desarrollo FoxPro. METODO. en forma analógica puede ser comparada con las Manual del Usuario Capítulo VI.RPT). Nombre de las conexiones ODBC con servidores de bases de datos. hemos creado un pequeño programa FOXREP. preferiblemente deben ser almacenados en la carpeta CRISTAL del Sistema “C:\dpadmwin\cristal\”. El contenida de las tablas se obtiene desde la consultas SQL solicitadas por el generador de reportes. métodos que indica lo que hace el objeto y Data que indica lo que tiene el objeto. Glosario de Términos UDF: User Define Function. CURSOR : Respuesta recibida en un plano bidimensional (Línea y Columnas) desde una consulta SQL.

DLLS: Dynamic Link Library. Método Virtual.20). instrucciones. llamadas a otras funciones y que devuelven un valor. 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 puede ser llamado o utilizadas desde varios programas ejecutables. Otro uso de ficheros DLLs pueden estar compuesto de recursos compuestos por diseños de controles: Combobox. Para utilizar el método de una clase debe ser llamada indicando el nombre del objeto.uPar2. Ejemplo: oObjeto:Metodo(uPar1. Pag: 70 . FUNCTION: Definición de un programa compuesto de parámetros. Ejemplo: Objeto:xData. DATA: Valores o contenidos del Objeto se representan a través de nombres válidos como variables. El objeto permite trabajar múltiples veces en forma simultánea (Instancias). OBJETO: Componente abstracto que realiza actividades según las tareas definidas en los métodos y valores almacenados en memoria (data). COMPILACION: Proceso de conversión en archivo objeto (OBJ) a partir de las instrucciones escritas en forma (humana) por un programador. seguido dos puntos y finalmente el nombre del método con sus respectivos parámetros. La función debe ser identificada con un nombre y debe recibir parámetros desde la instrucción que la ejecuta: Ejemplo: Sumar(10.Programación funciones estáticas de un programa que solo se pueden usar desde el mismo programa donde fue declarada. etc Manual del Usuario Capítulo VI. declaración de variables. checkbox. ha sido una definición adicional implantada en DpXbase.uParn).nValor2) RETURN nValor1+nValor2 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. También puede ser definido como “Lo que tiene el objeto”. text. Una clase puede ser definida a partir de otra clase aprovechando toda su partitura (herencia). FUNCTION Sumar(nValor1.