Saludos,
Alguien del foro que trabaje/haya trabajado con Eagle1 a quien le pueda hacer unas consultas puntuales ?
Gracias de antemano
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é.
TMSConnect:New()
#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 ) )
#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.
#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.
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
//---------------------------------------------------------------------------//
// 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
//----------------------------------------------------------------------------//
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 Expand view
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()
/ ?
// Con sistema empotrado:
#ifdef Probar
#Include "FiveWin.ch"
PUBLIC oConnect
///------------------------------------------------------------------------------------
Function Main()
oConnect := TMSConnect():New()
oConnect:Connect( "127.0.0.1", "usuario", "passw",,3306, ,( 65536 + 131072 ) )
...
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
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
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: No registered users and 24 guests