RE:Problema al conectar a base de datos ODBC
Hola Fabian.
Yo tenia un problema similar, lo resolví insertando una pequeña rutina al inicio de todas las formas que busca si en la estación de trabajo hay una tabla (semi temporal) con el perfil del usuario. Si no existe despliega una forma de seguridad (login y password) y envia esos datos para cotejarlos con la información almacendada en la tabla de usuarios, si encuentra al usuario con su login y verifica la clave de acceso, genera esta tabla semitemporal en un dbf con el perfil de ese usuario.
1. - Con este código genero el nombre de la tabla:
UB = AT("#",ALLTRIM(SYS(0)))
IF UB > 0
MAQUINA = ALLTRIM(LEFT(ALLTRIM(SYS(0)),(UB-1)))
ELSE
MAQUINA = ALLTRIM(SYS(0))
ENDIF
archperfil = "c: emp"+MAQUINA+".dbf"
CLOSE tables
2.- Si la tabla no existe corro la forma seguridad
IF !FILE(archperfil)
DO FORM seguridad
ENDIF
de lo contrario, simplemente verifico los permiso que tiene el usuario para usar la forma.
USE &archperfil
LOCATE FOR ALLTRIM(codigo) = modulo
IF FOUND()
SCATTER TO campos
coduser = campos(2)
codemp = ALLTRIM(STR(campos(1),3,0))
acceso = campos(4)
ELSE
acceso = ""
endif
CLOSE TABLES
En la forma SEGURIDAD, la validacion al campo que lleva el "password" es esta:
consulta = "select * from usuarios where usuario = '"
consulta = consulta + ALLTRIM(thisform.txtUsuario.Value) + "' "
consulta = consulta + " and clave = password('"+ALLTRIM(thisform.txtClave.Value)+"');"
resultado = SQLEXEC(sy_conecta, consulta, 'datos')
pase = .F.
SELECT datos
COUNT TO reg
IF reg > 0
GO top
SCATTER TO datusu
IF resultado > 0
pase = .t.
SCATTER TO campos
consulta = "select * from perfil where codigo_empresa = "
consulta = consulta + ALLTRIM(STR(campos(3),5,0)) + " and cod_emple = "
consulta = consulta + ALLTRIM(STR(campos(1),5,0)) +";"
respuesta = SQLEXEC(sy_conecta,consulta,'temporal')
COUNT TO nreg
IF nreg <= 0
pase = .t.
CLOSE TABLES
IF left(thisform.txtUSUARIO.Value,6) = "SYREGA"
consulta = "select codigo from modulos;"
resultado = SQLEXEC(sy_conecta,consulta,"temporal")
GO top
DO WHILE !EOF()
SCATTER TO campos
inserta = "insert into perfil values("+ALLTRIM(STR(datusu(3),5,0))+","+ALLTRIM(STR(datusu(1),5,0))+",'"
inserta = inserta + campos(1)+"','111111','"+dtoc(DATE())+"',0,'"+dtoc(DATE())+"',0);"
resultado = SQLEXEC(sy_conecta,inserta)
SKIP
ENDDO
CLOSE TABLES
consulta = "select * from perfil where codigo_empresa = 0;"
respuesta = SQLEXEC(sy_conecta,consulta,'temporal')
ENDIF
ENDIF
ENDIF
ELSE
MESSAGEBOX("Negado el acceso. Clave desconocidos",048,"")
pase = .f.
ENDIF
IF pase
SELECT temporal
COPY TO &archperfil
CLOSE tables
thisform.Release
else
SQLDISCONNECT(0)
CLEAR EVENT
APPLICATION.VISIBLE = .F.
ENDIF
Espero te sea de utilidad.
Saludos
Guillermo