acerca de obdcad32.exe ya me tiene ofuscado!! acerca de windows 7 32 y 64 bits....

341 views
Skip to first unread message

Saul Piña Hernandez

unread,
May 14, 2013, 9:57:48 AM5/14/13
to publice...@googlegroups.com
Saludos Comunidad..

Pues resulta, que yo desarrollé un sistema en vfp9 con conexion a mysql. En la computadora donde lo desarrollé tiene como S.O. Windows 7 de 32 bits. Entonces para la conexion odbc utilicé el conector driver 5.1 de mysql. y ahora me topé con que las computadoras en donde se va a capturar (tanto el server como las terminales) tienen Sistema operativo Windows 7 de "64 bits"

Logicamente que me muestra un error a la hora de conectarse, porque el odbcad32.exe que está en C:\Windows\System32\ "no reconoce el obdcad.exe  y no se que puedo hacer.

Entonces le cambié el conector por el "Driver 5.2 64 bits de Mysql" y si, funciona perfecto, pero ese no es el punto, porque cuendo quiera hacerle cambios en mi compu de 32 bits, debo cambiar el driver de nuevo.
Como podría solucionar este problema? 

puedo utilizar dos conexiones? , es decir, me gustaría saber si puedo (mediante codigo) saber si el windows es de 64 bits, pues utilizar la conexion de 64 bits ó si es de 32 bits (utilizar la conexion de 32 bits). 

Por favor, todas sus sugerencias y consejos son bien recibidos.

Gracias!

sergio alejandro garcia mendez

unread,
May 14, 2013, 10:04:15 AM5/14/13
to publice...@googlegroups.com
Ya instalaste el OBDC de 64bits ya que el de 32bits no funciona en ese tipo de windows.
--
Sergio A. García
correo tayi...@gmail.com

Claudio Luna

unread,
May 14, 2013, 10:09:02 AM5/14/13
to Comunidad de Visual Foxpro en Español
Usa el que esta en la carpeta C:\Windows\SysWOW64
Saludos
--
Claudio Luna
Monttevideo - Uruguay
SKYPE: clunamarin
Cel. 099 194 770

Luis Maria Guayan

unread,
May 14, 2013, 10:19:22 AM5/14/13
to publice...@googlegroups.com
Esto te va a ayudar:

:: Controladores ODBC de 32 bits en SO de 64 bits ::
http://www.portalfox.com/article.php?sid=2752


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Saul Piña Hernandez

unread,
May 14, 2013, 10:27:25 AM5/14/13
to publice...@googlegroups.com
Gracias amigos.

Lo que quiero es precisamente eso, evitar que tenga que escribir o meter mano yo todos los dias, porque se supone que no voy a estar en esa oficina.

me gustaria que, por "arte de magia" el sistema sepa si, es windows de 64 bits, que utilice la cadena de conexion de 64 bits, y si el windows es de 32 bits pues que utilice la cadena de 32 bits,

pero todo que lo haga al iniciar el sistema, porque los usuarios no saben nada de configuracion...y si a eso le agrego que algunas trabajarán via internet, pues peor.

Gracias!

Nota: Manualmente lo puedo hacer, pero la idea no es esa, recuerden que el jefe solo quiere encender su computadora y abrir el sistema sin que tenga que hablarme ni que le aparezca errores....


Arnaldo Toledano

unread,
May 14, 2013, 11:27:11 AM5/14/13
to publice...@googlegroups.com
POR EXPERIENCIA, te recomiendo leer el articulo que te recomendó Luis Maria .
Lo que no entiendo es porque haces mención a la necesidad que tu programa de manera "mágica" sepa
que conexión debe utilizar.

El conector de MySQL que utilizas para VFP es el de 32 BITS, (VFP no trabaja con 64 bits), por lo tanto  NUNCA vas a utilizar el de 64 Bits.
Windows de 64 tiene dos carpetas.
1.- Una para PROGRAMAM FILES de 32 y otra para los de 64.
2.- Lo mismo para SYSTEM.
Es decir que "acepta" elementos de 32 Bits.
En el articulo en cuestión hace mención a ejecutar el systemdrive%\Windows\SysWoW64\odbcad32.exe,
 que es de 32 BITS en reemplazo del que utiliza por defecto Windows, que es de 64 Bits.

Supongo que lo que debes de hacer es hacer la conexión por SISTEMA.
En ese caso deberás profundizar como puede hacer tu sistema para SABER si estas ante un WIN 32 o 64
A partir de allí buscar la ubicación del ODBCAD32.EXE


Arnaldo Toledano
--
Arnaldo Toledano Tesys Informática Córdoba Argentina

Saul Piña Hernandez

unread,
May 14, 2013, 1:06:43 PM5/14/13
to publice...@googlegroups.com, arnaldo....@gmail.com
"Supongo que lo que debes de hacer es hacer la conexión por SISTEMA.
En ese caso deberás profundizar como puede hacer tu sistema para SABER si estas ante un WIN 32 o 64
A partir de allí buscar la ubicación del ODBCAD32.EXE
"

Exactamente eso es lo que deseo....se podrá???

Fernando D. Bozzo

unread,
May 14, 2013, 2:43:18 PM5/14/13
to publice...@googlegroups.com
Hola Saul, además de lo que te comentan, para saber si estás en un SO de 32 o de 64 bits, podés consultar la variable de sistema "PROCESSOR_ARCHITECTURE", que entre otros valores puede ser:

x86  ==> (32 bits)
AMD64  ==> (64 bits)

Puede que haya otros valores. Esto lo consultás con GETENV( "PROCESSOR_ARCHITECTURE" )


Saludos.-

Arnaldo Toledano

unread,
May 14, 2013, 2:49:14 PM5/14/13
to publice...@googlegroups.com
Colega, visite SAN GOOGLE en vez de cuando.
Acá tenes algo, que podes sumar a lo que ya te pase.
http://fox.wikis.com/wc.dll?Wiki~VFPFunctionOS

Mas lo que te menciono Fernando,

Si tenes algun problema, avisame, te hago el codigo..... Jajajajajaja


El 14/05/2013 03:43 p.m., Fernando D. Bozzo escribió:
GETENV( "PROCESSOR_ARCHITECTURE" )

Saul Piña Hernandez

unread,
May 14, 2013, 3:20:18 PM5/14/13
to publice...@googlegroups.com, arnaldo....@gmail.com
ja, ja...hora si como tu quieras ......


Lo que pasa es que ando contra el tiempo, y pues la verdad este foro ayuda un monton, si tengo amigos que tienen experiencia basta en lo que yo mismo hago...

juanziur

unread,
May 14, 2013, 3:53:36 PM5/14/13
to publice...@googlegroups.com
publique una respuesta pero no estoy seguro de haberle dado enviar, asi que va de nuez!!!!

creo qe no es necesario saber la version del sistema operativo, solo se necesita determinar que odbc esta en uso, aqui temndo como es que yo hago para que "magicamente" el sistema pueda conectarce a mysql

por favor avisa si tu problema se resuelve, con gusto te puedo ayudar

saludos



odbcmysql     =  tipocontroladorsql("MySql")
? odbcmysql  && aqui determinas cual es controlador que esta en uso, si esta vacio, entonces esta instalado algo mal

 
nlhandle = myconectar()
If nlhandle>0
sqlcmd = 'select * from algunatabla'
conmysql = SQLExec(nlhandle, sqlcmd, 'alguncursor')
EndIf



FUNCTION MYConectar
EXTERNAL ARRAY arrparamsql
driverenuso = TipoControladorSQL("MySql")
lcstringconn = "Driver={"+driverenuso+"};Port="+"3306"+";Server="+"aquivalaipdetuserverdemysql"+";Database="+"Aquivaelnmbredetubasededatos"+";Uid="+"aquivaeluser"+";Pwd="+"aquivaelpassword"+";Option=1"
SQLSETPROP(0, "DispLogin", 3)
SQLSETPROP(0, "DispWarnings", .F.)
lnsqlhandle = SQLSTRINGCONNECT(lcstringconn)
IF lnsqlhandle<=0
= AERROR(laerror)
ENDIF
RETURN lnsqlhandle
ENDFUNC
**


FUNCTION TipoControladorSQL
PARAMETER tservicio
DECLARE INTEGER SQLGetInstalledDrivers IN odbccp32 AS odbDrivers STRING @, INTEGER, INTEGER @
LOCAL cbuffer, nbufsize, ii, ch, cname
nbufsize = 16384
cbuffer = REPLICATE(CHR(0), nbufsize)
IF odbDrivers(@cbuffer, nbufsize, @nbufsize)=0
RETURN "-Error no hay odbc instalado"
ENDIF
CREATE CURSOR csResult (drvname C (100))
cbuffer = SUBSTR(cbuffer, 1, nbufsize)
cname = ""
FOR ii = 1 TO nbufsize
ch = SUBSTR(cbuffer, ii, 1)
IF ch=CHR(0)
IF  .NOT. EMPTY(m.cname)
INSERT INTO csResult VALUES (m.cname)
ENDIF
cname = ""
ELSE
cname = cname+ch
ENDIF
ENDFOR
CLEAR DLLS  'ODBDRIVERS'
lcdrvname = ""
DO CASE
CASE tservicio="SQLServer"
SELECT drvname FROM csResult WHERE LOWER(drvname) LIKE "%native client%"  INTO CURSOR Esta
CASE tservicio="MySql"
SELECT drvname FROM csResult WHERE LOWER(drvname) LIKE "%mysql odbc%"  INTO CURSOR Esta
ENDCASE
IF _TALLY<>0
lcdrvname = ALLTRIM(Esta.drvname)
Else
lcdrvname = "-No determine el controlador"
ENDIF
USE IN (SELECT("csResult"))
USE IN (SELECT("Esta"))
RETURN lcdrvname
ENDFUNC

Enrique Vasquez - Gmail

unread,
May 15, 2013, 11:43:15 AM5/15/13
to publice...@googlegroups.com
Hola Fernando,

he leido tu solucion sobre usar GETENV( "PROCESSOR_ARCHITECTURE" )
y haciendo un par de pruebas en mis pc, el valor que sa siempre es x86

en windows 7 64 bits da siempre x86
en windows xp 32 bits da siempre x86

sabes algo mas del porque?

Enrique Vásquez Bautista
cell. +39-3334497305
Genova - Italia

Fer

unread,
May 15, 2013, 11:59:04 AM5/15/13
to publice...@googlegroups.com

Ni idea, yo solo abrí una ventana de comandos en cada windows puse SET (enter) y me fijé si podía servir alguna de las variables de entorno.
Si la de 64 bits no te muestra AMD64, entonces no es de 64 bits cómo crees, o tiene algo mal.
Busca esa variable en Google y el primer resultado te lleva a un foro que tiene un link a un artículo do Microsoft que pone los posibles valores: x86, AMD64 y IA64.

Saludos.

Guillermo MDQ

unread,
May 15, 2013, 12:26:34 PM5/15/13
to publice...@googlegroups.com
En las Windows Management Instrumentation esta la clase Win32_ComputerSystem class que tiene la propiedad SystemType que te da la informacion del tipo de arquitectura del sistema operativo.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa394102%28v=vs.85%29.aspx

Y en Portalfox hay ejemplos de como se usa WMI.

Saludos
Guillermo

Qsoft

unread,
May 15, 2013, 12:29:01 PM5/15/13
to publice...@googlegroups.com

Gracias. Pero mi sistema si es de 64 bits. Creo que ese valor por ahora no es confiable. Yo ando en lo mismo. Buscando el modo de saber en que arquitectura se está ejecutado el programa.

juanziur

unread,
May 15, 2013, 12:52:06 PM5/15/13
to publice...@googlegroups.com, Darío Castillejos
Que tal grupo

Perdon por mi gran ignorancia, ojala alguien pueda ayudarme
Pero sigo sin entender por que nuestro amigo necesita saber la versión del sistema operativo?
No entiendo que tiene que ver con la conexion, VFP siempre utiliza el driver de 32 bits, o me equivoco?
e independientemente del sistema operativo siempre se debe usar el driver que este instalado, o no?

El día de ayer publique un ejemplo de como resolver el tema de la conexión sin importar la versión del sistema operativo, es una sección de código que me funciona todos los días.

Quizá si publicas la sección de codigo con la que tienes problemas podemos ayudarte puntualmente

Saludos y larga vida al Zorro!


El martes, 14 de mayo de 2013 08:57:48 UTC-5, Saul Piña Hernandez escribió:

Jose Antonio Blasco

unread,
May 15, 2013, 12:57:37 PM5/15/13
to Comunidad de Visual Foxpro en Español
Habeis probado si el boton "System Info" en el "Acerca de" de VFP os da la información que quereis ?

Creo que utiliza el ocx "sysinfo"

Un saludo.

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2

"No hay camino hacia la libertad, la libertad es el camino" - Indira Gandhi
“Nunca te olvides de sonreír, porque el día que no sonrías  será un día perdido”  -  Charles Chaplin
“Todo el mundo quiere tener un amigo, pero pocos se toman la molestia de ser uno”
- Anónimo

Jose Antonio Blasco

unread,
May 15, 2013, 1:13:21 PM5/15/13
to Comunidad de Visual Foxpro en Español
Pues parece que me equivoco.  En realidad creo que utiliza la libreria "msinfo32.dll"

Intentaré buscar más información.

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2

"No hay camino hacia la libertad, la libertad es el camino" - Indira Gandhi
“Nunca te olvides de sonreír, porque el día que no sonrías  será un día perdido”  -  Charles Chaplin
“Todo el mundo quiere tener un amigo, pero pocos se toman la molestia de ser uno”
- Anónimo


Fabio Ramirez

unread,
May 15, 2013, 1:14:40 PM5/15/13
to publice...@googlegroups.com
Hola,  asi lo manejo yo...
Mira a ver si te sirve...
hasta Pronto.

Procedimiento para saber si esta corriendo a 64 Bits

IF bits64() = .f.     
   ?  "32Bits"  
   * Aqui ejecutas el instalador de mysql32
 ELSE
  ?" 64Bits"   
   * Aqui ejecutas el instalador de mysql64
ENDIF    



FUNCTION bits64
* First determine if IsWow64Process function exists in the OS we're running under
DECLARE Long GetModuleHandle IN WIN32API STRING lpModuleName
DECLARE Long GetProcAddress IN WIN32API Long hModule, String lpProcName
llIsWow64ProcessExists = (GetProcAddress(GetModuleHandle("kernel32"),"IsWow64Process") <> 0)
 
llIs64BitOS = .F.
IF llIsWow64ProcessExists 
DECLARE Long GetCurrentProcess IN WIN32API 
DECLARE Long IsWow64Process IN WIN32API Long hProcess, Long @ Wow64Process
lnIsWow64Process = 0
* IsWow64Process function return value is nonzero if it succeeds 
* The second output parameter value will be nonzero if VFP application is running under 64-bit OS 
IF IsWow64Process( GetCurrentProcess(), @lnIsWow64Process) <> 0
llIs64BitOS = (lnIsWow64Process <> 0)
ENDIF
ENDIF
RETURN  llIs64BitOS 




El martes, 14 de mayo de 2013 08:57:48 UTC-5, Saul Piña Hernandez escribió:

Arnaldo Toledano

unread,
May 15, 2013, 3:06:45 PM5/15/13
to publice...@googlegroups.com
JUAN ZIUR.
El asunto es mas o menos asi.
Su sistema realiza la conexion ODBC DIRECTAMENTE.
El Windows, por defecto, ejecuta un .EXE para realizar la conexion.
En el caso de Win 32, exejuta un exe llamemosle run32.exe
En el caso de win 64, ejecuta un exe llamemosle run64.exe

VFP NO ACEPTA el run64.exe
Pero el Win 64 trae un exe run32.exe en "otro directorio"
Si podes identificar que win usas, buscas el exe correspondiente y punto.


Arnaldo Toledano

juanziur

unread,
May 15, 2013, 4:09:43 PM5/15/13
to publice...@googlegroups.com
Wooow, no cabe duda que cada día se aprende algo nuevo, ignoro como es un ODBC DIRECTAMENTE, pero ya me encuentro en busca de informacion suficiente que me ayude a eliminar tanta ignorancia mia :)


Perdonen que insista, pero me llamo mucho la atención este tema, me gustaría saber en que sección de código se hace el llamado a odbcad32.exe
no comprendo cuando o para que se hace el llamado en fox 

por otro lado y solo como una solucion muy tonta, puedes aplicar lo siguiente

if  Directory("c:\windows\syswow64") then
   es de 64bits
else
  es de 32
endif





Aquí una forma en al que se puede crear un DSN directamente




FUNCTION CreaDSN
PARAMETER lpszdriver, lcdsn, lcdescrip, lcdatabase, lcserver, lcuid, lcpwd
DECLARE INTEGER SQLConfigDataSource IN odbccp32.DLL INTEGER, INTEGER, STRING, STRING
hwndparent = 0
frequest = 1
lpszattributes = "DSN="+ALLTRIM(lcdsn)+CHR(0)+"Description="+ALLTRIM(lcdescrip)+CHR(0)+"DATABASE="+ALLTRIM(lcdatabase)+CHR(0)+"SERVER="+ALLTRIM(lcserver)+CHR(0)+"UID="+ALLTRIM(lcuid)+CHR(0)+"PWD="+ALLTRIM(lcuid)
LOCAL lret
lret = sqlconfigdatasource(hwndparent, frequest, lpszdriver, lpszattributes)
IF lret<=0
   RETURN 0
ENDIF
RETURN lret
ENDFUNC
**
PROCEDURE BorraDSN
WAIT "aqui borra el DSN creado"
PARAMETER lpszattributes
frequest = 3
LOCAL lret
lret = sqlconfigdatasource(hwndparent, frequest, lpszdriver, lpszattributes)
IF lret<=0
   MESSAGEBOX("No se puede eliminar la conexión", 16, "Error")
ENDIF
ENDPROC

Saul Piña Hernandez

unread,
May 15, 2013, 7:41:40 PM5/15/13
to publice...@googlegroups.com, Darío Castillejos
Saludos Amigo Juanzur!

El porqué necesitaba, (ya no porque resulta que me cambiaron a windows 8 y éste tipo de windows vienen los dos origenes de odbc para 32 y otro para 64 bits)  Sin querer me solucionaron por el momento el problema.

Ahora bien, porqué necesitaba saber cuando conectarme en odbc 64 y cuando en odbc 32 bits:

Siempre he utilizado el conector "Driver 5.1 de Mysql x86 / 32bits".  Entonces me tiro un error de que no encontraba el conector. (windows 7 64 bits) 
Entonces me di a la tarea de cambiar de conector por este "Driver 5.2 de Mysql x64 bits" lo instale y le cambié en la cadena de conexion por esté y funcionó de maravilla. 

Por ese motivo estaba solicitando o consultando la duda....

Gracias a todos!



Reply all
Reply to author
Forward
0 new messages