Abrir un ODBC desde Fox

Hola javi en esta oportunidad recurro a usted por dos temas que no pude resolver en todo el día Buscando por la red...
- El primero es relacionado a los ODBC. En mi sistema, Puedo desde Crear un Odbc hasta Ver el Listado de los mismo. Ahora lo que necesito es poder Abrir uno, osea, Poder saber cual es el Nombre, la Descripción y el Nombre del Servidor (esos datos serian para un ODBC entre vfp y Sql Server).
- Y el Segundo, Es si Sabes de Alguna Manera de Encriptar tablas DBF. La verdad que no pudo encontrar mucho en la red y lo que encontré no me convenció.
Te agradecería Mucho si me podes Ayudar. Espero Tu respuesta.
Un Abrazo Grande!
gabriel.

1 respuesta

Respuesta
1
La primera pregunta despecto a las ODBC realmente no la entendí, no logro comprender si te interesa saber como hacer una conexión o si tratas de determinar los datos de la conexión desde la misma base de datos.
Respecto a la segunda pregunta te recomiendo que utilices esta XiCrCore.dll para encriptar tablas DBF, es excelente, el código para usarla sería este:
Close data all
DECLARE INTEGER CRYUtl_Encode IN XiCrCore.dll string strFilename, string strPassword, string strBackupExt, integer bKeepBackup, integer dwMethod
f=adir(a,"*.dbf")
for b=1 to f
WAITWINDOW("<<" + A(B,1) + ">>", "NOWAIT")
CRYUtl_Encode(a(b, 1),"lwerm","crb", 0,256)
Endfor
Si no encuentras donde descargar la dll pásame un mail tuyo que te la mando vía mail.
Hola Javi, el tema del ODBC ya lo Solucioné... te paso mi mail así me pasas el DLL por favor.
[email protected].
Otra cosa.me Gustaría saber como harías un apend From desde un cursor visual fox pero a una Tabla.
Un Abrazo!
Gabriel
Ya te mande por mail la dll. Esta comprimida en un archivo .rar
respecto al APPEND FROM te comento que no hay manera de hacerlo desde un cursor hacia una tabla, la función solo sirve entre tablas.
si yo quisiera vocar los datos de un cursor a una tabla haría lo siguiente
SELECT cursor
SCAN
        SCATTER NAME loRegistro
        INSERT INTO tabla FROM NAME loRegistro
        SELECT cursor
ENDSCAN
* esto te va a volcar los campos que coincidan en estructura, a su vez si tuvieses campos memo en el cursor y en la tabla, para copiarlos tendrias que agregar la sentencia MEMO al SCATTER NAME.
BÁRBARO! Ya lo pude hacer... una duda con respecto al dll.
¿Cómo es su Funcionamiento?, y otra cosa... el sistema va a estar instalado en un server y desde ahí haré accesos directos a los puestos.lo que necesito encripatar es un dbf de claves de acceso.
Mi duda es si lo encripata cuando no se esta usando el Sistema o siempre esta encriptado el DBF. ¿Cómo seria?
Básicamente con un programita ejectuta esta dll indicando las rutas donde se encuentran las DBF. Verás que si funcionó bien cuando quieras abrir las tablas directamente con fox no vas a poder o bien te va a mostrar todos caracteres indecifrables.
PRG ENCRIPTAR
Close data all
DECLARE INTEGER CRYUtl_Encode IN XiCrCore.dll string strFilename, string strPassword, string strBackupExt, integer bKeepBackup, integer dwMethod
f=adir(a,"*.dbf")
for b=1 to f
WAITWINDOW("<<" + A(B,1) + ">>", "NOWAIT")
CRYUtl_Encode(a(b,1),"lwerm","crb",0,256)
endfor
Luego para desencriptar, lo que tienes que hacer es incorporar a tu programa de inicio o arranque que ejecute esta función:
PROCEDURE DESENCRIPTA
LPARAMETERS tcLibreria, tnModuleHandler
* names are case sensitive
DECLARE INTEGER GetModuleHandle IN win32api STRING Modulename
DECLARE INTEGER CRYIni_InitializeEx IN XiCrCore.DLL INTEGER Mode, INTEGER MODULE, STRING Exclusions
DECLARE INTEGER CRYIni_UnInitialize IN XiCrCore.DLL
DECLARE INTEGER CRYUtl_Version    IN XiCrCore.DLL
DECLARE INTEGER CRYMan_Register   IN XiCrCore.DLL  STRING strFilename, STRING strPassword, INTEGER dwFlags, INTEGER dwMethod
DECLARE INTEGER CRYMan_Unregister   IN XiCrCore.DLL  STRING strFilename
DECLARE INTEGER CRYUtl_Encode IN XiCrCore.DLL  STRING strFilename, STRING strPassword, STRING  strBackupExt,  INTEGER bKeepBackup, INTEGER dwMethod
DECLARE INTEGER CRYUtl_Decode IN XiCrCore.DLL  STRING strFilename, STRING strPassword, STRING  strBackupExt,  INTEGER bKeepBackup, INTEGER dwMethod
DECLARE INTEGER CRYUtl_EncodeString IN XiCrCore.DLL STRING strSrc, STRING @strDest, INTEGER dwLength, STRING strPassword, INTEGER dwMethod
DECLARE INTEGER CRYUtl_DecodeString IN XiCrCore.DLL STRING strSrc, STRING @strDest, INTEGER dwLength, STRING strPassword, INTEGER dwMethod
IF Empty(tcLibreria)
 tcLibreria = "VFP9R.DLL"
ENDIF
LOCAL lnHookModule as Integer, lcLibreriaCryptor as String, lcReturn as String
IF VERSION(2)=2
 tcLibreria = "VFP9.EXE"
ENDIF 
IF Empty(tnModuleHandler)
 lnHookModule = GETMODULEHANDLE(tcLibreria)
ELSE
 lnHookModule = tnModuleHandler
ENDIF  
IF lnHookModule # 0
 RESULT = CRYINI_INITIALIZEEX( 2, lnHookModule, ";" )
 IF RESULT # 0
  lcReturn = "N - No se pudo desencriptar, "+tcLibreria+" - "+ALLTRIM(STR(lnHookModule,12))
 ELSE
  lcReturn = "S"
 ENDIF
ELSE
 lcReturn = "N - No se pudo obtener el module handle para "+tcLibreria
ENDIF
IF lcReturn == "S"
 =CRYMan_Register("*.DBF","lwerm",0,256)
ENDIF
RETURN lcReturn
Hola Javi
Probé el encriptador que me pasaste más el código. Se lo estoy aplicando a una tabla libre llamada "claves.dbf".Tu código lo pegue en dos PRG uno llamado "encripta" y otro "desencripta", el desencripta se lo aplico al dbf claves y una ves que termina, quiero ingresar y me dice que el archivo no es un DBF. Hasta ahí bárbaro...
El problema cuando la Quiero desencriptar... no me Funciona. Tienes Idea que Puede ser ¿?
La tabla tiene dos campos: Usuario, Contraseña
Espero que me Puedas ayudar.
Abrazo! gabriel.
Tendrías que hacerle un seguimiento al programa desencripta para ver donde falla, usa el depurador. Si encontrás cual es la parte del código que no funciona o si te da algún mensaje de error de esa manera si podría ayudarte.
Hola javi
Mira no encuentro un Error, te Muestro el código:
close data all
DECLARE INTEGER CRYUtl_Encode IN XiCrCore.dll string strFilename, string strPassword, string strBackupExt, integer bKeepBackup, integer dwMethod
f=adir(a,"c:\proyecto_empresas\claves.dbf")
for b=1 to f
WAIT WINDOW("<<" + A(B,1) + ">>")
CRYUtl_Encode(a(b,1),"lwerm","crb",0,256)
Endfor
Ahí le pongo la dirección en donde se encuentra ubicada la DBF. Espero tu Respuesta.
Un Abrazo.
No anda porque la dirección que tienes que poner es "c:\proyecto_empresas\" sin la tabla claves. Lo que va a hacer el sistema es encriptar o desencriptar todo lo que encuentre dentro de esa ruta. Yo te diría que mantengas las tablas encriptadas separadas de las que no, o bien encriptalas a todas.
Hola Javi Buen Día.
Acabo de hacer lo que me dijiste, Poniendo así:
"c:\proyecto_empresas\bases\", cree una carpeta "bases" y puse todas las dbf ahí dentro menos las foxuser, pero sigue sin funcionar, osea puedo seguir entrando a los datos.
Tambien Probe asi:
"c:\proyecto_empresas\bases\*.dbf"
Espero tu Respuesta.
Mil Gracias Javi!
Proba así:
Close data all
DECLARE INTEGER CRYUtl_Encode IN XiCrCore.dll string strFilename, string strPassword, string strBackupExt, integer bKeepBackup, integer dwMethod
set default to c:\proyecto_empresas\claves
nCant=adir(aArray,"*.dbf")
for nb=1 to nCant
WAIT WINDOW("<<" + aArray(nB,1) + ">>")
CRYUtl_Encode(a(b, 1),"lwerm","crb", 0,256)
Endfor
*cuando lo  ejecutes verifica qu ete muestre los wait wind de las tablas q va desencriptando. Salu2!
javi me tira error en donde te marco con un ASterisco (*)
    close data all
    DECLARE INTEGER CRYUtl_Encode IN XiCrCore.dll string strFilename, string  
    strPassword,   string strBackupExt, integer bKeepBackup, integer dwMethod
(*)set default to c:\proyecto_empresas\claves "no me reconoce el directorio"
     nCant=adir(aArray,"*.dbf")
     for nb=1 to nCant
     WAIT WINDOW("<<" + aArray(nB,1) + ">>")
     CRYUtl_Encode(a(b,1),"lwerm","crb",0,256)
     Endfor
El Directorio es ese, no esta mal, probé poniendo el path entre comillas y dentro de paréntesis pero nada..
Ahí paso, pero me tira error acá:
CRYUtl_Encode(a(b,1),"lwerm","crb",0,256) "NO ENCUENTRA LA VARIABLE 'B'"
"variable 'b' is not found"
Reemplázalo por esto:
CRYUtl_Encode(aArray(nb, 1),"lwerm","crb", 0,256) "
javi anduvo perfecto la encrip`tada, ahora el problema es que no me desencripta. Te mando el código que me pasaste.
Abrazo!
*luego para desencriptar, lo que tienes que hacer es incorporar a tu programa de inicio o arranque que ejecute esta funcion:
PROCEDURE DESENCRIPTA
LPARAMETERS tcLibreria, tnModuleHandler
* names are case sensitive
DECLARE INTEGER GetModuleHandle IN win32api STRING Modulename
DECLARE INTEGER CRYIni_InitializeEx IN XiCrCore.DLL INTEGER Mode, INTEGER MODULE, STRING Exclusions
DECLARE INTEGER CRYIni_UnInitialize IN XiCrCore.DLL
DECLARE INTEGER CRYUtl_Version    IN XiCrCore.DLL
DECLARE INTEGER CRYMan_Register   IN XiCrCore.DLL  STRING strFilename, STRING strPassword, INTEGER dwFlags, INTEGER dwMethod
DECLARE INTEGER CRYMan_Unregister   IN XiCrCore.DLL  STRING strFilename
DECLARE INTEGER CRYUtl_Encode IN XiCrCore.DLL  STRING strFilename, STRING strPassword, STRING  strBackupExt,  INTEGER bKeepBackup, INTEGER dwMethod
DECLARE INTEGER CRYUtl_Decode IN XiCrCore.DLL  STRING strFilename, STRING strPassword, STRING  strBackupExt,  INTEGER bKeepBackup, INTEGER dwMethod
DECLARE INTEGER CRYUtl_EncodeString IN XiCrCore.DLL STRING strSrc, STRING @strDest, INTEGER dwLength, STRING strPassword, INTEGER dwMethod
DECLARE INTEGER CRYUtl_DecodeString IN XiCrCore.DLL STRING strSrc, STRING @strDest, INTEGER dwLength, STRING strPassword, INTEGER dwMethod
IF Empty(tcLibreria)
 tcLibreria = "VFP9R.DLL"
ENDIF
LOCAL lnHookModule as Integer, lcLibreriaCryptor as String, lcReturn as String
IF VERSION(2)=2
 tcLibreria = "VFP9.EXE"
ENDIF
IF Empty(tnModuleHandler)
 lnHookModule = GETMODULEHANDLE(tcLibreria)
ELSE
 lnHookModule = tnModuleHandler
ENDIF  
IF lnHookModule # 0
 result = CRYINI_INITIALIZEEX( 2, lnHookModule, ";" )
 if result # 0
  lcReturn = "N - No se pudo desencriptar, "+tcLibreria+" - "+ALLTRIM(STR(lnHookModule,12))
 else
  lcReturn = "S"
 endif
else
 lcReturn = "N - No se pudo obtener el module handle para "+tcLibreria
endif
IF lcReturn == "S"
 =CRYMan_Register("c:\proyecto_empresas\bases","lwerm",0,256)
endif
return lcReturn
¿Le hiciste un seguimiento con el depurador para ver que falla en la función? Trata de hacerlo para decirme con más detalle si te da algún error o que sucede cuando la ejecutás.
¿Javi cómo estas? Buen día...
No... le pasé el depurador y no me tira un solo error.. la verdad no se que hacer...
Espero que me puedas ayudar.
Abrazo!
Ok, proba ejecutar la función de la siguiente manera:
lcResp = desencripta("XiCrCore.DLL")
Y después revisa el contenido de lcResp para ver como terminó la función.
Saludos!
PD: necesito que finalices esta pregunta y que empieces una nueva porque me queda una sola respuesta en la cantidad de respuestas por pregunta, yo nos fuimos mucho del tema original.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas