/*=============== T:\HGUI\dbfar\MiDBU.prg */
#include <hmg.ch>
#include "Include\MiDBU.ch"
#define Colorito 0xff000000
#define IDX_PAKAGE 01
#define IDX_DATABASE 02
#define IDX_TABLAS 03
#define IDX_REPETIR 04
#define IDX_EDITAR 05
#define IDX_DUPLICAR 06
#define IDX_RAYSQL 07
#define IDX_RELACION 08
#define IDX_TERMINAR 09
#define IDX_MAS 10
#define IDX_OKEY 11
#define IDX_BUSCAR 12
#define IDX_PLAY3 13
#define IDX_CAMBIAR 14
#define IDX_NUEVA_TAB 15
#define IDX_NEWSCHEMA 16
#define IDX_TABLA_PKY 17
#define IDX_SQL 18
#define IDX_NO_CONN 19
#define IDX_SQL_TAB 20
#define IDX_TAB_REL 21
#define IDX_TDESCONO 22
#define IDX_COMPACTA 23
#define IDX_GENPDF 24
#define IDX_DB_OKEY 25
#define IDX_EXCEL 26
#define IDX_USUARIO 27
#define IDX_RUNING 28
#define IDX_CONFIG 29
#define IDX_TOOLS 30
Memvar cArchivo
Memvar Nuevo
Memvar aNomb,aJust,aLong,aHdr,cBase,cCampo,cFiltro
Function Main(cBase)
PUBLIC cArchivo := ""
REQUEST DBFCDX
RDDSETDEFAULT( "DBFCDX" )
SET CODEPAGE TO SPANISH
SET LANGUAGE TO SPANISH
SET DELETED ON
SET CENTURY ON
SET DATE FORMAT "dd-mm-yyyy"
SET EPOCH TO YEAR(DATE())-50
SET TOOLTIPSTYLE BALLOON
SET BROWSESYNC ON
SET NAVIGATION EXTENDED
cArchivo := iif(cBase==NIL,'',cBase)
SET DEFAULT ICON TO 'MAIN'
DEFINE WINDOW owmain AT 0,0 WIDTH 1024 HEIGHT 768 ;
TITLE NOMSYS ;
MAIN ;
ON INIT iif(! Empty(cArchivo), EditarDBF(), )
DEFINE IMAGELIST imagelis OF owmain ;
BUTTONSIZE 50, 50 ;
IMAGE { 'ID_TOOLBAR' } ;
COLORMASK Colorito ;
IMAGECOUNT 30
DEFINE TOOLBAREX ToolBar_1 OF owmain BUTTONSIZE 50, 50 IMAGELIST 'imagelis' FLAT
BUTTON cmdope01 ;
PICTUREINDEX IDX_NUEVA_TAB ;
TOOLTIP "Generar nueva tabla";
ACTION NuevaDBF()
BUTTON cmdope02 ;
PICTUREINDEX IDX_EDITAR ;
TOOLTIP "Editar una tabla";
ACTION EditarDBF()
BUTTON cmdope03 ;
PICTUREINDEX IDX_TABLAS ;
TOOLTIP "listar las tablas" ;
ACTION MsgInfo( "Listar tablas del directorio" )
SEPARATOR
BUTTON cmdope04 ;
PICTUREINDEX IDX_DB_OKEY ;
TOOLTIP "detalles de la base de dato" ;
ACTION MsgInfo( "Aun en desarrollo")
BUTTON cmdope05 ;
PICTUREINDEX IDX_EXCEL ;
TOOLTIP "exportar a excel" ;
ACTION MsgInfo( "Aun en desarrollo")
BUTTON cmdope06 ;
PICTUREINDEX IDX_CONFIG ;
TOOLTIP "Configuracion de la aplicacion" ;
ACTION MsgInfo( "Aun en desarrollo")
BUTTON cmdope07 ;
PICTUREINDEX IDX_USUARIO ;
TOOLTIP "Aplicacion de usuarios" ;
ACTION MsgInfo( "Aun en desarrollo")
SEPARATOR
BUTTON cmdope08 ;
PICTUREINDEX IDX_TERMINAR ;
TOOLTIP "finalizar la aplicacion" ;
ACTION owmain.Release()
END TOOLBAR
DEFINE STATUSBAR FONT 'Consolas' SIZE 11
STATUSITEM "BNP-PARIBAS Buenos Aires - Argentina"
CLOCK
DATE
END STATUSBAR
END WINDOW
Maximize WINDOW owmain
ACTIVATE WINDOW owmain
RETURN NIL
#include "Include\XAA_EDICION.prg"
#include "Include\XAA_NUEVA.prg"
/*=============== T:\HGUI\dbfar\MiDBU.rc */
//
CREAR BITMAP IMAGENES\CREAR.BMP
EDITAR BITMAP IMAGENES\EDITAR.BMP
SALIR BITMAP IMAGENES\SALIR.BMP
FILTRAR BITMAP IMAGENES\FILTRAR.BMP
PRIMERO BITMAP IMAGENES\PRIMERO.BMP
ANTERIOR BITMAP IMAGENES\ANTERIOR.BMP
SIGUIENTE BITMAP IMAGENES\SIGUIENTE.BMP
ULTIMO BITMAP IMAGENES\ULTIMO.BMP
NUEVO1 BITMAP IMAGENES\NUEVO1.BMP
EDITAR1 BITMAP IMAGENES\EDITAR1.BMP
BORRAR BITMAP IMAGENES\BORRAR.BMP
CERRAR1 BITMAP IMAGENES\CERRAR1.BMP
MALOGO GIF IMAGENES\MALOGO.GIF
MAIN ICON IMAGENES\BASE.ICO
// CUENTA CON 30 ICONOS DE 50x50 Pixels
ID_TOOLBAR PNG IMAGENES\ToolBarDX.png
/*=============== T:\HGUI\dbfar\Imagenes\ANTERIOR.BMP */
/*=============== T:\HGUI\dbfar\Imagenes\base.ico */
/*=============== T:\HGUI\dbfar\Imagenes\BORRAR.BMP */
/*=============== T:\HGUI\dbfar\Imagenes\BUSCAR.BMP */
/*=============== T:\HGUI\dbfar\Imagenes\CERRAR1.BMP */
/*=============== T:\HGUI\dbfar\Imagenes\crear.bmp */
/*=============== T:\HGUI\dbfar\Imagenes\editar.bmp */
/*=============== T:\HGUI\dbfar\Imagenes\EDITAR1.BMP */
/*=============== T:\HGUI\dbfar\Imagenes\filtrar.bmp */
/*=============== T:\HGUI\dbfar\Imagenes\malogo.gif */
/*=============== T:\HGUI\dbfar\Imagenes\NUEVO1.BMP */
/*=============== T:\HGUI\dbfar\Imagenes\PRIMERO.BMP */
/*=============== T:\HGUI\dbfar\Imagenes\salir.bmp */
/*=============== T:\HGUI\dbfar\Imagenes\siguiente.bmp */
/*=============== T:\HGUI\dbfar\Imagenes\ToolBarDB.png */
/*=============== T:\HGUI\dbfar\Imagenes\ToolBarDX.png */
/*=============== T:\HGUI\dbfar\Imagenes\ULTIMO.BMP */
/*=============== T:\HGUI\dbfar\Include\MiDBU.ch */
#define TRUE .T.
#define FALSE .F.
#define SQuote CHR(39)
#define DQuote CHR(34)
#define CSim CHR(39)
#define Cdob CHR(34)
#define KeyTab CHR(9)
#define TeclaTab CHR(9)
#define BDER BROWSE_JTFY_RIGHT
#define BIZQ BROWSE_JTFY_LEFT
#define BCEN BROWSE_JTFY_CENTER
#define NEGRO {0,0,0}
#define BLANCO {255,255,255}
#define BEIGE {245,243,146}
#define AGUA {200,241,150}
#define EQICOLOR {000,128,000} ;
#define FinLinea Chr(10) + Chr(13)
#define cCurDir "\" + CurDir() + "\"
#define cIniFile cCurDir + "BnpSp.ini"
#define NTrim( n ) LTRIM( STR( n, IF( n == INT( n ), 0, 2 ) ))
#define DirActual GetCurrentFolder() +"\"
#define PrgFiles GetProgramFilesFolder()+"\"
#define DirDesk GetDesktopFolder()+"\"
#define DirDocs GetMyDocumentsFolder()+"\"
#define DirSys GetSystemFolder()+"\"
#define DirTemp GetTempFolder()+"\"
#define DirWin32 GetWindowsFolder()+"\"
#define TMemory NTrim( MemoryStatus( 1 ))
#define DMemory NTrim( MemoryStatus( 2 ))
#define P1Memory NTrim( MemoryStatus( 3 ))
#define P2Memory NTrim( MemoryStatus( 4 ))
#define DMemoryVM NTrim( MemoryStatus( 6 ))
#define FecHoy DATE()
#define FechaHoy DATE()
#define Hoy DATE()
#define ToDay Day()
#define MesActual Month(FecHoy)
#define Anio Year(FecHoy)
#define WinVersion WIndowsVersion()
#define HbrVersion Version()
#define HMGVersion MiniGuiVersion()
#define NOMSYS "dbFar"
#define VERSYS "Version 0.0.99(B)"
#define SISTEMA NOMSYS + " " + VERSYS
#define nWIDTH GetDeskTopWidth()
#define nHEIGHT GetDeskTopHeight()-28
/*=============== T:\HGUI\dbfar\Include\XAA_Edicion.Prg */
#include <hmg.ch>
Function EditarDBF()
LOCAL nCamp,aEst,cCarpeta,i,nPos
PUBLIC aNomb,aJust,aLong,aHdr,cBase,cCampo,cFiltro := ''
SET SOFTSEEK ON
IF cArchivo == ''
cCarpeta := GetCurrentFolder()
cArchivo := Getfile ( { {'DBFs','*.DBF'} } , 'Abrir base de datos' , cCarpeta , .F. , .T. )
Endif
nPos := RAT( '\',cArchivo )
cCarpeta := SubStr( cArchivo,1,nPos )
cArchivo := SubStr( cArchivo,nPos+1,Len(cArchivo) )
nPos := RAT( '.',cArchivo )
cArchivo := SubStr( cArchivo,1,nPos-1 )
IF FILE(cCarpeta+cArchivo+'.DBF')
USE (cCarpeta+cArchivo) ALIAS (cArchivo) EXCLUSIVE NEW
INDEX ON &(FieldName(1)) TO Aux1
cBase := Alias()
nCamp := Fcount()
aEst := DBstruct()
aNomb := {}
aHdr := {}
aJust := {}
aLong := {}
For i := 1 to nCamp
aadd(aNomb,aEst[i,1])
aadd(aHdr,aEst[i,1])
aadd(aJust,iif(aEst[i,2]=='N',1,0))
aadd(aLong,Min(250,Max(Len(aEst[i,1]),aEst[i,3])*iif(aEst[i,3]>5,10,12)))
Next
CreaBR()
Endif
RETURN NIL
STATIC FUNCTION CreaBR()
DEFINE WINDOW wnedicion AT 80,00 WIDTH nWIDTH-10 HEIGHT nHEIGHT-190;
TITLE Upper( cArchivo );
FONT "Arial" SIZE 10;
MODAL;
ON RELEASE ( DBCLOSEALL(), Ferase ('Aux1.CDX') )
DEFINE TOOLBAR ToolBar_1 BUTTONSIZE 58,36 IMAGESIZE 20,20 FLAT BORDER
BUTTON PRIMERO;
CAPTION '&Primero' ;
PICTURE 'PRIMERO';
ACTION ( _BrowseHome('oBrows', 'wnedicion') , wnedicion.oBrows.Value := RecNo() )
BUTTON ANTERIOR;
CAPTION '&Anterior';
PICTURE 'ANTERIOR';
ACTION ( _BrowseUp('oBrows', 'wnedicion') , wnedicion.oBrows.Value := RecNo() )
BUTTON SIGUIENTE;
CAPTION '&Siguiente';
PICTURE 'SIGUIENTE';
ACTION ( _BrowseDown('oBrows', 'wnedicion') , wnedicion.oBrows.Value := RecNo() )
BUTTON ULTIMO;
CAPTION '&Ultimo';
PICTURE 'ULTIMO';
ACTION ( _BrowseEnd('oBrows', 'wnedicion') , wnedicion.oBrows.Value := RecNo() ) SEPARATOR
BUTTON NUEVO;
CAPTION '&Nuevo';
PICTURE 'NUEVO1';
ACTION ( NuevoReg() )
BUTTON DELE;
CAPTION '&Borrar';
PICTURE 'BORRAR';
ACTION ( Borrar() )
BUTTON ZAP;
CAPTION '&Pack';
PICTURE 'BORRAR';
ACTION ( BorrarTodo() )
BUTTON CERRAR;
CAPTION '&Cerrar';
PICTURE 'CERRAR1';
ACTION ( cArchivo := '', wnedicion.release )
END TOOLBAR
@066,015 LABEL LABEL_1 VALUE 'Buscar:' TRANSPARENT
@060,070 TEXTBOX Control_1 WIDTH 250 ON ENTER ( Buscar() )
@066,453 LABEL LABEL_2 VALUE 'Ordenar:' TRANSPARENT
@060,510 COMBOBOX Combo_1 ITEMS aNomb VALUE 1 WIDTH 250 ON CHANGE ( Ordenar() )
@068,880 LABEL LABEL_3 VALUE 'Filtrar:' TRANSPARENT
@060,930 BUTTON FILTRAR CAPTION '...' WIDTH 38 HEIGHT 25 TOOLTIP 'Seleccionar registros' ACTION ( Filtrar() )
@090,001 BROWSE oBrows WIDTH ( wnedicion.width-25 ) HEIGHT ( wnedicion.height-135 );
WIDTHS aLong HEADERS aHdr;
FONT "Courier New" SIZE 10;
WORKAREA &(cBase);
FIELDS aNomb;
JUSTIFY aJust;
INPLACE;
PAINTDOUBLEBUFFER;
ON DBLCLICK ( wnedicion.oBrows.AllowEdit := .T. )
END WINDOW
SET TOOLTIP BACKCOLOR TO { 255,255,184 } OF wnedicion
SET TOOLTIP TEXTCOLOR TO { 000,000,000 } OF wnedicion
wnedicion.oBrows.SetFocus
ACTIVATE WINDOW wnedicion
RETURN NIL
STATIC FUNCTION Ordenar()
INDEX ON &(wnedicion.Combo_1.Item(wnedicion.Combo_1.Value)) TO Aux1
&cBase->(DbGoTop())
wnedicion.oBrows.Value := &cBase->(RecNo())
wnedicion.oBrows.Refresh
wnedicion.oBrows.SetFocus
RETURN NIL
STATIC FUNCTION Buscar()
cCampo := wnedicion.Combo_1.Item(wnedicion.Combo_1.Value)
&cBase->(DbSetOrder(1))
&cBase->(DbGoTop())
IF ValType(&cCampo) == 'C'
&cBase->(DbSeek( wnedicion.Control_1.Value ))
ELSEIF ValType(&cCampo) == 'N'
&cBase->(DbSeek( Val(wnedicion.Control_1.Value) ))
ELSEIF ValType(&cCampo) == 'D'
&cBase->(DbSeek( CtoD(wnedicion.Control_1.Value) ))
ENDIF
wnedicion.oBrows.Value := &cBase->(RecNo())
wnedicion.oBrows.Refresh
wnedicion.oBrows.SetFocus
RETURN NIL
STATIC FUNCTION NuevoReg()
&cBase->(DbAppend())
wnedicion.oBrows.Value := &cBase->(RecNo())
wnedicion.oBrows.Refresh
wnedicion.oBrows.SetFocus
RETURN NIL
STATIC FUNCTION Borrar()
&cBase->(DbDelete())
&cBase->(DbSkip(-1))
IF &cBase->(Bof())
&cBase->(DbGoTop())
ENDIF
wnedicion.oBrows.Value := &cBase->(RecNo())
wnedicion.oBrows.Refresh
wnedicion.oBrows.SetFocus
RETURN NIL
STATIC FUNCTION BorrarTodo()
Select(cBase)
Pack
DbGoTop()
wnedicion.oBrows.Value := RecNo()
wnedicion.oBrows.Refresh
wnedicion.oBrows.SetFocus
RETURN NIL
STATIC FUNCTION Filtrar()
cCampo := UPPER(ALLTRIM(FIELD(wnedicion.Combo_1.Value)))
Select(cBase)
cFiltro := UPPER(ALLTRIM(InputBox( 'Filtro:' , 'Busqueda' , cFiltro )))
IF Len(cFiltro) != 0
IF ValType(&cCampo) == 'C'
SET FILTER TO ( cFiltro $ &cBase->(&cCampo) )
ELSEIF ValType(&cCampo) == 'N'
SET FILTER TO ( Val(cFiltro) == &cBase->(&cCampo) )
ELSEIF ValType(&cCampo) == 'D'
SET FILTER TO ( CtoD(cFiltro) == &cBase->(&cCampo) )
ENDIF
ELSE
SET FILTER TO
ENDIF
DbGoTop()
wnedicion.oBrows.Value := RecNo()
wnedicion.oBrows.Refresh
wnedicion.oBrows.SetFocus
RETURN NIL
/*=============== T:\HGUI\dbfar\Include\XAA_nueva.Prg */
#include <hmg.ch>
Function NuevaDBF()
Private Nuevo := .T.
DEFINE WINDOW winnew AT 60, 0 WIDTH 800 HEIGHT 600;
TITLE 'Crear o modificar una base de datos';
MODAL;
ON INIT InicializaVariables()
DEFINE TOOLBAR ToolBar_1 BUTTONSIZE 58,36 IMAGESIZE 20,20 FLAT BORDER
BUTTON NUEVO;
CAPTION '&Nuevo';
PICTURE 'NUEVO1';
ACTION ( Nuevo() )
BUTTON EDITAR;
CAPTION '&Editar';
PICTURE 'EDITAR1';
ACTION ( Editar() )
BUTTON GUARDAR;
CAPTION '&Guardar';
PICTURE 'EDITAR1';
ACTION ( Guardar(), cArchivo := '', InicializaVariables() )
BUTTON CERRAR;
CAPTION '&Cerrar';
PICTURE 'CERRAR1';
ACTION ( cArchivo := '' , winnew.release )
END TOOLBAR
@062,007 LABEL BASE VALUE 'Nombre' TRANSPARENT
@055,058 TEXTBOX NOMBRE WIDTH 250 MAXLENGTH 8 UPPER
@088,011 LABEL CAMPO VALUE 'Campo' TRANSPARENT
@088,224 LABEL TIPO VALUE 'Tipo' TRANSPARENT
@088,365 LABEL LARGO VALUE 'Largo' TRANSPARENT
@088,476 LABEL DECIMALES VALUE 'Decimales' TRANSPARENT
@084,058 TEXTBOX NOMBRE_CAMPO WIDTH 150 MAXLENGTH 12 UPPER
@084,255 COMBOBOX TIPO_CAMPO WIDTH 100 ITEMS {'C','N','D','L','M' } VALUE 1
@084,400 TEXTBOX LARGO_CAMPO WIDTH 60 NUMERIC INPUTMASK '999' RIGHTALIGN
@084,537 TEXTBOX DECIMALES_CAMPO WIDTH 60 NUMERIC INPUTMASK '99' RIGHTALIGN ON ENTER AgregaCampo()
@116,001 GRID ESTRUCTURA WIDTH ( winnew.width-23 ) HEIGHT ( winnew.height-145 );
HEADERS {'Nombre','Tipo','Longitud','Decimales'};
WIDTHS { 260,120,80,80 };
JUSTIFY { 0,0,1,1 };
ITEMS {}
DEFINE CONTEXT MENU
ITEM "Modificar Linea"+Chr(9)+'F2' ACTION ( Modifica_Linea() )
ITEM "Eliminar Linea "+Chr(9)+'^Del' ACTION ( Eliminar_Linea() )
END MENU
ON KEY F2 ACTION ( Modifica_Linea() )
ON KEY CONTROL+DELETE ACTION ( Eliminar_Linea() )
END WINDOW
CENTER WINDOW winnew
ACTIVATE WINDOW winnew
RETURN NIL
STATIC FUNCTION InicializaVariables()
winnew.NOMBRE_CAMPO.VALUE := ''
winnew.TIPO_CAMPO.VALUE := 1
winnew.LARGO_CAMPO.VALUE := 0
winnew.DECIMALES_CAMPO.VALUE := 0
winnew.NOMBRE.ENABLED := .F.
winnew.NOMBRE_CAMPO.ENABLED := .F.
winnew.TIPO_CAMPO.ENABLED := .F.
winnew.LARGO_CAMPO.ENABLED := .F.
winnew.DECIMALES_CAMPO.ENABLED := .F.
winnew.ESTRUCTURA.ENABLED := .F.
RETURN NIL
STATIC FUNCTION Nuevo()
winnew.NOMBRE.ENABLED := .T.
winnew.NOMBRE_CAMPO.ENABLED := .T.
winnew.TIPO_CAMPO.ENABLED := .T.
winnew.LARGO_CAMPO.ENABLED := .T.
winnew.DECIMALES_CAMPO.ENABLED := .T.
winnew.ESTRUCTURA.ENABLED := .T.
winnew.NOMBRE.SetFocus
RETURN NIL
STATIC FUNCTION Editar()
Local aEstructura,cCarpeta,i,nPos
IF cArchivo == ''
cCarpeta := GetCurrentFolder()
cArchivo := ALLTRIM(Getfile ( { {'DBFs','*.DBF'} } , 'Abrir base de datos' , cCarpeta , .F. , .T. ))
ENDIF
nPos := RAT( '\',cArchivo )
cCarpeta := SubStr( cArchivo,1,nPos )
cArchivo := SubStr( cArchivo,nPos+1,Len(cArchivo) )
nPos := RAT( '.',cArchivo )
cArchivo := SubStr( cArchivo,1,nPos-1 )
winnew.NOMBRE.VALUE := cArchivo
If winnew.NOMBRE.Value == ''
winnew.NOMBRE.SetFocus
RETURN NIL
Endif
winnew.NOMBRE.ENABLED := .T.
winnew.NOMBRE_CAMPO.ENABLED := .T.
winnew.TIPO_CAMPO.ENABLED := .T.
winnew.LARGO_CAMPO.ENABLED := .T.
winnew.DECIMALES_CAMPO.ENABLED := .T.
winnew.ESTRUCTURA.ENABLED := .T.
IF FILE(cCarpeta+cArchivo+'.DBF')
USE (cCarpeta+cArchivo) ALIAS (cArchivo) EXCLUSIVE NEW
aEstructura := DBstruct()
CLOSE (cArchivo)
winnew.ESTRUCTURA.DeleteAllItems
FOR I := 1 TO LEN(aEstructura)
winnew.ESTRUCTURA.AddItem( { aEstructura[I,1],aEstructura[I,2],AllTrim(Str(aEstructura[I,3],3,0)),AllTrim(Str(aEstructura[I,4],2,0)) } )
NEXT I
ENDIF
RETURN NIL
STATIC FUNCTION Modifica_Linea()
winnew.NOMBRE_CAMPO.Value := winnew.ESTRUCTURA.Item(winnew.ESTRUCTURA.Value)[1]
winnew.TIPO_CAMPO.Value := Ascan({'C','N','D','L','M' },winnew.ESTRUCTURA.Item(winnew.ESTRUCTURA.Value)[2])
winnew.LARGO_CAMPO.Value := VAL(winnew.ESTRUCTURA.Item(winnew.ESTRUCTURA.Value)[3])
winnew.DECIMALES_CAMPO.Value := VAL(winnew.ESTRUCTURA.Item(winnew.ESTRUCTURA.Value)[4])
Nuevo := .F.
RETURN NIL
Static Function Eliminar_Linea()
Local v
v := winnew.ESTRUCTURA.Value
winnew.ESTRUCTURA.DeleteItem(winnew.ESTRUCTURA.Value)
winnew.ESTRUCTURA.Value := iif(v > 1, v-1, 1)
winnew.ESTRUCTURA.Setfocus
RETURN NIL
Static Function AgregaCampo()
IF winnew.TIPO_CAMPO.Value == 3
winnew.LARGO_CAMPO.VALUE := 8
ELSEIF winnew.TIPO_CAMPO.Value == 4
winnew.LARGO_CAMPO.VALUE := 1
ELSEIF winnew.TIPO_CAMPO.Value == 5
winnew.LARGO_CAMPO.VALUE := 10
ENDIF
IF winnew.TIPO_CAMPO.Value > 2
winnew.DECIMALES_CAMPO.Value := 0
ENDIF
IF Nuevo
winnew.ESTRUCTURA.AddItem( { winnew.NOMBRE_CAMPO.Value,;
winnew.TIPO_CAMPO.Item(winnew.TIPO_CAMPO.Value),;
hb_ntos(winnew.LARGO_CAMPO.Value),;
hb_ntos(winnew.DECIMALES_CAMPO.Value) } )
ELSE
winnew.ESTRUCTURA.Cell(winnew.ESTRUCTURA.Value, 1) := winnew.NOMBRE_CAMPO.Value
winnew.ESTRUCTURA.Cell(winnew.ESTRUCTURA.Value, 2) := winnew.TIPO_CAMPO.Item(winnew.TIPO_CAMPO.Value)
winnew.ESTRUCTURA.Cell(winnew.ESTRUCTURA.Value, 3) := hb_ntos(winnew.LARGO_CAMPO.Value)
winnew.ESTRUCTURA.Cell(winnew.ESTRUCTURA.Value, 4) := hb_ntos(winnew.DECIMALES_CAMPO.Value)
Nuevo := .T.
ENDIF
winnew.ESTRUCTURA.Refresh
winnew.NOMBRE_CAMPO.Value := ''
winnew.TIPO_CAMPO.Value := 1
winnew.LARGO_CAMPO.Value := ''
winnew.DECIMALES_CAMPO.Value := ''
winnew.NOMBRE_CAMPO.SetFocus
RETURN NIL
Static Function Guardar()
Local aStruct := {},i
If winnew.NOMBRE.Value == ''
winnew.NOMBRE.SetFocus
RETURN NIL
Endif
FOR I := 1 TO winnew.ESTRUCTURA.ItemCount
IF ASCAN( aStruct, {|e| e[1]==winnew.ESTRUCTURA.Item(I)[1]} ) == 0
AADD( aStruct, { winnew.ESTRUCTURA.Item(I)[1],winnew.ESTRUCTURA.Item(I)[2],Val(winnew.ESTRUCTURA.Item(I)[3]),Val(winnew.ESTRUCTURA.Item(I)[4]) })
ENDIF
NEXT I
winnew.NOMBRE.Value := Alltrim(winnew.NOMBRE.Value)
IF File(winnew.NOMBRE.Value+'.DBF')
USE (winnew.NOMBRE.Value)
COPY TO ( '_'+winnew.NOMBRE.Value )
CLOSE (winnew.NOMBRE.Value)
DBCreate(winnew.NOMBRE.Value,aStruct)
USE (winnew.NOMBRE.Value)
ZAP
APPEND FROM ( '_'+winnew.NOMBRE.Value )
CLOSE (winnew.NOMBRE.Value)
Ferase( '_'+winnew.NOMBRE.Value+'.DBF' )
IF FILE ( '_'+winnew.NOMBRE.Value+'.FPT' )
Ferase( '_'+winnew.NOMBRE.Value+'.FPT' )
ENDIF
ELSE
DbCreate(winnew.NOMBRE.Value,aStruct)
ENDIF
RETURN NIL