FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Mantenimiento hecho con E1RDD y FWH
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Mantenimiento hecho con E1RDD y FWH
Posted: Tue May 11, 2010 11:13 PM

Este es un ejemplo hecho con la nueva RDD para MySQL de Eagle1 y FiveWin para (x)Harbour.

Hay que tener una base de datos en la que est茅 la tabla Test prcedente de test.dbf que se pas贸 con el ejemplo anterior de E1RDD.

Si a alguien le falta esa tabla puedo crear un script que la cree...

Este es el enlace de descarga: http://www.zshare.net/download/75978480219a0cfe/

Saludos :P

______________________________________________________________________________

Sevilla - Andaluc铆a
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Mantenimiento hecho con E1RDD y FWH
Posted: Wed May 12, 2010 05:44 AM
Se me olvid贸 poner el c贸digo fuente aunque tambi茅n est谩 en paquete

Saludos


Code (fw): Select all Collapse
//---------------------------------------------------------------------------//

#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

//----------------------------------------------------------------------------//
______________________________________________________________________________

Sevilla - Andaluc铆a

Continue the discussion