Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过vb6代码为mysql odbc驱动程序3.51创建DSN在windows 64位系统中不工作_Mysql_Vb6_Odbc_Dsn - Fatal编程技术网

通过vb6代码为mysql odbc驱动程序3.51创建DSN在windows 64位系统中不工作

通过vb6代码为mysql odbc驱动程序3.51创建DSN在windows 64位系统中不工作,mysql,vb6,odbc,dsn,Mysql,Vb6,Odbc,Dsn,有人能帮我吗,下面的代码vb6在Windows7 32位下运行良好,但在Windows10 32或Windows10 64位下不工作 我为mysql数据库odbc驱动程序3.51创建dsn的vb6代码如下:- Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" (ByVal hwndParent As Integer, ByVal fRequest As Integer,

有人能帮我吗,下面的代码vb6在Windows7 32位下运行良好,但在Windows10 32或Windows10 64位下不工作

我为mysql数据库odbc驱动程序3.51创建dsn的vb6代码如下:-

Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" (ByVal hwndParent As Integer, ByVal fRequest As Integer, 
                                                             ByVal lpszDriver As String, ByVal lpszAttributes As String) As Integer

Dim Attr as string

 Attr = "SERVER=localhost" & Chr(0)
        Attr = Attr & "DSN=ABC" & Chr(0)
        Attr = Attr & "DESCRIPTION=DSN For ABC" & Chr(0)
        Attr = Attr & "DATABASE=mysqltestdb" & Chr(0)
        Attr = Attr & "User=root" & Chr(0)
        Attr = Attr & "Password=abctest" & Chr(0)
        Attr = Attr & "option=2" & Chr(0)
        iReturn = SQLConfigDataSource(0, 1, "MySql ODBC 3.51 Driver", Attr)

在Windows 64位系统上,32位版本的DLL位于“C:\Windows\SysWOW64”文件夹中。默认情况下,
SQLConfigDataSource
是从包含64位DLL的“C:\Windows\System32”文件夹加载的,这会导致函数出错

我知道这个文件夹的命名似乎是倒退的,但它确实是如何设计的,并解释了为什么会这样

按如下方式声明函数,然后重试:

Private Declare Function SQLConfigDataSource _ 
Lib "C:\Windows\SysWOW64\ODBCCP32.DLL" (ByVal hwndParent As Integer, _ 
                                        ByVal fRequest As Integer, _ 
                                        ByVal lpszDriver As String, _ 
                                        ByVal lpszAttributes As String) As Integer

得知64位文件夹(system32)中有一个名为“ODBCCP32.DLL”的DLL,我很惊讶——但我在电脑上检查了一下,它就在那里。硬编码绝对路径可能会起作用,但也会让我感到不舒服。通常这是没有必要的。我认为作为32位的VB6运行时应该首先尝试从SysWow64加载32位DLL。我很惊讶它会首先找到一个64位的DLL。您在“不工作”部分列出了几个windows变体-写得正确吗?因为您在那里列出了一个32位版本,同时指出这是一个64位问题。(请注意,如果需要,您可以编辑问题的文本)。