Algun experto en el foro que use o uso Eagle 1 ?
Algun experto en el foro que use o uso Eagle 1 ?
Saludos,
Alguien del foro que trabaje/haya trabajado con Eagle1 a quien le pueda hacer unas consultas puntuales ?
Gracias de antemano
Alguien del foro que trabaje/haya trabajado con Eagle1 a quien le pueda hacer unas consultas puntuales ?
Gracias de antemano
Re: Algun experto en el foro que use o uso Eagle 1 ?
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é.
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é.
Re: Algun experto en el foro que use o uso Eagle 1 ?
Muchas gracias Sr. Juanjnavas 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é.
Me gustaria saber o tener un ejemplo de como se puede crear una conexion a Eagle1 mediante
Code: Select all
TMSConnect:New()
Todos los ejemplos parten de crear la conexion, objeto Database y objeto Table en el mismo prg
Espero haberme hecho entender
Re: Algun experto en el foro que use o uso Eagle 1 ?
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:
Ejemplo Programa para consultar
Ejemplo Programa para insertar algun dato
Saludos cordiales.
Carlos.
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 ) )
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.
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.
Carlos.
Re: Algun experto en el foro que use o uso Eagle 1 ?
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
luego en cualquier PRG
podras hacer:
oCon := dameConexion()
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
podras hacer:
oCon := dameConexion()
______________________________________________________________________________
Sevilla - Andalucía
Sevilla - Andalucía
Re: Algun experto en el foro que use o uso Eagle 1 ?
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
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
Sevilla - Andalucía
Re: Algun experto en el foro que use o uso Eagle 1 ?
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.
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.
______________________________________________________________________________
Sevilla - Andalucía
Sevilla - Andalucía
Re: Algun experto en el foro que use o uso Eagle 1 ?
Se puede hacer lo mismo en vez de una fu ncion usar una variable Publica ? Algun ejemplo ?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
luego en cualquier PRGCode: 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
podras hacer:
oCon := dameConexion()
Re: Algun experto en el foro que use o uso Eagle 1 ?
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
/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
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
/ ?
// 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
Re: Algun experto en el foro que use o uso Eagle 1 ?
// Con sistema empotrado:
#ifdef Probar
Re: Algun experto en el foro que use o uso Eagle 1 ?
Claro que se puede. Y esa es la otra manera de hacer que una variable sea visible en todos los PRG de tu programa.
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.
Code: Select all
#Include "FiveWin.ch"
PUBLIC oConnect
///------------------------------------------------------------------------------------
Function Main()
oConnect := TMSConnect():New()
oConnect:Connect( "127.0.0.1", "usuario", "passw",,3306, ,( 65536 + 131072 ) )
...
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
Sevilla - Andalucía
Re: Algun experto en el foro que use o uso Eagle 1 ?
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
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
Re: Algun experto en el foro que use o uso Eagle 1 ?
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
Re: Algun experto en el foro que use o uso Eagle 1 ?
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
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
Re: Algun experto en el foro que use o uso Eagle 1 ?
Respondido por privado amigo Lubin
______________________________________________________________________________
Sevilla - Andalucía
Sevilla - Andalucía