Page 1 of 1

problema con nombre de usuario publico en cualquier parte

Posted: Wed Jan 04, 2006 1:33 pm
by DiGregorio
saludos, feliz año,

como saben soy nuevo en harbour, y estoy migrando toda mi aplicacion de clipper, y bueno........¡


Tengo el siguiente problema: mi programa tiene varios prg, y cuando ingreso al mismo, le solicito una solo la clave al usuario y la valido contra un archivo dbf, en el cual esta la clave y el nombre del usuario, ahora bien quiero guardar ese nombre en una variable publica para usarla en cualquier parte del programa, para saber en todo momento como se llama el usuario. trate de hacerlo con una funcion que pasa el nombre de aqui para alla, pero necesito una manera mas sencilla

claveusu(cpass) donde cpass es la clave que introdujo el cliente


FUNCTION CLAVEUSU(cPass,prueb1)

IF NUSE('.\DATA\DB010',.T.,5,'','CLAVES') //ABRO EN MODO SHARE LA TABLA CLAVES
ELSE
CLOSE DATA
RETURN NIL
ENDIF

Select claves
DBGOTOP()
DO WHILE .NOT. EOF()
IF claves->clave=cpass
usuario:=claves->nombre ------>esta es la que quiero ver
CLOSE claves desde cualquier parte,
RETURN .T. como la defino y manejo
ENDIF para tenerla siempre
SKIP activa
ENDDO
close claves
RETURN .F.

yo en clipper la coloca publica y listo pero aqui no tengo ni idea, y la manera que he conseguido es super complicada y engorrosa. y este metodo debo usarlo en gran parte de todo mi programa.

de antemano gracias.

Posted: Wed Jan 04, 2006 2:03 pm
by YamilBracho
Pues aqui es lo mismo puedes crear una variable publica para usarla en todos los modulos de tu aplicacion. Una mejor idea es tener un modulo o una clase donde tengas todas tuas variables publicas o quizas un arreglo y ese sea el unico que sea publico

Posted: Wed Jan 04, 2006 2:10 pm
by DiGregorio
YamilBracho wrote:Pues aqui es lo mismo puedes crear una variable publica para usarla en todos los modulos de tu aplicacion. Una mejor idea es tener un modulo o una clase donde tengas todas tuas variables publicas o quizas un arreglo y ese sea el unico que sea publico

pero cuando a una variable la hago publica con public xxxx me da un error de compilacion, es que de verdad no tengo ni idea, podrias enviarme un pequeño ejemplo, gracias.

Posted: Wed Jan 04, 2006 3:13 pm
by VeRCE
DiGregorio wrote:
YamilBracho wrote:Pues aqui es lo mismo puedes crear una variable publica para usarla en todos los modulos de tu aplicacion. Una mejor idea es tener un modulo o una clase donde tengas todas tuas variables publicas o quizas un arreglo y ese sea el unico que sea publico
pero cuando a una variable la hago publica con public xxxx me da un error de compilacion, es que de verdad no tengo ni idea, podrias enviarme un pequeño ejemplo, gracias.
Una forma de hacerlo es la siguiente:
En tu programa principal haces lo que te indico

#include "FiveWin.ch"

MemVar nMiVarPublica

Function Main()

Public nMiVarPublica
...
...
...

Return NIL

y en todos tus demás PRGs deberás hacer lo siguiente:

#include "FiveWin.ch"

MemVar nMiVarPublica

Function blablablabla()
Return NIL

En conclusión, en todos tus demás prgs deberás poner
MemVar y tu variable para que puedas ver la variable
pública.

Saludos, espero te funcione, así lo trabajo yo.

Posted: Wed Jan 04, 2006 3:24 pm
by DiGregorio
VeRCE wrote:
DiGregorio wrote:
YamilBracho wrote:Pues aqui es lo mismo puedes crear una variable publica para usarla en todos los modulos de tu aplicacion. Una mejor idea es tener un modulo o una clase donde tengas todas tuas variables publicas o quizas un arreglo y ese sea el unico que sea publico
pero cuando a una variable la hago publica con public xxxx me da un error de compilacion, es que de verdad no tengo ni idea, podrias enviarme un pequeño ejemplo, gracias.
Una forma de hacerlo es la siguiente:
En tu programa principal haces lo que te indico

#include "FiveWin.ch"

MemVar nMiVarPublica

Function Main()

Public nMiVarPublica
...
...
...

Return NIL

y en todos tus demás PRGs deberás hacer lo siguiente:

#include "FiveWin.ch"

MemVar nMiVarPublica

Function blablablabla()
Return NIL

En conclusión, en todos tus demás prgs deberás poner
MemVar y tu variable para que puedas ver la variable
pública.

Saludos, espero te funcione, así lo trabajo yo.
Hola Yamil, de verdad gracias, me funciono perfecto, lo que pasaba era que estaba usando el memvar pero habia dejado de usar el public, jajajja


gracias, feliz año

Posted: Wed Jan 04, 2006 4:10 pm
by Vikthor
Yo lo hago de la siguiente forma:

Uso una variable static y una clase que maneja todas la variables del sistema pero como DATAS de la clase y no como variables públicas.

Y una función que me devuelve el objeto contenedor de las datas.

Es un proceso muy sencillo y fácil de usar.

Code: Select all

#INCLUDE "FiveWin.ch"
STATIC oApp

FUNCTION Main()
   oApp := TAdmin():New()
   oApp:Activate()
RETURN( Nil )

FUNCTION GetApp(); RETURN oApp

CLASS TAdmin From TWindow

   DATA oWnd
   DATA cIp
   DATA oIni
   DATA cRuta
   DATA cIniFile
   DATA cEmpresa
   DATA cBmpFondo
   DATA oBoton
   DATA oBar
   DATA SysName
   DATA cFont
   DATA oFont
   DATA oFont2
   DATA oTimer
   DATA oTray
   DATA oIcon
   DATA oUsuario
   DATA oMenu
   DATA aObj
   DATA oBrs
   DATA aDbf
   DATA oDbf
   DATA nEvento
   METHOD New() CONSTRUCTOR
   METHOD Activate()
   METHOD MainMenu()
   METHOD Save()
   METHOD End()
   METHOD KeyDown( nKey, nFlags )
   METHOD SetTray()
   METHOD MenuTray( nRow , nCol , oTray )
ENDCLASS