//---------------------------------------------------------------------------//
#include "Eagle1.ch"
#include "FiveWin.ch"
//---------------------------------------------------------------------------//
// Son estaticas para que sean visibles desde todo el PRG un poco por
// comodidad
static oConnect // Objeto conexion
static nWA := 0 // Arera de trabajo
static oWnd // Objetos de FWH
//---------------------------------------------------------------------------//
function main()
SET DATE FORMAT TO "DD/MM/YYYY"
if AbrirTodo()
DEFINE WINDOW oWnd FROM 4, 4 TO 40, 120 ;
TITLE "Ejemplo de manteniento de una tabla con Eagle1 y FWH" ;
MENU BuildMenu()
SET MESSAGE OF oWnd NOINSET;
TO oConnect:cVersion + " por " + oConnect:cAuthor ;
CLOCK DATE
ACTIVATE WINDOW oWnd
else
Salir()
endif
return( nil )
//----------------------------------------------------------------------------//
function BuildMenu()
local oMenu
MENU oMenu
MENUITEM "&Gesti贸n"
MENU
MENUITEM "Tiny como logicos" ACTION GetTableObject( nWA ):SetTinyAsLogical( .t. );
MESSAGE "Trata los valores tiny de MySQL como campos logicos"
MENUITEM "Tiny como enteros" ACTION GetTableObject( nWA ):SetTinyAsLogical( .f. );
MESSAGE "Trata los valores tiny de MySQL como campos enteros chicos"
MENUITEM "&Mantenimiento" ACTION Mantenimiento();
MESSAGE "Altas, bajas, modificaciones, listados, busquedas, etc..."
ENDMENU
MENUITEM "&Utilities"
MENU
MENUITEM "&Calculadora" ACTION WinExec( "Calc" ) ;
MESSAGE "Lamando a la calculadora de Windows"
SEPARATOR
MENUITEM "&Escribir" ACTION WinExec( "Write" ) ;
MESSAGE "Llamando a Write de Windows"
ENDMENU
MENUITEM "&Salir"
MENU
MENUITEM "&Acerca de..." ;
ACTION MsgAbout( oConnect:cAuthor, oConnect:cVersion ) ;
MESSAGE "Informa sobre la versi贸n de Eagle1"
SEPARATOR
MENUITEM "&Salir";
ACTION Salir();
MESSAGE "Salir del ejemplo de Eagle1 y FWH"
ENDMENU
ENDMENU
return oMenu
//----------------------------------------------------------------------------//
//
static function AbrirTodo()
local cHost := "127.0.0.1 "
local cUser := "root "
local cPassword := "root "
local cDbName := "E1Prueba "
local lRet, oDlg
DEFINE DIALOG oDlg FROM 2, 2 TO 14, 35;
TITLE "Datos de conexi贸n" ;
STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )
@ 01, 01 SAY "Host:" OF oDlg
@ 01, 05 GET cHost PICTURE "@K" UPDATE OF oDlg
@ 1.8, 01 SAY "Usuario:" OF oDlg
@ 02, 05 GET cUser PICTURE "@K" UPDATE OF oDlg
@ 2.6, 01 SAY "Password:" OF oDlg
@ 03, 05 GET cPassword PICTURE "@K" UPDATE OF oDlg
@ 3.4, 01 SAY "Base datos:" OF oDlg
@ 04, 05 GET cDbName PICTURE "@K" UPDATE OF oDlg
@ 4, 7 BUTTON "&Acptar" ACTION oDlg:End() OF oDlg
ACTIVATE DIALOG oDlg CENTERED
cHost := trim( cHost )
cUser := trim( cUser )
cPassword := trim( cPassword )
cDbName := trim( cDbName )
// Creamos el objeto "connexion"
oConnect := TMSConnect():New()
// Nos conectamos al servidor
lRet := oConnect:Connect( cHost, cUser, cPassword, cDbName )
if !lRet
MsgInfo( "No hay conexi贸n con el servidor", "Operaci贸n Cancelada" )
else
//----------------------------------------------------------------------------//
// Aqui empieza E1RDD
//----------------------------------------------------------------------------//
// Se inicia el sistema E1RDD
InitE1RDD( oConnect )
// A partir de aqu铆 como una DBF
USE test NEW ALIAS test VIA "E1RDD"
nWA := Select( "test" )
//----------------------------------------------------------------------------//
endif
return( lRet )
//----------------------------------------------------------------------------//
//
static procedure Salir()
if nWA > 0
( nWA )->( DbCloseArea() )
endif
if ValType( oConnect ) == "O"
oConnect:Free()
endif
if ValType( oWnd ) == "O"
oWnd:End()
endif
return
//----------------------------------------------------------------------------//
static procedure Mantenimiento()
local oDlg, oLbx
DEFINE DIALOG oDlg FROM 3, 3 TO 40, 100 TITLE "Mantenimiento tabla TEST"
@ 00, 01 SAY " &Datos tabla..." OF oDlg
@ 01,01 LISTBOX oLbx ;
FIELDS ;
PadL( ( nWA )->Id, 6, " " ),;
( nWA )->First, ;
( nWA )->Last, ;
( nWA )->Street, ;
( nWA )->City, ;
( nWA )->State, ;
( nWA )->Zip, ;
Transform( ( nWA )->Married, "@" ), ;
( nWA )->Hiredate ;
HEADERS ;
"Id", "First", "Last", "Street", "City", "State", ;
"Zip", "Married", "Hiredate" ;
SIZE 365, 220 OF oDlg
MySetBrowse( oLbx, GetTableObject( nWA ) ) // Asigna los codeBlock de movimiento
oLbx:lCellStyle := .t.
@ 14, 01 BUTTON "&A帽adir" OF oDlg SIZE 35, 12;
ACTION CtrDatos( oLbx, .t. )
@ 14, 08 BUTTON "&Modificar" OF oDlg SIZE 35, 12;
ACTION CtrDatos( oLbx, .f. )
@ 14, 15 BUTTON "&Borrar" OF oDlg SIZE 35, 12;
ACTION Borrar( oLbx )
@ 14, 22 BUTTON "&Ordenar" OF oDlg SIZE 35, 12;
ACTION Ordernar( oLbx )
@ 14, 29 BUTTON "B&uscar" OF oDlg SIZE 35, 12;
ACTION Buscar( oLbx )
@ 14, 36 BUTTON "Listar" OF oDlg SIZE 35, 12;
ACTION ( oLbx:Report( "Listado de la tabla", .t. ), ( nWA )->( DbGoTop() ) )
@ 14, 43 BUTTON "<<" OF oDlg ACTION oLbx:GoTop() SIZE 35, 12
@ 14, 50 BUTTON ">>" OF oDlg ACTION oLbx:GoBottom() SIZE 35, 12
@ 14, 57 BUTTON "&Salir" OF oDlg ;
ACTION oDlg:End() SIZE 35, 12
ACTIVATE DIALOG oDlg CENTERED
return
//----------------------------------------------------------------------------//
// Borra la fila actual
static procedure Borrar( oBrw )
local nRecNo := ( nWA )->( RecNo() )
if MsgYesNo( "Realmente quiere borrar el registro " + StrNum( ( nWA )->( RecNo() ) ) + "?" )
( nWA )->( DbDelete() )
MyMsgInfo( "Borrado en el servidor" )
( nWA )->( DbGoTo( nRecNo ) )
oBrw:Refresh()
else
MyMsgInfo( "No se ha borrado..." )
endif
return
//----------------------------------------------------------------------------//
// Establece un nuevo orden de visualizacion
static procedure Ordernar( oLbxPrincipal )
local oDlg, oLbx
// As铆 se obtiene el objeto que maneja el WA, as铆 de fac铆l se puede trabajar
// con clases y RDD
local oDs := GetTableObject( nWA )
local i := ( nWA )->( FCount() )
local aFld := Array( i )
local n, cValue
FOR n := 1 TO i
aFld[ n ] := ( nWA )->( FieldName( n ) )
NEXT
n := 0
DEFINE DIALOG oDlg FROM 2, 2 TO 18, 30;
TITLE "Eagle1, FW y ListBox" ;
STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )
@ 1, 02 LISTBOX oLbx;
VAR cValue;
ITEMS aFld;
SIZE 80, 70;
OF oDlg
@ 5, 02 BUTTON "&Seleccionar";
OF oDlg;
SIZE 40, 12;
DEFAULT;
ACTION ( MyMsgInfo( "Orden: " + Str( n := oLbx:GetPos() ) + ;
+ CRLF + "Nombre del campo: " + cValue, "Has elegido" ), ;
oDlg:End() )
@ 5, 10 BUTTON "&Salir";
OF oDlg;
SIZE 40, 12;
ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTERED
if n != 0 .and. oDS:SetOrder( n )
oLbxPrincipal:GoTop()
oLbxPrincipal:Refresh()
else
MyMsgInfo( "No se ha establacido otro orden..." )
endif
return
//----------------------------------------------------------------------------//
static procedure Buscar( oLb )
local oDlg
local i := ( nWA )->( FCount() )
local n := 1
local oSay, cSay := "&Valor campo "
local oGet, uVal
local oDs := GetTableObject( nWA )
DEFINE DIALOG oDlg FROM 2, 2 TO 12, 70;
TITLE "B煤squeda de valores en el DataSet" ;
STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )
@ 01, 01 SAY "&Numero de columna ( 1 - " + StrNum( i ) + " ):" OF oDlg
@ 01, 10 GET n PICTURE "999" ;
VALID ( uVal := ( nWA )->( FieldGet( n ) ), oGet:Refresh(), ;
oSay:SetText( cSay + ( nWA )->( FieldName( n ) ) ), n > 0 .and. n <= i ) ;
OF oDlg
@ 02, 01 SAY oSay VAR cSay OF oDlg
@ 02, 10 GET oGet VAR uVal SIZE 160, 13 OF oDlg
@ 3, 02 BUTTON "&Buscar";
OF oDlg;
SIZE 40, 12;
ACTION ( if( oDS:Find( n, uVal, .t. ), ;
MyMsgInfo( "Valor encontrado" ), ;
MyMsgInfo( "Valor no encontrado" ) ), oLb:Refresh() )
@ 3, 10 BUTTON "S&iguiente";
OF oDlg;
SIZE 40, 12;
ACTION ( if( !oDS:FindNext(), MyMsgInfo( "No hay m谩s. Se lleg贸 al final" ), ), ;
oLb:Refresh() )
@ 3, 18 BUTTON "&Salir";
OF oDlg;
SIZE 40, 12;
ACTION oDlg:End()
ACTIVATE DIALOG oDlg
return
//----------------------------------------------------------------------------//
static procedure CtrDatos( oLb, lNuevo )
local oDlg, cQueHago, nRec
if lNuevo
cQueHago := "Altas"
( nWA )->( DbAppend() )
else
cQueHago := "Modificaci贸n"
endif
nRec := ( nWA )->( RecNo() )
DEFINE DIALOG oDlg FROM 2, 2 TO 30, 80;
TITLE "Mantenimiento de la tabla Test - " + cQueHago;
STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )
@ 01, 01 SAY "First" OF oDlg
@ 01, 05 GET ( nWA )->First PICTURE "@K" UPDATE OF oDlg
@ 1.8, 01 SAY "Last" OF oDlg
@ 02, 05 GET ( nWA )->Last PICTURE "@K" UPDATE OF oDlg
@ 2.6, 01 SAY "Street" OF oDlg
@ 03, 05 GET ( nWA )->Street PICTURE "@K" UPDATE OF oDlg
@ 3.5, 01 SAY "City" OF oDlg
@ 04, 05 GET ( nWA )->City PICTURE "@K" UPDATE OF oDlg
@ 4.4, 01 SAY "State" OF oDlg
@ 05, 05 GET ( nWA )->State PICTURE "@K" UPDATE OF oDlg
@ 5.2, 01 SAY "Zip" OF oDlg
@ 06, 05 GET ( nWA )->Zip PICTURE "@K" UPDATE OF oDlg
@ 6.1, 01 SAY "Hiredate" OF oDlg
@ 07, 05 GET ( nWA )->Hiredate PICTURE "@K" UPDATE OF oDlg
@ 7.0, 01 SAY "Married" OF oDlg
@ 08, 05 GET ( nWA )->Married PICTURE "@K" UPDATE OF oDlg
@ 7.9, 01 SAY "Age" OF oDlg
@ 09, 05 GET ( nWA )->Age PICTURE "@K" UPDATE OF oDlg
@ 8.9, 01 SAY "Salary" OF oDlg
@ 10, 05 GET ( nWA )->Salary PICTURE "@K" UPDATE OF oDlg
@ 9.8, 01 SAY "Notes" OF oDlg
@ 11, 05 GET ( nWA )->Notes PICTURE "@K" UPDATE OF oDlg
@ 10, 02 BUTTON "&Vale";
OF oDlg;
SIZE 40, 12;
ACTION ( ( nWA )->( DbCommit() ), ( nWA )->( DBGoTo( nRec ) ), ;
oLb:Refresh(), oDlg:End() )
@ 10, 18 BUTTON "&Salir";
OF oDlg;
SIZE 40, 12;
ACTION oDlg:End()
ACTIVATE DIALOG oDlg
return
//----------------------------------------------------------------------------//