Algun experto en el foro que use o uso Eagle 1 ?

Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Algun experto en el foro que use o uso Eagle 1 ?

Post by Compuin »

Saludos,

Alguien del foro que trabaje/haya trabajado con Eagle1 a quien le pueda hacer unas consultas puntuales ?

Gracias de antemano
User avatar
jnavas
Posts: 399
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela
Contact:

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by jnavas »

Saludos
Tengo mas de 10 años trabajando con Eagle, lo uso mediante clases propias emulado léxico DBF.
Podrás formular tus inquietudes, si está a mi alcances con gusto te ayudaré.
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by Compuin »

jnavas wrote:Saludos
Tengo mas de 10 años trabajando con Eagle, lo uso mediante clases propias emulado léxico DBF.
Podrás formular tus inquietudes, si está a mi alcances con gusto te ayudaré.
Muchas gracias Sr. Juan

Me gustaria saber o tener un ejemplo de como se puede crear una conexion a Eagle1 mediante

Code: Select all

TMSConnect:New()
que pueda utilizar en todos mis prg sin tener que rehacer la conexion en ninguno de ellos

Todos los ejemplos parten de crear la conexion, objeto Database y objeto Table en el mismo prg

Espero haberme hecho entender
csincuir
Posts: 305
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Contact:

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by csincuir »

Hola Compuin.
Te dejo estos ejemplos, espero me puedas entender.

La idea es que, en tu programa principal hagas la conexion y que desde esta misma tengas funciones que utilicen tu conexion ya creada para devolverla a los demas programas de tu sistema.

Ejemplo Programa Principal:

Code: Select all

#Include "FiveWin.ch"

STATIC oConnect, oDataBase

///------------------------------------------------------------------------------------
Function Main()
    oConnect := TMSConnect():New()
    oConnect:Connect( "127.0.0.1", "usuario", "passw",,3306, ,( 65536 + 131072 ) )
    
    oDataBase := TMSDataBase():New( oConnect, "basededatos", .t. )    
    
    //Resto de Codigo
    
Return .T.

///------------------------------------------------------------------------------------
EXIT PROCEDURE Exit_Main()
oConnect:Close()

///------------------------------------------------------------------------------------
///Retorna objeto de Base de Datos Principal...
FUNCTION MyBaseDatos() 
RETURN( oDataBase )

///------------------------------------------------------------------------------------
///Retorna objeto de tabla
FUNCTION MyTable( cTable, cWhere, cHaving, cOrderBy )
Return( TMsTable():New( oConnect, cTable, cWhere, cHaving, cOrderBy )  )
 
Ejemplo Programa para consultar

Code: Select all

#Include "FiveWin.ch"

///------------------------------------------------------------------------------------
Function Consultas()
Local oTabla, cSql

oTabla := MyTable( "tablaconsulta" )
cSql := "SELECT * FROM tablaconsulta WHERE campo='filtro'"

oTabla:Open( cSql )

   //Resto de codigo
   
Return .t.
 
Ejemplo Programa para insertar algun dato

Code: Select all

#Include "FiveWin.ch"

///------------------------------------------------------------------------------------
Function Mantenimiento()
Local cSql, oDb

oDb := MyBaseDatos() 
cSql := "INSERT INTO tablaconsulta SET campo='Dato' WHERE campo='filtro'"

oDb:ExecSql(cSql)

   //Resto de codigo
   
Return .t.
 
Saludos cordiales.

Carlos.
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by xmanuel »

Una buena idea es la que plantea Carlos...
1.- Crear una variable estática al principio de tu programa.
2.- Crear el objeto conexión dentro de la función main.
3.- Usar esa variable en cualquier parte de tu PRG.

Si tu programa consta de muchos PRG para generar el EXE
lo mejor es que crees una función que pueda ser llamada desde cualquier PRG

Code: Select all


function dameConexion()

    static oConnect := nil            // Objeto conexion declarado como estatica
    local cHost := "127.0.0.1"
    local cUser := "root"
    local cPassword := "root"
    local cDbName := "E1Prueba"

    if oConnect == nil
        // Creamos el objeto "connexion"
        oConnect := TMSConnect():New()

        // Nos conectamos al servidor
        if !oConnect:Connect( cHost, cUser, cPassword, cDbName )
            MsgInfo( "No hay conexion con el servidor", "Operación Cancelada" )
            oConnect:Free()
        endif
    endif
    
return oConnect

 
luego en cualquier PRG
podras hacer:
oCon := dameConexion()
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by xmanuel »

Por cierto en Eagle1 ya existía una RDD para usar comandos DBF.
Ojo no estaban implementados todos, pero si los principales:
Este era un ABM hecho con la E1RDD

Code: Select all

//---------------------------------------------------------------------------//
//  AUTOR.....: Manuel Expósito Suárez   Soft4U 2002-2010                    //
//  eMail.....: messoft@gmail.com                                            //
//  CLASE.....: TMyTable                                                     //
//  FECHA MOD.: 11/05/2010                                                   //
//  VERSION...: 6.00                                                         //
//  PROPOSITO.: Ejemplo uso E1RDD de Egle1 + FW con Browse de FW             //
//---------------------------------------------------------------------------//

#include "Eagle1.ch"
#include "FiveWin.ch"
#include "dtpicker.ch"
#include "calendar.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 "&Mantenimiento" ACTION Mantenimiento()

      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 )
*/

    local cDbName :=    "E1Prueba            "
    local cTabla := "Test"
    local lRet

// Con sistema empotrado:
#ifdef E1_EMBEDDED

    local aOptions := { "Prueba E1 con FWH", "--defaults-file=./test.cnf" }
    local aGroup := { "op_servidor", "op_cliente" }

    oConnect := TMSEConnect():New( )
    lRet := oConnect:Connect(  aOptions, aGroup, AllTrim( cDbName ) )

// Con sistema cliente/servidor:
#else

    local cHost :=      "127.0.0.1           "
    local cUser :=      "root                "
    local cPassword :=  "root                "
    local 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 )

#endif



    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, oBrw, oCol

    DEFINE DIALOG oDlg FROM 3, 3 TO 40, 100 TITLE "Mantenimiento tabla TEST"

        @ 00, 01 SAY " &Datos tabla..."  OF oDlg

        oBrw := TXBrowse():New( oDlg )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || hb_ValToStr( ( nWA )->( FieldGet( 1 ) ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 1 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 2 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 2 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 3 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 3 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 4 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 4 ) )
        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 5 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 5 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 6 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 6 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 7 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 7 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || DToC( ( nWA )->( FieldGet( 8 ) ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 8 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || hb_ValToStr( ( nWA )->( FieldGet( 9 ) ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 9 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || hb_ValToStr( ( nWA )->( FieldGet( 10 ) ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 10 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || hb_ValToStr( ( nWA )->( FieldGet( 11 ) ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 11 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 12 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 12 ) )

        WITH OBJECT oBrw
            :nTop      := 10
            :nLeft     := 10
            :nBottom   := 240
            :nRight    := 370
            :nColDividerStyle := 2
            :bKeyNo    := { | n | iif( n == nil, ( nWA )->( RecNo() ), ( nWA )->( DbGoto( n ) ) ) }
            :bKeyCount := {|| ( nWA )->( RecCount() ) }
            :bSkip := { | n | GetTableObject( nWA ):Skipper( n ) }
            :SetRDD()
            :cAlias    := "Test"
            :CreateFromCode()
        END

        @ 14, 01 BUTTON "&Añadir"       OF oDlg SIZE 35, 12;
                    ACTION CtrDatos( oBrw, .t. )
        @ 14, 08 BUTTON "&Modificar"    OF oDlg SIZE 35, 12;
                    ACTION CtrDatos( oBrw, .f. )
        @ 14, 15 BUTTON "&Borrar"       OF oDlg SIZE 35, 12;
                    ACTION Borrar( oBrw )
        @ 14, 22 BUTTON "&Ordenar"      OF oDlg SIZE 35, 12;
                    ACTION Ordernar( oBrw )
        @ 14, 29 BUTTON "B&uscar"       OF oDlg SIZE 35, 12;
                    ACTION Buscar( oBrw )
        @ 14, 36 BUTTON "Listar"        OF oDlg SIZE 35, 12;
                    ACTION ( oBrw:Report( "Listado de la tabla", .t. ), ( nWA )->( DbGoTop() ) )
        @ 14, 43 BUTTON "<<" OF oDlg ACTION oBrw:GoTop() SIZE 35, 12
        @ 14, 50 BUTTON ">>" OF oDlg ACTION oBrw: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:SetOrderBy( n,, .t. )
        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 SIZE 50, 13  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, 77;
        TITLE "Mantenimiento de la tabla Test - " + cQueHago;
        STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )

        @ 01, 02 SAY "First"        OF oDlg
        @ 02, 1.5 GET ( nWA )->First    PICTURE "@K"                UPDATE OF oDlg

        @ 01, 26.6 SAY "Last"       OF oDlg
        @ 02, 20 GET ( nWA )->Last      PICTURE "@K"                UPDATE OF oDlg

        @ 2.8, 02 SAY "Street"      OF oDlg
        @ 4, 1.5 GET ( nWA )->Street    PICTURE "@K"                UPDATE OF oDlg

        @ 2.8, 26.6 SAY "City"      OF oDlg
        @ 4, 20 GET ( nWA )->City        PICTURE "@K"                UPDATE OF oDlg

        @ 4.6, 02 SAY "State"       OF oDlg
        @ 6, 1.5 GET ( nWA )->State     PICTURE "@K XX"             UPDATE OF oDlg

        @ 4.6, 5.5 SAY "Zip"        OF oDlg
        @ 6, 4 GET ( nWA )->Zip          PICTURE "@K 99999-9999"     UPDATE OF oDlg

        @ 4.6, 13.9 SAY "Hiredate"  OF oDlg
        @ 78, 83 DTPICKER ( nWA )->Hiredate   PIXEL SIZE 50, 11      UPDATE OF oDlg

        @ 5.7, 22 CHECKBOX ( nWA )->Married PROMPT "Married"        UPDATE OF oDlg

        @ 4.6, 33 SAY "Age"         OF oDlg
        @ 6, 24.5 GET ( nWA )->Age      PICTURE "@K 999"            UPDATE OF oDlg

        @ 4.6, 37.5 SAY "Salary"    OF oDlg
        @ 6, 28 GET ( nWA )->Salary     PICTURE "@KE 9,999,999.999" UPDATE OF oDlg

//..................... El campo MEMO...............................................
        @ 6.4, 02 SAY "Notes"       OF oDlg
        @ 8.1, 1.5 GET ( nWA )->Notes   MEMO SIZE 270, 65            UPDATE OF oDlg
//..................................................................................

        @ 10, 02 BUTTON "&Guardar";
                 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
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by xmanuel »

Por cierto...
Ya sabéis que ahora estoy con HDO que es un concepto mucho mas amplio y ambicioso que Eagle1...

Pronto voy a poner una LIB demo con ejemplos para que podáis hacer pruebas. :D :D :D
______________________________________________________________________________
Sevilla - Andalucía
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by Compuin »

xmanuel wrote:Una buena idea es la que plantea Carlos...
1.- Crear una variable estática al principio de tu programa.
2.- Crear el objeto conexión dentro de la función main.
3.- Usar esa variable en cualquier parte de tu PRG.

Si tu programa consta de muchos PRG para generar el EXE
lo mejor es que crees una función que pueda ser llamada desde cualquier PRG

Code: Select all


function dameConexion()

    static oConnect := nil            // Objeto conexion declarado como estatica
    local cHost := "127.0.0.1"
    local cUser := "root"
    local cPassword := "root"
    local cDbName := "E1Prueba"

    if oConnect == nil
        // Creamos el objeto "connexion"
        oConnect := TMSConnect():New()

        // Nos conectamos al servidor
        if !oConnect:Connect( cHost, cUser, cPassword, cDbName )
            MsgInfo( "No hay conexion con el servidor", "Operación Cancelada" )
            oConnect:Free()
        endif
    endif
    
return oConnect

 
luego en cualquier PRG
podras hacer:
oCon := dameConexion()
Se puede hacer lo mismo en vez de una fu ncion usar una variable Publica ? Algun ejemplo ?
User avatar
jnavas
Posts: 399
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela
Contact:

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by jnavas »

FUNCTION DPMYSQLBD(cDb,cIp,cLogin,cPass,nPort,lError,lCreate,lAdd)
LOCAL oDb,oMySql,nAt

DEFAULT cIp :=oDp:cIp ,;
cLogin :=oDp:cLogin,;
cPass :=oDp:cPass ,;
nPort :=oDp:nPort ,;
cDb :=oDp:cDsnData,;
lError :=.T.,;
lCreate :=.F.,;
lAdd :=.F. // Agrega lista de Tablas ADD para Refrescar tiempo y reconectar

DEFAULT oDp:aDPMYSQLBD:={}

cIp :=ALLTRIM(cIp )
cLogin :=ALLTRIM(cLogin)
cPass :=ALLTRIM(cPass )
nAt :=ASCAN(oDp:aDPMYSQLBD,{|a,n| a[1]==cIp .AND. a[2]==cDb})

IF nAt>0
oDb:=oDp:aDPMYSQLBD[nAt,3]
ENDIF

/

Code: Select all

/ ?
cDb,cIp,cLogin,cPass,nPort,lError,lCreate,"MYSQLDB",GETPROCE()

// oMySql :=EJECUTAR("DPMYSQLSTART",cIp,cLogin,cPass,nPort,lError)
oMySql :=DPMYSQLSTART(cIp,cLogin,cPass,nPort,lError)

// IF oDp:nVersion<6
// oDp:oMySqlCon:=DPMYSQLSTART(cIp,cLogin,cPass,nPort,lError)
// ENDIF

IF oMySql=NIL
RETURN NIL
ENDIF

IF !oMySql:ExistDb(cDb) .AND. lCreate
//? "SERA CREADA BD EN SERVIDOR ",cDb,oMySql:cHost
oMySql:CreateDB(cDb)
ENDIF

IF !oMySql:ExistDb(cDb)
MensajeErr("Base de Datos "+cDb+" no Existe en Servidor: "+oMySql:cHost)
RETURN NIL
ENDIF

// jn 09/09/2016
// ? "my opendatabase ya no esta funcionando"
oDb:=TMSDataBase():New( oMySql, cDb, .t. )

IF lAdd
MYADD_DATABASE(oDb) // Reemplaza utilizar oDb:=MyOpenDataBase(cDb,.f.,oMySql) // Refresca las conexiones (usuarios Dormidos)// ? oMySql:ClassName(),"DPMYSQLBD",cDb
ENDIF

// oDb:=MyOpenDataBase(cDb,.f.,oMySql) // Refresca las conexiones (usuarios Dormidos)
// "my opendatabase ya no esta funcionando"

oDb:Use()
oDb:Select()
/*
IF !oDb:oConnect:lConnected
oDb:oConnect:ReConnect()
ENDIF
*/
AADD(oDp:aDPMYSQLBD,{cIp,cDb,oDb,oMySql})

RETURN oDb

FUNCTION DPMYSQLSTART(cIp,cLogin,cPass,nPort,lError)
LOCAL lHayError:=.F. ,oMySqlCon:=NIL,nAt,oDataBase

DEFAULT cIp :=oDp:cIp ,;
cLogin :=oDp:cLogin,;
cPass :=oDp:cPass ,;
nPort :=oDp:nPort ,;
lError:=.T.

DEFAULT oDp:aMySql:={}

cIp :=ALLTRIM(cIp )
cLogin :=ALLTRIM(cLogin)
cPass :=ALLTRIM(cPass )

nAt:=ASCAN(oDp:aMySql,{|a,n| cIp=a[1] })

IF nAt>0

oMySqlCon:=oDp:aMySql[nAt,2]
// Cinco Minutos y Cierre la Conección, y vuelve a conectarse
IF ABS(SECONDS()-oDp:aMySql[nAt,3])>(60*60*5)
oMySqlCon:CLOSE()
oMySqlCon:=NIL
ARREDUCE(oDp:aMySql,nAt)
// AADD(oDp:aMySql,{cIp,oMySqlCon,SECONDS()})
ELSE
oDp:aMySql[nAt,3]:=SECONDS()
ENDIF

ENDIF

IF ValType(oMySqlCon)="O"

IF oMySqlCon:oError:GetErrNo()=2003 .AND. UPPE(cIp)="LOCALHOST"
lHayError:=.T.
MsgRun("Instalando Servicio","Por Favor Espere",{||WaitRun("MYSQL\DPMYSQLSTART.BAT",0)})
ENDIF

IF oMySqlCon:oError:GetErrNo()=2013
oMySqlCon:Close()
oMySqlCon:ReConnect()
ENDIF

IF !lHayError .AND. !oMySqlCon:lConnected
// oMySqlCon:ReConnect()
lHayError:=.T.
ENDIF

IF lHayError
ARREDUCE(oDp:aMySql,nAt)
RETURN NIL
ENDIF

RETURN oMySqlCon

ENDIF

CursorWait()

oMySqlCon:= TMSConnect():New() // Inicia el objeto Conexion

oMySqlCon:SetAutoError( lError )

__objAddData(oMySqlCon, "nSeconds" )
oSend(oMySqlCon, "nSeconds",0)

__objAddData(oMySqlCon, "nTimeMax" )
oSend(oMySqlCon, "nTimeMax",5*(60*60))

IF oMySqlCon:Connect( cIp, cLogin , cPass , NIL, IF( nPort=3306 , NIL , nPort ))

AADD(oDp:aMySql,{cIp,oMySqlCon,SECONDS()})

ELSE

oMySqlCon:Close()
MensajeErr( "No hay conexion con "+cIp )

RETURN NIL

ENDIF

RETURN oMySqlCon
User avatar
jnavas
Posts: 399
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela
Contact:

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by jnavas »

// Con sistema empotrado:
#ifdef Probar
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by xmanuel »

Claro que se puede. Y esa es la otra manera de hacer que una variable sea visible en todos los PRG de tu programa.

Code: Select all

#Include "FiveWin.ch"

PUBLIC oConnect

///------------------------------------------------------------------------------------
Function Main()
    oConnect := TMSConnect():New()
    oConnect:Connect( "127.0.0.1", "usuario", "passw",,3306, ,( 65536 + 131072 ) )
...
 
Como puedes observar declaras la variable publica antes de entrar en la funcion main y listo...

Ahora bien las variable publica ocupan sitio en la tabla de simbolos de Harbour y eso no me gusta porque en Clipper había un limite. Por suerte en Harbour no tenemos ese problema :-)
Solo tener encuenta que si en otro PRG tienes una variable con el mismo nombre la ultima declarada tendrá preferencia tenga el modificador de visibilidad que tenga (static, local, private, public, etc)

En xHarbour existe otro tipo que es GLOBAL que también te serviría.
______________________________________________________________________________
Sevilla - Andalucía
User avatar
lubin
Posts: 404
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by lubin »

Buenas tardes Manu, y con el permiso de todos

Por favor existe aun actualizaciones de Eagle1 compatible para fwh 19 con harbour y bcc7

He actualizado mi FWh y quiero saber si puedo seguir contando con Eagle1 ,

respuestas a lubin.am@speedy.com.pe

Gracias

Lubin
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by Compuin »

lubin wrote:Buenas tardes Manu, y con el permiso de todos

Por favor existe aun actualizaciones de Eagle1 compatible para fwh 19 con harbour y bcc7

He actualizado mi FWh y quiero saber si puedo seguir contando con Eagle1 ,

respuestas a lubin.am@speedy.com.pe

Gracias

Lubin

Saludos Lubin,

Yo uso la Eagle1 ya migrada a BCC 7.3 y Harbour 3.2. Con el ultimo Fivewin trabaja sin problemas

Contacta a Manu para que te de detalles, pero te puedo decir que el ya hizo el trabajo de migracion de esta clase y funciona muy bien
User avatar
lubin
Posts: 404
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by lubin »

Gracias por la respuesta estimado

Me das alguna esperanza,No me gustaría pasar a otra librería pues el Eagle1 ya la conozco pero lo que pasa es que nuestro amigo Manu no me responde a mi correo o quizás tengo su correo antiguo que ya no usa :( :(

Por favor crees que puedas pasarme su correo, puede ser por aquí o por lubin.am@speedy.com.pe o lubin.am@gmail.com

Gracias nuevamente .

Lubin

Compuin wrote:
lubin wrote:Buenas tardes Manu, y con el permiso de todos

Por favor existe aun actualizaciones de Eagle1 compatible para fwh 19 con harbour y bcc7

He actualizado mi FWh y quiero saber si puedo seguir contando con Eagle1 ,

respuestas a lubin.am@speedy.com.pe

Gracias

Lubin

Saludos Lubin,

Yo uso la Eagle1 ya migrada a BCC 7.3 y Harbour 3.2. Con el ultimo Fivewin trabaja sin problemas

Contacta a Manu para que te de detalles, pero te puedo decir que el ya hizo el trabajo de migracion de esta clase y funciona muy bien
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Algun experto en el foro que use o uso Eagle 1 ?

Post by xmanuel »

Respondido por privado amigo Lubin :D
______________________________________________________________________________
Sevilla - Andalucía
Post Reply